(1) redis-cli
127.0.0.1:6379> info memory
(2) redis-cli info memory
内存碎片率=Redis向操作系统申请的内存 / Redis中的数据占用的内存
mem_fragmentation_ratio = used_memory_rss / used_memory
mem_fragmentation_ratio:内存碎片率。
redis-cli info memory |grep ratio
config set activedefrag yes #自动碎片清理
memory purge #手动碎片清理
redis实例的内存使用率超过可用最大内存,操作系统将开始进行内存与swap空间交换。
避免内存交换发生的方法:
内存清理策略,保证合理分配redis有限的内存资源。
当内存使用达到设置的最大阈值时,需选择一种key的回收策略,默认情况下回收策略是禁止删除(noenviction)。配置文件中修改 maxmemory-policy 属性值:
im /etc/redis/6379.conf
---598行----
maxmemory-policy noenviction #修改max-memory-policy属性值
##回收策略有以下几种:##
●volatile-lru
#使用LRU算法从已设置过期时间的数据集合中淘汰数据
(移除最近最少使用的key,针对设置了TTL的key)
●volatile-ttl
#从已设置过期时间的数据集合中挑选即将过期的数据淘汰
(移除最近过期的key)
●volatile-random
#从已设置过期时间的数据集合中随机挑选数据淘汰
(在设置了TTL的key里随机移除)
●allkeys-lru
#使用LRU算法 从所有数据集合中淘汰数据
(移除最少使用的key,针对所有的key)
●allkeys-random
#从数据集合中任意选择数据淘汰(随机移除key)
●noenviction
#禁止淘汰数据(不删除直到写满时报错)
2.1设置Redis客户端连接的超时时间
vim /etc/redis/6379.conf
-----114行------
114 timeout 0
#单位为秒(s),取值范围为0~100000。默认值为0,表示无限制,即Redis不会主动断开连接,即使这个客户端已经空闲了很长时间。
#例如可设置为600,则客户端空闲10分钟后,Redis会主动断开连接。
#注意:在实际运行中,为了提高性能,Redis不一定会精确地按照timeout的值规定的时间来断开符合条件的空闲连接,例如设置timeout为10s,但空闲连接可能在12s后,服务器中新增很多连接时才会被断开。
2.2 设置redis自动碎片清理
config set activedefrag yes #自动碎片清理
memory purge #手动碎片清理
2.3设置redis最大内存阈值
内存阈值如果不设置,则没有限制,直到把服务器的内存干满、之后会使用交换分区。
设置内存阈值后,不会使用swap交换分区。且如果设置了key回收策略,当内存使用达到设置的最大阈值时,系统会进行key回收。
vim /etc/redis/6379.conf
-----567行------
567 # maxmemory
568 maxmemory 1gb #例如设置最大内存阈值为1gb
定义:缓存雪崩是指大量的应用请求无法在 Redis 缓存中进行处理,紧接着,应用将大量请求发送到数据库层,导致数据库层的压力激增。
一个简单的雪崩过程:
Redis 集群产生了大面积故障;
缓存失败,此时仍有大量请求去访问 Redis 缓存服务器;
在大量 Redis 请求失败后,这些请求将会去访问数据库;
由于应用的设计依赖于数据库和 Redis 服务,很快就会造成服务器集群的雪崩,最终导致整个系统的瘫痪。
产生的原因:
1)缓存中有大量数据同时过期,导致大量请求无法得到处理。
2)Redis 缓存实例发生故障宕机了
解决方案:
【事前】高可用缓存