使用 Spring + Jedis 设置时,排序集如何存储在 Redis 中?

How are sorted sets stored in redis when set using Spring + Jedis?

我有一个 Spring 4.3.9 应用程序 w/ spring-data-redis (1.8.7) 和 jedis (2.9.0)。我可以使用如下代码轻松设置和检索 ZSET:

// Commented out -- but below line works fine too
// redisTemplate.opsForZSet().remove("score", userId);
Double scoreInRedis = redisTemplate.opsForZSet().score("score", userId);
redisTemplate.opsForZSet().add("score", userId, (double) score);

但是,当我转到 redis CLI 并尝试使用 "score" 键检索 ZSET 时,我什么也没得到 returned。所以我尝试了以下命令:

ZCARD "score" <-- this should give number of items wi
(integer) 0
ZSCORE "score" userId <--> I use the actual number here for the userId
(nil)

其他命令,如 ZREVRANGE 或 ZREVRANGEBYSCORE 所有 return(无)。

我知道我的密钥正在设置中,因为 "info keyspace" 显示密钥和过期之间的差异恰好为 1 -- 这是我的 ZSET 分数。如果我从我的 Spring 应用程序中删除我的 ZSET,密钥和过期密钥的数量是相同的。所以我知道我的钥匙在某处。

伙计,我的 ZSET 呢??我如何通过 CLI 访问它?我可以轻松地继续开发 w/o 通过 CLI 访问,但我想了解我在哪里。

原来我用错了 RedisTemplate<String, Long>。我切换到基于 StringRedisTemplate 的 bean 并且神奇地我的密钥现在在 CLI 上可见。

我仍然不确定在使用其他 bean 时我的密钥藏在哪里。

顺便说一句,我在处理这个问题时遵循了这里的一些指导:https://medium.com/@smoothed9/redis-sorted-sets-with-spring-boot-and-redistemplate-66931e2e1b86