redis 中如何对 hash 中的某一个 key 设置过期时间
问题参考
How to “EXPIRE” the “HSET” child key in redis?
需求:希望对 hash 中 那些超过一个月的 key 设置过期
问题2: 在Stack Overflow的其中一个回答中提到:
{hash_top_key}child_key_1 -> some_value
{hash_top_key}child_key_2 -> some_value
...
{hash_top_key}child_key_n -> some_value
We are using the {} notation on purpose. This allows all those keys to fall in the same hash slot. You can read more about it here: https://redis.io/topics/clust...
“This allows all those keys to fall in the same hash slot.” 这句话怎么理解?
按照我的理解,如果假设 Redis 集群中存在 3 台机器, 16383 个哈希槽分到 3 个机器上,对于 {hash_top_key}child_key_1
、{hash_top_key}child_key_2
、{hash_top_key}child_key_n
分别计算这个 key 对应的 slot,计算的方式是slot=crc16(key)&16363
,为什么说每一个 key 会落在相同的 hash slot 上?
补充问题内容:
关于 hash 、set等集合数据结构设置 内部元素过期的讨论 有一个 issues
Possibility of Hash/Set/List fields expiration #242
其中有一个回答:
Hi, this will not be implemented by original design:
No nested types in keys.
No complex features in single fields of aggregate data types.
The reasoning is much more complex and is a lot biased by personal feelings, preference and sensibility so there is no objective way I can show you this is better ;)
他说的意思不是很理解
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是对
{hash_top_key}
做插槽计算the gist is that if there is a substring between
{}
brackets in a key, only what is inside the string is hashed.翻译过来就是:如果 key 里有
{子串}
,只对{}
里的内容(子串)做 hash。使用 Redisson 客户端的话,可以 用 RMapCache 这个数据结构