我在redis中存储用户feed,每个feed都存储为一个散列,键是users id,散列的字段是创建内容的用户,值是内容,我如何处理内容创建者多次发布的情况,因为它将覆盖缓存中已经存在的内容,而不存储新内容。
6mw9ycah1#
它“主要”取决于您想如何查询它。如果要同时获取所有哈希字段/值( HGETALL )然后你可以在你的标识符旁边加上时间戳;
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) 1127.0.0.1:6379> zadd user:1:feed 2 content-another(integer) 1127.0.0.1:6379> zadd user:1:feed 2 content-another-some-another(integer) 1127.0.0.1:6379> ZRANGEBYSCORE user:1:feed 2 2 withscores
score
ZRANGEBYSCORE
ZRANGE
1条答案
按热度按时间6mw9ycah1#
它“主要”取决于您想如何查询它。如果要同时获取所有哈希字段/值(
HGETALL
)然后你可以在你的标识符旁边加上时间戳;如果有可能同时保存多个内容(计划在某个时间发布多个内容),那么您也可以附加一些随机字符串。
如果您没有得到用户的所有内容,但是用户的提要只显示特定用户的内容,那么您可以使用排序集。在这个例子中
score
是内容所有者的用户id,您可以使用ZRANGEBYSCORE
. 你仍然可以得到user:1 withZRANGE
```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
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
127.0.0.1:6379>