在redis中存储相同哈希字段的最佳方法是什么?

2w2cym1i  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(368)

我在redis中存储用户feed,每个feed都存储为一个散列,键是users id,散列的字段是创建内容的用户,值是内容,我如何处理内容创建者多次发布的情况,因为它将覆盖缓存中已经存在的内容,而不存储新内容。

6mw9ycah

6mw9ycah1#

它“主要”取决于您想如何查询它。如果要同时获取所有哈希字段/值( HGETALL )然后你可以在你的标识符旁边加上时间戳;

127.0.0.1:6379> hset user:1:feed user:2:1591081521 content1
(integer) 1
127.0.0.1:6379> hset user:1:feed user:2:1591081532 yet-another-content
(integer) 1
127.0.0.1:6379> hset user:1:feed user:3:1591081543 super-content
(integer) 1
127.0.0.1:6379> hgetall user:1:feed
1) "user:2:1591081521"
2) "content1"
3) "user:2:1591081532"
4) "yet-another-content"
5) "user:3:1591081543"
6) "super-content"
127.0.0.1:6379>

如果有可能同时保存多个内容(计划在某个时间发布多个内容),那么您也可以附加一些随机字符串。
如果您没有得到用户的所有内容,但是用户的提要只显示特定用户的内容,那么您可以使用排序集。在这个例子中 score 是内容所有者的用户id,您可以使用 ZRANGEBYSCORE . 你仍然可以得到user:1 with ZRANGE ```
127.0.0.1:6379> zadd user:1:feed 2 content
(integer) 1
127.0.0.1:6379> zadd user:1:feed 2 content-another
(integer) 1
127.0.0.1:6379> zadd user:1:feed 2 content-another-some-another
(integer) 1
127.0.0.1:6379> ZRANGEBYSCORE user:1:feed 2 2 withscores

  1. "content"
  2. "2"
  3. "content-another"
  4. "2"
  5. "content-another-some-another"
  6. "2"
    127.0.0.1:6379> zadd user:1:feed 3 content-of-user-3
    (integer) 1
    127.0.0.1:6379> zrange user:1:feed 0 -1 withscores
  7. "content"
  8. "2"
  9. "content-another"
  10. "2"
  11. "content-another-some-another"
  12. "2"
  13. "content-of-user-3"
  14. "3"
    127.0.0.1:6379>

相关问题