string - Redis 字符串还是集合?

标签 string redis set

我想存储人和食物对,人在 5 分钟内吃掉食物,所以我需要使 key 过期。所以我有两种方法可以做到这一点,字符串或集合:

1. setex person:tommy:food:chicken 300 anything
   setex person:tommy:food:chip 300 anything
   ...

2. sadd person:tommy chicken chip
   expire person:tommy 300

哪个更好?或者还有其他办法吗?

最佳答案

我会选择第二个选项。我的理由是:

  1. 由于条目没有附加任何其他信息,因此没有理由为每个项目提供自己的 key (例如,如果每个项目需要存储信息的哈希值,则这将有所不同)。
  2. 您无需创建另一个 key 即可查明有多少食品与某个人 ( SCARD ) 相关联。
  3. 您拥有其他所有 set functions如果您需要操作或相互比较多个集合,则可以使用该方法。
  4. 如果您阅读 how redis expires keys 上的文档,您注意到 Redis 有一种主动的方法来处理过期 key 。使用第二个选项的设计,可以保证在 key 过期方法运行时,与某人关联的所有食物数据将同时删除。

在某种程度上,这个问题似乎类似于在编程语言中使用单个变量,而不是数组:

a = 3, b = 5, c = 7
sum = a + b + c

对比

items = [3, 5, 7]
sum = sum(items)

关于string - Redis 字符串还是集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24149028/

相关文章:

python - 读取为 NoneType 的 txt 行

php - 增加其中包含一些字母的变量

java - 从数组列表中删除字符串

javascript - Node.js、wordpress、redis

python - celery 任务在 Django 框架中不起作用

c++ - C++中set_intersection可以和hash_set一起使用吗?

python - Python 中的列表表达式

string - 按字母顺序对字符串中的字母进行排序 - SAS

azure - 使用 Azure KeyVault 添加 session 状态提供程序作为连接字符串

python - 在一组集合中查找集合对的有效方法