我们目前正在使用 Redis 作为我们的数据存储。我正在创建一个新的部分,我们需要对用户进行排名和分页。所以我正在考虑使用排序集来保存排名和用户 ID。并使用哈希来保存用户的个人资料数据。一位同事提醒我,我们需要向 redis 发出许多请求来使用 HGET 获取用户个人资料数据。因此往返时间将是一个问题。我原本打算使用 HMGET,但经过一番研究后,我发现当 Redis 集群时可能会导致问题,因为密钥存储在不同的 redis 节点中。我正在使用 phpredis,它具有客户端分片(我很难理解那是什么)。
我想这样做:
秩
zadd userRank 1 5
zadd userRank 2 2
zadd userRank 3 4
zadd userRank 4 3
用户资料
hset userProfile user:5 "{'userId':'5','name':'usera'}"
hset userProfile user:4 "{'userId':'4','name':'userb'}"
hset userProfile user:3 "{'userId':'3','name':'userc'}"
hset userProfile user:2 "{'userId':'2','name':'userb'}"
1)HMGET在集群Redis中可以正常工作吗?
2)如果没有,我该怎么办?
3)有没有更好的方法来实现这一点?
答案1
- HMGET 应该在集群 Redis 中工作,因为它只与单个键相关。每个 HMGET 都将转发到包含该键的节点
- /
- 将每个序列化的用户存储在哈希中并不是一个好主意,您将失去请求/增加/减少某些字段的能力。
更喜欢:
hmset user:5 userId 5 name usera
hmset user:4 userId 4 name userb
hmset user:3 userId 3 name userc
hmset user:2 userId 2 name userb
您的排名架构没问题。要检索排名靠前的用户并进行分页,只需执行ZREVRANGEBYSCOR然后请求每个用户。