You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 03:10:54