有一种简单的方法可以在Redis中创建一个空的有序集吗? The documentation个州
如果key不存在,则使用指定成员的新排序集 创建唯一成员,就像排序集是空的一样。如果关键 存在但不保存有序集,则返回错误。
但是,它并没有说你可以创建一个空的有序集。以下内容不会创建空的有序集:
127.0.0.1:6379> zadd likes:0 1 one
(integer) 1
127.0.0.1:6379> exists likes:0
(integer) 1
127.0.0.1:6379> zcard likes:0
(integer) 1
127.0.0.1:6379> dbsize
(integer) 1
127.0.0.1:6379> zrem likes:0 one
(integer) 1
127.0.0.1:6379> exists likes:0
(integer) 0
用例可靠地将数据从另一个数据库迁移到Redis,即Postgres:
likes:<postId>
zadd likes:<postId> <createdAt> <userId>
,请执行exists likes:<postId
。否则,请查找喜欢的Postgres,并将其存储在likes:<postId>
。创建一个空的有序集会启用断言,当在该帖子上进行第一次类似操作时,该断言会删除对Postgres的过多查询,但仍然支持尚未迁移到Redis的帖子。此优化将每天保存数据库100k +读数。
答案 0 :(得分:4)
如果密钥不存在,则它表现为任何类型的空实例。在您的情况下,您可以避免调用EXISTS likes:<postId>
并假设密钥在那里,因为结果行为将是相同的:当您添加成员时,如果列表不存在,则将创建列表点。