前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Go中操作Redis服务

如何在Go中操作Redis服务

作者头像
Mandy的名字被占用了
发布2022-06-08 17:13:11
1.8K0
发布2022-06-08 17:13:11
举报
文章被收录于专栏:菜鸟成长学习笔记

本文将分享在Golang中如何操作Redis。文章中演示的组件库为go-redis,本文会对该组件进行详细的演示。

go-redis

go-redis是一个基于Golang语言的Redis客户端组件。其功能也非常的强大与完善。支持如下功能。

  1. 1. ✅ Redis通用命令支持、各大数据类型支持。
  2. 2. ✅ Redis Cluster支持。
  3. 3. ✅ Redis Replication支持。
  4. 4. ✅ Redis Sentinel支持。
  5. 5. ✅ 支持管道、事务、发布/订阅、Luau脚本、模拟和分布式锁等。

对应使用Golang操作Redis,另外还有一个组件,该组件相对go-redis有一些区别,2个项目之间的主要区别在于go-redis为每个Redis命令提供了类型安全的API。大致区别如下图:

使用演示

首先在本地编译安装Redis服务,这里可以根据自己的方式来进行安装,只要能保证Redis可使用就行。

代码语言:javascript
复制
// 解压文件
tar -zxvf redis-5.3.7.tgz

// 编译并安装
cd redis-5.3.7 && make && make install

// 配置Redis
需要将redis.conf中的daemon 设置为yes 开启守护进程模式运行。

// 启用Redis服务
redis-server ./redis.conf

接下来就可以正常操作Redis服务。

配置Redis连接信息

代码语言:javascript
复制
package config

import (
    "time"

    "github.com/go-redis/redis/v8"
)

func GetConnect() *redis.Client {
    return redis.NewClient(&redis.Options{
        Addr:        "localhost:6379", // 连接地址
        Password:    "",               // 密码
        DB:          0,                // 数据库编号
        DialTimeout: 1 * time.Second,  // 链接超时
    })
}

操作字符串

代码语言:javascript
复制
result, err := config.GetConnect().Set(context.Background(), "name", time.Second, time.Second*10).Result()
if err != nil {
  fmt.Println(err)
  return
}
fmt.Println(result)
// 运行脚本
╰─ go run main.go
redis服务连接成功
OK

操作List

代码语言:javascript
复制
func list() {
    // push数据
    result, err := config.GetConnect().LPush(context.Background(), "list", 1).Result()
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(result)
    // pop数据
    str, err := config.GetConnect().LPop(context.Background(), "list").Result()
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(str)
}
// 运行脚本
╰─ go run main.go
redis服务连接成功
1
1

操作hash

代码语言:javascript
复制
func hash() {
    // 单个添加
    //result, err := config.GetConnect().HSet(context.Background(), "hash", "key1", "value1").Result()
    // 批量添加
    //result, err := config.GetConnect().HSet(context.Background(), "hash", "key1", "value1", "key2", "value2").Result()
    // 使用切片
    //result, err := config.GetConnect().HSet(context.Background(), "hash", []string{"key3", "value3", "key4", "value4"}).Result()
    // 使用map
    hasMap := make(map[string]string)
    hasMap["key5"] = "value5"
    hasMap["key6"] = "value6"
    result, err := config.GetConnect().HSet(context.Background(), "hash", hasMap).Result()
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(result)
}

限流

代码语言:javascript
复制
go get github.com/go-redis/redis_rate/v9
代码语言:javascript
复制
rdb := redis.NewClient(&redis.Options{
    Addr: "localhost:6379",
})


limiter := redis_rate.NewLimiter(rdb)
res, err := limiter.Allow(ctx, "project:123", redis_rate.PerSecond(10))
if err != nil {
    panic(err)
}

fmt.Println("allowed", res.Allowed, "remaining", res.Remaining)

布隆过滤器

代码语言:javascript
复制
func bloomFilter(ctx context.Context, rdb *redis.Client) {
    inserted, err := rdb.Do(ctx, "BF.ADD", "bf_key", "item0").Bool()
    if err != nil {
        panic(err)
    }
    if inserted {
        fmt.Println("item0 was inserted")
    }

    for _, item := range []string{"item0", "item1"} {
        exists, err := rdb.Do(ctx, "BF.EXISTS", "bf_key", item).Bool()
        if err != nil {
            panic(err)
        }
        if exists {
            fmt.Printf("%s does exist\n", item)
        } else {
            fmt.Printf("%s does not exist\n", item)
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 卡二条的技术圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • go-redis
  • 使用演示
    • 配置Redis连接信息
      • 操作字符串
        • 操作List
          • 操作hash
            • 限流
              • 布隆过滤器
              相关产品与服务
              云数据库 Redis
              腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档