redis默认为空,永不落地。 mysql存储数据。
读取数据时,先从redis里查找,如果没有,则从mysql中查找,查找成功后,起协程将该数据加载到 redis中,并且在redis中为该数据的key设置过期时间。
如果读取数据从redis中找到数据且修改了该数据,则重置该key的过期时间,并将该key记录到一个地方(或使用redis的key监控事件,这样外部修改redis数据时,也可以同步到DB),然后使用异步线程将该数据落地到mysql.
这样一来,后台统计类操作,可以直接操作MYSQL,数据是最新的。修改类操作,使用接口操作REDIS,也可以操作DB后删除REDIS中相应key(这种方法可以少写些接口)
这样redis就是当成内存数据库使用,且实现了冷热数据的调度,然后兼顾后台人员统计的方便性。
游戏服务器需要封装数据操作接口:
取数据——从REDIS——从MYSQL——异步写回REDIS并设置过期时间
写数据——写REDIS并更新过期时间——键通知事件触发——写入MYSQL
日志类数据,直接异步写入MYSQL的日志库。
协议类数据,可以异步写入MYSQL或mongdb (可以直接写MYSQL,这样可以给后台需求,做出常用的统计查找功能)