Redis删除排序集中的项目

标签 redis

我正在使用 Redis 在我的社交网络应用程序中实现一个类似于 Instagram/facebook 的“提要”系统。

我有一个键“user:id:feed”,其中包含一组指向图片的排序ID。我想知道的是,当删除特定照片时,如何确保包含该照片 ID 的所有 Feed 中的照片 ID 也被删除?

我是否必须循环遍历每个提要集并将其删除?这是 Redis 中的常见模式吗?

谢谢

最佳答案

Redis 中的常见模式是交叉引用各种数据结构中的项目。您必须明确地执行此操作(Redis 没有自动引用完整性机制)。

这里,提要和照片之间存在多对多关系。如果您需要添加/删除提要和照片,您可能需要使用 2 个不同的数据结构来实现这种关系。

user:id:feed  ->  sorted sets of photo:n (referring to photos)
photo:n       ->  set of user:id:feed (referring to feeds)

因此您可以高效地从 Feed 中检索照片,以及从照片中检索 Feed。例如删除照片:

  • 从照片中检索提要:n
  • 通过管道传输多个 ZREM 操作(每个用户一个:id::feed)

因此删除操作最终需要两次往返。您可以使用 Lua 服务器端脚本将往返次数减少到 1 次。

关于Redis删除排序集中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17361794/

相关文章:

node.js - 使用redis缓存关系数据

caching - Redis线程和访问问题

ruby-on-rails - 启动 Rails 服务器时出现奇怪的 "no such file to load -- redis-namespace"异常

python - 为什么我不能通过 fabric 与 redis-cli 交互?

redis - 构建redis键

rest - Rest api中的redis key 更新通知

python - 为什么在这个简单的基准测试中 SQLite 比 Redis 快?

Node.js:有多少 Redis 客户端?

node.js - Redis命令获取Redis集群上的所有可用 key ?

redis - 服务栈.Redis.RedisResponseException : unknown command 'SCAN'