关于 redis 的储存问题。

2018-04-08 16:42:55 +08:00
 mandy0119

有很大量用户信息,需要放进缓存中。

	方法 1:每个用户一个 key,单独存放。
	
	方法 2:所有用户存入一个 key,类型为 hash。使用时取出此 hash,再操作。

目前有点拿不准该用哪一种效率高一些,资源利用率高一些。

	讨论:数据量 N 大于何值时,方法效率最高。

	讨论:何种场景,使用方法 1/2 比较合适。

对 redis 理解不深,求大佬们解疑。

5958 次点击
所在节点    Redis
26 条回复
monsterxx03
2018-04-08 18:01:46 +08:00
从业务上看,用方法一.

hash 的确能减少内存使用, 但有些前提. 因为 size 小于阈值的 hash 内部会用 ziplist 实现,如果 value 是 int,还会用特殊算法进行压缩,极端情况下内存占用可以减少到 1/10, 相关配置: hash-max-ziplist-entries, hash-max-ziplist-value


https://redis.io/topics/memory-optimization
banksiae
2018-04-08 18:07:23 +08:00
方法 1, 但是 key 的规则要定义清除,以免滥用
单 key 值过大的话,如果要导入到 codis 集群,会遇到大小限制问题
WinMain
2018-04-08 18:41:19 +08:00
还有折中的方法,对用户 id 取模后作为 key 来分桶,哈哈,个人之见,没试过。
生产线上用的还是一个用户 id 一个 key,因为即使是有几十个亿的用户量,也不是把所有 id 的相关信息放入 redis,要不然就失去了作为缓存这个出发点了,每天最多也就是亿级的活跃用户,这个对于 redis 集群来说,都是小 ks。
MeteorCat
2018-04-08 19:06:18 +08:00
看存储之后是否要频繁更新,我们游戏架构是 MYSQL 存储基本充值数额等外部信息,NoSQL 做游戏库,人物角色信息用 Hash 表保存便于读写和单独取出;但是如果仅仅做缓存,根据 key 找到用户信息不做大修改,我感觉直接 key-value 就行了
wplct
2018-04-08 21:25:44 +08:00
方法 1.未来可以直接上集群。
qi1070445109
2018-04-09 01:40:51 +08:00
请教一下,如果用来做布隆过滤器呢?大家怎么选择? 目前是方法二。

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

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

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

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

© 2021 V2EX