参考资料
redis适合怎么用
-
排行榜
排行榜一直是一个很麻烦的问题,我之前一直想做一个东西可以比较好的实现排行榜托管。排行榜主要的难的是:
- 需要排行榜的size
- 实时调整积分
所以排行榜对数据结构的要求很高。以前我都是忽略其中一个问题去实现排行榜。现在出现了需要做实时排行榜的需求的时候,我第一时间想到的还是跳表,所以也测试一下redis的跳表效率,在1,000,000的数据量上大致插入100,000次6秒,更新100,000次10秒。而且很平稳O,(logN)的复杂度就是好啊。
-
一对多数据
游戏很多麻烦的一对多数据,但是关系其实很简单。我现在项目的就遇到玩家物品比平均1:500的情况,这种情况下memcached很难满足这样的需求,如果全部存在一起的话,序列化的压力大,如果分开存,维护一个数组的话,memcached的key数量和访问次数都会增加。别小看memcached的key的数量,其实是会影响memcached的get的效率的。而redis就可以很轻松的用一个hashmap存起来。
-
消息队列
redis的list是链表的实现,而且还有pubsub的功能,十分适合用来充当一个轻量级消息队列。
redis使用需要注意的地方
这里不完全是我遇到过的情况,有些是群(46859267)里面的朋友遇到的:
- 主从redis必须同样的版本
-
小心选择redis的持久化方案以及超出内存后的处理方案
- rdb会大量消耗磁盘io,特别是1秒写入的次数大于你设定的1秒内写操作次数后进行bgsave以后
- aof的文件会增长很快,必须定期rewrite,文件达到硬盘大小的时候会各种杯具
- 时刻注意redis的持久化是非常不可靠的,请尽可能保证重要数据不仅仅存在于redis,除非你在数据量规划的时候能确保redis的数据小于可用内存。