美文网首页
Redis引入

Redis引入

作者: kyo1992 | 来源:发表于2020-09-22 21:12 被阅读0次

背景

目前项目对用户数据持久化只用mysql, 每个功能对应一张表, 当功能多达上百个时, 登录过程需要调用100条sql语句从mysql直接加载数据, 目前服务器5分钟定时存储, 以表为单位将有修改的数据更新数据库, 那么对于新用户, 5分钟后就会执行100条insert语句, 对于老用户, 则会将0 ~ 100条不等的数据(视乎涉及有数据修改功能而定), 无疑这会对mysql产生较大压力, 所以尝试引入业内较为推荐的redis作为缓存.

引入目的

缓存活跃用户功能数据,加速上线过程数据加载速度,减轻mysql访问压力, 尤其针对短时间内频繁上线的用户,
而要求强一致性的数据,例如用户基础表则依然保持直接用mysql做持久化.

策略

读请求:功能数据先从redis尝试读取,如果不存在, 则再从mysql读取,
而要求强一致性的数据直接从mysql读取.

写请求:采取保守的做法, 数据首先更新到数据库, 确认成功后, 再更新redis(数据存活时间可以设置为6~12小时), 更新顺序不能交换, 因为如果先写redis再写mysql,写入mysql失败事务回滚会造成redis中存在脏数据.

redis数据持久化策略

因为目前仅把redis当做一个以读请求为主的缓存用, 即使服务器运行过程中把redis数据都清空也不影响正常使用, 所以无须采用持久化策略(rdb or aof).

缓存置换策略

redis.conf
maxmemory 1000mb
maxmemory-policy allkeys-lru

想法是: 假如每个用户数据量为1m, 只保留1000个活跃玩家数据(视乎dau而定), 那么将一个redis分片的最大内存使用量设置为1G, 当内存用完时,采用lru优先删除掉最近最不经常使用的key,用以保存新数据.

相关文章

网友评论

      本文标题:Redis引入

      本文链接:https://www.haomeiwen.com/subject/bsdgyktx.html