假设有一个图片被访问到,要求用户 3 天内都不能再访问
我在 redis 设计如下,设计为 string:
key 为
pic_access:user_id:1000:pic_id:3d4fa211
value 为空字符串 ""
然后设置这个 key 的生命周期为 3 天
然后只要检查 key 是否存在即可判定
这种方式的话,我觉得 key 格式好像不太好?冒号太多了。。。
然后 redis 里会有很多 key
另一种则是设计为 hash
key 为 pic_access:user_id:1000
value 则为 {pic_id:3d4fa211, 2017-7-26 15:32:12}
这种方式 key 的数目少不少
但是时间判定稍微都一点点麻烦
哪种更好?
1
lianxiaoyi 2017-07-26 18:00:09 +08:00 1
我个人会选第一种,简单粗暴,不怕 key 多。。因为我有集群将 key 打散到很多 redis 服务中......
当你用 hash 结构之后,你一个 key 的 value 值多了之后,怎么做过期处理你得考虑好。。。要做过期用户来访问这个 value 还好,可以做时间判断,但用户如果不再访问这个 value,那你只能自己写扫描,不觉得很累么???? |
2
guyeuro OP @lianxiaoyi 哎,就你一个回复
|
3
jadecoder 2017-07-26 23:51:54 +08:00
Redis 的 key 不怕多,也不怕长
|
4
bazingaterry 2017-07-27 01:57:18 +08:00 via iPhone
我也选第一个,比较简单。
粗略看过「 Redis 设计与实现」,哈希表作为很常用的一个数据结构,Redis 的设计也是挺高效,不用怕 key 太多,它会自己扩容然后 rehash。 |
5
lianxiaoyi 2017-07-27 09:15:44 +08:00
@guyeuro 那赶紧感谢我啊 。。。。啊哈哈
|