Redis的性能管理

一、Redis性能管理

1.1 查看redis的内存使用情况 

redis-cli info memory
或
redis-cli
127.0.0.1:6379> info memory

used_memory:redis中的数据占用的内存。
used_memory_rss:是redis向操作系统申请的内存。
used_memory_peak:redis内存使用的峰值。

1.2 内存碎片 

内存碎片率=Redis向操作系统申请的内存 / Redis中的数据占用的内存
mem_fragmentation_ratio = used_memory_rss / used_memory

redis-cli info memory | grep ratio

allocator_frag_ratio:1.25
#表示分配器碎片的比例。比例越低越好,值越高,说明分配器碎片较多,可能导致内存浪费。

allocator_rss_ratio:4.48
#表示分配器占用物理内存的比例,告诉你主进程调度执行时占用了多少物理内存。

rss_overhead_ratio:2.56
#表示redis占用物理内存额外的开销比例,比例越低越好,表示redis实际使用的物理内存和向系统申请的内存越接近,额外的开销越低。

mem_fragmentation_ratio:20.62
#表示内存碎片的比例。内存碎片是指已经分配但不能被有效利用的内存。这个比例越低,表示内存利用率更高。

内存碎片产生的原因

Redis内部有自已的内存管理器,为了提高内存使用的效率,来对内存的申请和释放进行管理。
Redis中的值删除的时候,并没有把内存直接释放、交还给操作系统,而是交给了Redis内部有内存管理器。
Redis中申请内存的时候,也是先看自己的内存管理器中是否有足够的内存可用。
Redis的这种机制,提高了内存的使用率,但是会使Redis中有部分自己没在用,却不释放的内存,导致了内存碎片的发生。


如何清理碎片

手动清理碎片:

redis-cli memory purge

自动清理碎片:

vim /etc/redis/6379.conf
--添加--
activedefrag yes
--

二、Redis优化策略

2.1 设置redis最大内存阈值

内存阈值如果不设置,则没有限制,直到把服务器的内存干满、之后会使用交换分区。

设置内存阈值后,不会使用swap交换分区。且如果设置了key回收策略,当内存使用达到设置的最大阈值时,系统会进行key回收。

vim /etc/redis/6379.conf
--567--
567 # maxmemory <bytes>
568 maxmemory 1gb       
#例如设置最大内存阈值为1gb,一旦到达阈值,自动清理碎片,开启key的回收机制

2.2 设置key回收策略

vim /etc/redis/6379.conf
--598--
# maxmemory-policy noenviction   
#需要修改maxmemory-policy属性值

--回收策略有以下几种:--
 ●volatile-lru
 #使用LRU算法从已设置过期时间的数据集合中淘汰数据(移除最近最少使用的key,针对设置了TTL的key)
 ​
 ●volatile-ttl
 #从已设置过期时间的数据集合中挑选即将过期的数据淘汰(移除最近过期的key)
 ​
 ●volatile-random
 #从已设置过期时间的数据集合中随机挑选数据淘汰(在设置了TTL的key里随机移除)
 ​
 ●allkeys-lru
 #使用LRU算法 从所有数据集合中淘汰数据(移除最少使用的key,针对所有的key)
 ​
 ●allkeys-random
 #从数据集合中任意选择数据淘汰(随机移除key)
 ​
 ●noenviction
 #禁止淘汰数据(不删除直到写满时报错)

2.3 总结解决Redis占用内存效率问题

  1. 监控和调优:持续监控Redis的内存占用情况,及时发现并解决内存问题。

  2. 设置内存阈值:为Redis设置内存占用的最大阈值,避免占用系统全部内存。可以通过修改 Redis 的配置文件中的maxmemory参数,限制Redis使用的内存大小。

  3. 内存碎片清理:定期进行内存碎片清理操作,有效利用内存空间。

  4. 配置合适的键回收机制:通过配置适当的键回收机制,及时清理过期、不常用或不重要的键,释放内存。可以使用Redis的过期键自动删除机制、设置合理的过期时间、限制每个键的内存占用等方式来控制键的回收。

三、Redis的雪崩、击穿、缓存穿透

3.1 redis雪崩

缓存雪崩是指大量的应用请求无法在 Redis 缓存中进行处理,紧接着,应用将大量请求发送到数据库层,导致数据库层的压力激增。 

一个简单的雪崩过程示例:

Redis 集群产生了大面积故障;
缓存失败,此时仍有大量请求去访问 Redis 缓存服务器;
在大量 Redis 请求失败后,这些请求将会去访问数据库;
由于应用的设计依赖于数据库和 Redis 服务,很快就会造成服务器集群的雪崩,最终导致整个系统的瘫痪。

雪崩产生原因:

1).缓存中有大量数据同时过期,导致大量请求无法得到处理。
2).Redis 缓存实例发生故障宕机了。

解决方案: 

【事前】高可用缓存:高可用缓存是防止出现整个缓存故障。即使个别节点,机器甚至机房都关闭,系统仍然可以提供服务,Redis 哨兵(Sentinel) 和 Redis 集群(Cluster) 都可以做到高可用;

【事中】缓存降级(临时支持):当访问次数急剧增加导致服务出现问题时,我们如何确保服务仍然可用。在国内使用比较多的是 Hystrix,它通过熔断、降级、限流三个手段来降低雪崩发生后的损失。只要确保数据库不死,系统总可以响应请求,每年的春节 12306 我们不都是这么过来的吗?只要还可以响应起码还有抢到票的机会;

【事后】Redis备份和快速预热:Redis数据备份和恢复、快速缓存预热。

3.2 redis击穿

缓存击穿是指当前热点数据存储到期时,多个线程同时并发访问热点数据。因为缓存刚过期,所有并发请求都会到数据库中查询数据。

解决方法:

将热点数据设置为永不过期;
加互斥锁:互斥锁可以控制查询数据库的线程访问,但这种方案会导致系统的吞吐量下降,需要根据实际情况使用。

3.3 缓存穿透

缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起id为-1的数据或者特别大的不存在的数据。有可能是黑客利用漏洞攻击从而去压垮应用的数据库。 

解决方法:

验证拦截:接口层进行校验,如鉴定用户权限,对ID之类的字段做基础的校验,如id<=0的字段直接拦截;
缓存空数据:当数据库查询到的数据为空时,也将这条数据进行缓存,但缓存的有效性设置得要较短,以免影响正常数据的缓存;
使用布隆过滤器:布隆过滤器是一种比较独特数据结构,有一定的误差。当它指定一个数据存在时,它不一定存在,但是当它指定一个数据不存在时,那么它一定是不存在的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装和管理Redis可以按照以下详细步骤进行操作: 1. 下载Redis安装包:你可以从Redis官方网站(https://redis.io)或者GitHub上获取最新的Redis安装包。 2. 解压安装包:使用命令`tar -zxvf redis-x.x.x.tar.gz`(x.x.x代表版本号)解压Redis安装包。 3. 进入解压后的目录:使用`cd redis-x.x.x`进入解压后的Redis目录。 4. 编译和安装:执行以下命令进行编译和安装Redis。 - 执行`make`命令编译Redis。 - 执行`make test`命令运行Redis的测试套件(可选)。 - 执行`sudo make install`命令安装Redis到系统。 5. 配置Redis:在Redis安装目录下,复制`redis.conf`文件为新的配置文件,如`redis-6379.conf`,然后编辑该配置文件以满足你的需求。你可以修改监听端口、绑定IP、密码等选项。 6. 启动Redis:执行以下命令启动Redis服务。 - 如果使用默认配置文件名(redis.conf),执行`redis-server`命令启动Redis服务。 - 如果使用自定义配置文件名(如redis-6379.conf),执行`redis-server /path/to/redis-6379.conf`命令启动Redis服务。 7. 使用Redis客户端:打开一个新终端窗口,执行以下命令连接到Redis服务,并进行相关操作。 - 执行`redis-cli`命令连接到默认Redis服务(默认端口为6379)。 - 执行`redis-cli -h <host> -p <port>`命令连接到指定主机和端口的Redis服务。 8. 管理Redis:使用Redis命令行客户端可以执行各种操作,如设置键值对、执行命令、查看信息等。你可以参考Redis官方文档(https://redis.io/documentation)了解更多命令和用法。 以上是Redis的安装和管理的详细步骤。根据你的需求和环境,可能会有一些特定的配置和操作。请确保在安装和配置过程中遵循最佳实践,并保证Redis的安全性和性能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值