我想存储人和食物对,人在 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
哪个更好?或者还有其他办法吗?
最佳答案
我会选择第二个选项。我的理由是:
- 由于条目没有附加任何其他信息,因此没有理由为每个项目提供自己的 key (例如,如果每个项目需要存储信息的哈希值,则这将有所不同)。
- 您无需创建另一个 key 即可查明有多少食品与某个人 (
SCARD
) 相关联。 - 您拥有其他所有 set functions如果您需要操作或相互比较多个集合,则可以使用该方法。
- 如果您阅读 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/