Go操作Redis

本文介绍了Go语言中使用redis-go客户端操作Redis的相关知识,包括Redis的应用场景如缓存、计数、排行榜等,支持的数据类型如字符串、哈希、列表等,并详细讲解了如何进行普通连接、TLS连接、Sentinel模式和Cluster模式的设置,以及GET、SET、LIST、SETNX、HASH、ZSet等基本命令的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Go操作Redis

Go整合Redis 采用的客户端为redis-go, 下面针对一些redis相关的知识展开总结。

Redis 应用的场景
  • 缓存系统,减轻主数据库(MySQL)的压力。
  • 计数场景,比如微博、抖音中的关注数和粉丝数。
  • 热门排行榜,需要排序的场景特别适合使用ZSET。
  • 利用 LIST 可以实现队列的功能。
  • 利用 HyperLogLog 统计UV、PV等数据。
  • 使用 geospatial index 进行地理位置相关查询。
支持的数据类型

Redis支持诸如字符串(string)、哈希(hashe)、列表(list)、集合(set)、带范围查询的排序集合(sorted set)、bitmap、hyperloglog、带半径查询的地理空间索引(geospatial index)和流(stream)等数据结构。

使用

下载依赖包

go get github.com/go-redis/redis/v8
  • 普通连接模式
rdb := redis.NewClient(&redis.Options{
   
	Addr:     "localhost:6379",
	Password: "", // 密码
	DB:       0,  // 数据库
	PoolSize: 20, // 连接池大小
})
  • 从字符串数据源中解析
opt, err := redis.ParseURL("redis://<user>:<pass>@localhost:6379/<db>")
if err != nil {
   
	panic(err)
}

rdb := redis.NewClient(opt)
  • TLS模式解析
rdb := redis.NewClient(&redis.Options{
   
	TLSConfig: &tls.Config{
   
		MinVersion: tls.VersionTLS12,
		// Certificates: []tls.Certificate{cert},
    // ServerName: "your.domain.com",
	},
})
  • Redis Sentinel模式
rdb := redis.NewFailoverClient(&redis.FailoverOptions{
   
    MasterName:    "master-name",
    SentinelAddrs: []string{
   ":9126", ":9127", ":9128"},
})
  • Redis Cluster模式
rdb := redis.NewClusterClient(&redis.ClusterOptions{
   
    Addrs: []string{
   ":7000", ":7001", ":7002", ":7003", ":7004", ":7005"},

    // 若要根据延迟或随机路由命令,请启用以下命令之一
    // RouteByLatency: true,
    // RouteRandomly: true,
})
基本命令使用
  • GET命令
func doCommand() {
   
	ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond)
	defer cancel()

	// 执行命令获取结果
	val, err := rdb.Get(ctx, "key").Result()
	fmt.Println(val, err)

	// 先获取到命令对象
	cmder := rdb.Get(ctx, "key")
	fmt.Println(cmder.Val()) // 获取值
	fmt.Println(cmder.Err()) // 获取错误

	// 直接执行命令获取错误
	err = rdb.Set(ctx, "key", 10, time.Hour).Err()

	// 直接执行命令获取值
	value := rdb.Get(ctx, "key").Val()
	fmt.Println(value)
}
  • SET命令
if err := rdb.Set(ctx, "foo", "bar", 0).Err(); err != nil {
   
    panic(err)
}
  • 检查key是否存在及查询所有的key
n, _ := rdb.Exists(ctx, "name").Result()
if n > 0 {
   
    fmt.Println("name key 存在!")
} else {
   
    fmt.Println("name key 不存在!"<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值