Redis 对 zset 操作的问题

2018-12-09 19:51:34 +08:00
 zhyzhy

业务是这样的,对每一个活动做一个 zset 保存参与用户的 id 和参与时间
判断的时候,如果返回 null,不知道是 key 被删了还是没有此 member,对于这两个情况后续操作不一样
目前只得全部套上了 pipeline 先判断下 exist 这个 key

用 redis-cli 的时候似乎对这两种情况也都是返回的 nil
你们平时有这种情况吗,咋解决的呢。。。

7556 次点击
所在节点    Redis
7 条回复
charles2java
2018-12-09 22:25:46 +08:00
那就不要删除 key,设置为默认值?
hbpeng
2018-12-10 09:11:00 +08:00
pipeline 没办法解决吧 pipeline 里面第二条命令是没办法依赖第一条的结果的 感觉你这个只能用 lua
br00k
2018-12-10 09:11:54 +08:00
如果没有数据的我的操作是初始化一条数据进去。取的时候把这条过滤掉。
server
2018-12-10 12:05:46 +08:00
小哥,入库前不检查下用户吗?
myzWILLmake
2018-12-10 14:51:20 +08:00
不太清楚你使用 zset 是用来做什么业务的,但是可能对于 zset 的理解有些偏差。zset 的数据结构为跳表,单个数据为跳表中的一个节点。删除操作的话会将这个节点从这个跳表中移出并且释放掉。所以对于 zset 已经删除的节点就是不存在的数据,当然不会查到。
zhyzhy
2018-12-10 15:36:22 +08:00
@hbpeng 是没法依赖第一条,所以 key exist 和 member value 的结果全部捞出来了,key 不存在就执行不存在的逻辑,不去查看 member 的结果了
zhyzhy
2018-12-10 15:38:37 +08:00
@myzWILLmake = = 没看明白。。。我的意思是就比如 zrank myzset user1 这个命令,返回了 nil,我不知道到底是没有这个 zset,还是 zset 中没有 user1 这个 member

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/515896

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX