redis使用过程中的几点经验教训


1、Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。

2、到底是否需要redis的持久化能力?
  redis持久化的是数据集的当前快照,于是当你用它来做存储,而不是缓存时,就会很纠结。
  当数据集很大的时候,比如64G内存,数据集30G,你愿意dump快照或者aof收缩吗?如果这样做,问题就来了,redis的dump是fork一个进程,利用操作系统内存管理的copy-on-write来得到当前内存快照,但如果数据的更新比较频繁,30G内存dump到磁盘的速度又不快,就会导致在dump的时候需要大量的内存来做写时copy,需要的新内存加上原有的30G内存,可能导致操作系统swap,同时因为copy-on-write,主线程在处理请求时也会变慢,redis的整体性能急速下降。
  所以大数据集把redis当做cache,只有当数据集很小的时候,才用它来做持久存储。

3、因为redis的malloc方式,导致一个潜在问题,就是当有很多small object放进去,又被频繁的free后,导致了大量的内存碎片,到一定临界点后,你会发现插入新数据的时候redis的性能急剧下降,原因在malloc函数上要花很长时间。

4、Redis的数据全部放在内存带来了高速的性能,但是也带来一些不合理之处。比如一个网站有1亿注册用户,如果这些资料要用Redis来存储,内存的容量必须能够容纳这1亿用户。但是业务实际情况是1亿用户只有1000万活跃用户,1周来访问过1次的也只有1500万用户,因此全部1亿用户的数据都放在内存有不合理之处,RAM需要为冷数据买单。


Redis最首要的实用场景:少量数据存储,高速读写需求。此类应用过程数据全部in-momery 的格式来提供高速读写,同时提供数据持久化的功能。


在应用Redis时的经验教训,主要有这么几个:
1. 使用 Redis 之前,做好容量规划,对数据的使用方式做好规划;
2. 使用 Redis 的过程中,经常关注内存使用,做好监控报警;
3. 谨慎选择持久化方案,对可能造成的高延迟要有心理准备;
4. 小心Redis的内存碎片。
 
 
标签: Redis
评论: 0 | 引用: 0 | 阅读: 9116