一个 redis 设计问题

2017-07-26 17:48:59 +08:00
 guyeuro

假设有一个图片被访问到,要求用户 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 的数目少不少

但是时间判定稍微都一点点麻烦

哪种更好?

1464 次点击
所在节点    问与答
5 条回复
lianxiaoyi
2017-07-26 18:00:09 +08:00
我个人会选第一种,简单粗暴,不怕 key 多。。因为我有集群将 key 打散到很多 redis 服务中......
当你用 hash 结构之后,你一个 key 的 value 值多了之后,怎么做过期处理你得考虑好。。。要做过期用户来访问这个 value 还好,可以做时间判断,但用户如果不再访问这个 value,那你只能自己写扫描,不觉得很累么????
guyeuro
2017-07-26 23:15:38 +08:00
@lianxiaoyi 哎,就你一个回复
jadecoder
2017-07-26 23:51:54 +08:00
Redis 的 key 不怕多,也不怕长
bazingaterry
2017-07-27 01:57:18 +08:00
我也选第一个,比较简单。

粗略看过「 Redis 设计与实现」,哈希表作为很常用的一个数据结构,Redis 的设计也是挺高效,不用怕 key 太多,它会自己扩容然后 rehash。
lianxiaoyi
2017-07-27 09:15:44 +08:00
@guyeuro 那赶紧感谢我啊 。。。。啊哈哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/378156

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX