有一个这样场景:
每个用户需要统计一些数据,由于这些数据会经常变更,有些用户每天都在变化,而且每个数据如果直接用sql语句统计,会非常消耗时间,所以想把这些数据存入redis里面,请问各位:
这些数据是每个数据对应该一个key好一些还是统一用一个key存入hash中,
用户数有几百万条记录。
你这个。。数据经常变动用redis也快不了多少吧,修改了还得更新缓存。。
a:b方式做key分层考虑过么?按你业务逻辑可以划分不同区域
还有方式是后台服务做统计分析,然后输出内容到某个表或者其他地方,每次获取直接从单表获取,这种方式实时性会差一些
主要是用户数太多了,可能上达一千万用户,如果用后台服务器统计太费时间,这个我们是想先实时存入单独的表,再读入缓存,就是看存入缓存的方式是如何的
@V青山绿水: 可以考虑插入的时候分库分表,冗余插入,根据业务统计需要插入,然后单表统计呢
用户表的数据那么大对于单表怎么操作都是很费劲的,建议分库分表实现,缓存不太现实,用缓存的话有可能造成其他的内存问题
放一片内存直接搞定,几百万光存这个数据量比较小
设id 4Byte,每个统计假设4Byte * 4;
20Byte*10000000/1024/1024=190MB
几百万的数据用redis存储问题不大,主要还是分析用户的数据结构及统计的维度,然后根据你的业务选择合适的redis数据结构就行存储,比如用户的基本信息(姓名,手机号等等)可采用hash存储,其他的数据可用list或者sorted sets 进行存储,sorted sets 里面的score是比较适合做统计的。