redis的性能管理

redis的性能管理:

性能管理命令 info memory
used_memory:redis中数据占用的内存
used_memory_rss:redis向操作系统申请的内存
used_memory_peak :redis使用内存的峰值

内存碎片率:used_memory_rss/used_memory
系统分配已经给redis,但redis未能够有效利用内存

redis-cli info memory | grep ratio

redis的性能管理_第1张图片

1、allocator_frag_ratio:1.19
分配器碎片的比例,redis主进程调度时产生的内存,比例越小越好,值越高,内存的浪费越多

2、allocator_rss_ratio:7.15
分配器占用物理内存的比例,告诉你主进程调度执行时占用了多少物理内存

3、rss_overhead ratio:0.31
RSS是向系统申请的内存空间,redis占用物理空间额外的开销比例,这个比例越低越好,redis实际占用的物理内存和向系统申请的内存越接近,额外的开销越低

4、mem_fragmentation ratio:3.33
内存碎片的的比例,越低越好,表示内存的使用率越高。

自动清理碎片:

vim /etc/redis/6379.conf 在最后一行--------activedefrag yes 自动清理
redis-cli memory purge 手动清理

设置redis的最大占用内存阈值:

redis的性能管理_第2张图片

key回收的策略:

1、maxmemory-policy volatile-lru 使用redis内置的LRU算法,把已经设置了过期时间的键值对中淘汰数据,移除最近最少使用键值对(针对已经设置了过期时间的键值对)

2、maxmemory-policy volatile-ttl 已经设置了过期时间的键值对,从当中挑选即将过期的键值对。(有设置过期时间的键值对)

3、maxmemory-policy volatile-random 从已经设置了过期时间的键值对当中,挑选数据随机淘汰键值对(对设置了过期时间的键值对进行随机移除)

4、allkeys-lru:LRU算法当中,所有的键值对进行淘汰,移除最少的使用的键值对。(针对所有的键值对)

5、allkeys-random 从所有的键值对任意选择数据进行淘汰

6、maxmemory-policy noeviction:禁止键值对回收(不删除任何键值对,知道redis把内存塞满,写不了报错为止)

在工作中,一定要给redis占用空间内存设置阈值

redis占用内存的效率问题解决???

1、日常巡检中,对redis的占用情况左监控
2、设置redis占用系统内存的调值,避免占用系统全部内存
3、内存碎片清理,手动 自动
4、配置合适的key回收机制


redis雪崩(缓存雪崩)

现象:大量的redis请求,无法在缓存当中处理,请求会全部发送到后台数据库,数据库本身并发能力就很差,一旦高并发,数据会很快崩溃

原因:redis集群大面积故障
redis缓存中,大量的数据同时过期,大量的请求无法得到处理
redis宕机。

解决方案:
事前:高可用框架,防止整个缓存故障,主从复制和哨兵模式 redis集群
事中:在国内用比较多的方式,HySTRIX熔断,降级,限流三个手段来降低雪崩发生之后的损失。
数据库不死即可,可慢但是不能没有相应
事后:redis备份。快速缓存预热。

redis的缓存击穿

现象:缓存击穿主要是redis数据缓存过期,或删除,多个请求并发访问redis数据,请求也是转发到数据库了,导致数据库的性能快速下降。经常被请求的缓存数据,最好设置为永不过期
键值对还在,但值被替换,原有的请求找不到之后,同样也回去请求后台数据库,也是击穿的类型一种

redis的缓存穿透:

现象:缓存中没有数据,数据库也没有对应数据,但是有用户一直发起这个都没有的请求,而且请求的数据格式很大。黑客在利用漏洞攻击,压垮应用数据库。

你可能感兴趣的:(开发语言,nosql)