参考资料

redis适合怎么用

  • 排行榜

    排行榜一直是一个很麻烦的问题,我之前一直想做一个东西可以比较好的实现排行榜托管。排行榜主要的难的是:

    1. 需要排行榜的size
    2. 实时调整积分

    所以排行榜对数据结构的要求很高。以前我都是忽略其中一个问题去实现排行榜。现在出现了需要做实时排行榜的需求的时候,我第一时间想到的还是跳表,所以也测试一下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的数据小于可用内存。