go-redis v9的SMembers方法返回结果首位置出现额外元素问题
问题原因及解决方法
你遇到的问题是错误地把过期时间参数传递给了SAdd方法,导致过期时间被当成集合元素添加进去了。
go-redis v9的SAdd方法签名是:
func SAdd(ctx context.Context, key string, members ...any) *IntCmd
它的参数结构是:上下文、键名、可变参数的集合成员。你把expiration作为第三个参数传入,它会被当作集合的一个成员存入Redis,输出里的2592000000000000就是你传入的过期时间的纳秒数值(比如30天对应的纳秒值)。
如果要给集合键设置过期时间,需要单独调用Expire方法,修正后的代码如下:
// 添加元素到集合 added := redis.SAdd(ctx, "key1", "android_device2") // 单独设置键的过期时间 err := redis.Expire(ctx, "key1", expiration).Err() if err != nil { // 处理错误 } // 获取集合成员 members := redis.SMembers(ctx, "key1").Val() fmt.Printf("%v", members)
这样就能得到正确的输出[android_device2]。
内容的提问来源于stack exchange,提问作者Robo
相关产品推荐
相关产品推荐

