Redis6.X服务端config和key淘汰算法

目录

一、Redis6的key过期时间删除策略你知道多少

二、内存不足时-Redis的Key内存淘汰策略你知道多少 

三、 Redis6.x服务端配置config命令介绍

一、Redis6的key过期时间删除策略你知道多少

先看看下面三个问题:

问题一、redis的key配置了过期时间,这个是怎么被删除的?
问题二、redis数据明明过期了,怎么还占用着内存?
问题三、Redis 就只能用 10G,你要是往里面写了 20G 的数据,会发生什么?淘汰哪些数据
看完下面内容,这三道题就都有答案了~

redis key过期策略:定期删除+惰性删除

定期删除:

隔一段时间,就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除,
定期删除可能会导致很多过期 key 到了时间并没有被删除掉,那咋整呢,所以就还有惰性删除
注意:

定期删除的扫描并不是遍历所有的键值对,这样的话比较费时而且太消耗系统资源。Redis服务器采用的是随机抽取的形式,每次从过期字典中,取出20个键进行过期监测,过期字典中存储的是所有设置了过期时间的键值对。如果这批随机监查的数据中有25%比例过期,那么会再抽取20个随机键值进行检测和删除,并且会循环这个流程,直到抽取的这批数据中过期键键值小于25%,此次检测才算完成。

惰性删除 :

概念:当一些客户端尝试访问它时,key会被发现并主动的过期

放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键.这种的优点是不会浪费系统资源。缺点是删除过期键不及时,造成了一定的空间浪费。

Redis服务器实际使用的是惰性删除和定期删除两种策略:通过配合使用这两种删除策略,服务器可以很好地在合理使用CPU时间和避免浪费内存空间之间取得平衡。

再看看这两个问题:

如果定期删除漏掉了很多过期 key,然后你也没及时去查,也就没走惰性删除,此时会怎么样?
如果大量过期 key 堆积在内存里,导致 redis 内存块耗尽了,就需要走内存淘汰机制
 

二、内存不足时-Redis的Key内存淘汰策略你知道多少
 

        redis在占用的内存超过指定的maxmemory之后,通过maxmemory_policy确定redis是否释放内存以及如何释放内存提供多种策略

具体策略如下:

volatile-lru(least recently used)

最近最少使用算法,从设置了过期时间的键中选择空转时间最长的键值对清除掉;
volatile-lfu(least frequently used)(Redis4.0版本中才有)

最近最不经常使用算法,从设置了过期时间的键中选择某段时间之内使用频次最小的键值对清除掉;
volatile-ttl

从设置了过期时间的键中选择过期时间最早的键值对清除 (删除即将过期的)
volatile-random

从设置了过期时间的键中,随机选择键进行清除;
allkeys-lru

最近最少使用算法,从所有的键中选择空转时间最长的键值对清除;
allkeys-lfu(Redis4.0版本中才有)

最近最不经常使用算法,从所有的键中选择某段时间之内使用频次最少的键值对清除;
allkeys-random

所有的键中,随机选择键进行删除;
noeviction(默认)

不做任何的清理工作,在redis的内存超过限制之后,所有的写入操作都会返回错误;但是读操作都能正常的进行;

从以上内存淘汰策略中可以看出,allkeys-xxx表示从所有的键值中淘汰数据,而volatile-xxx表示从设置了过期键值中淘汰数据。

 这个内存淘汰策略我们可以通过配置项来修改,打开redis.conf对应的配置项是'maxmemory-policy noeviction'只需要把它修改成我们需要设置的类型即可。 需要注意的是,如果修改redis.conf的方式,当设置完成之后需要重启Redis服务器材能生效。

还有一种简单的修改内存淘汰策略方式,我们可以使用命令行工具输入来修改。

config配置的时候 下划线_的key需要用中横线-
127.0.0.1:6379> config set maxmemory_policy volatile-lru
(error) ERR Unsupported CONFIG parameter: maxmemory_policy

127.0.0.1:6379> config set maxmemory-policy volatile-lru
OK

这种修改的好处是执行成功后就会生效,无需重启Redis服务器,但是它的坏处是不能持久化内存淘汰策略,每次重启Redis服务器之后设置的内存淘汰策略就会丢失 

三、 Redis6.x服务端配置config命令介绍

config命令介绍(都有默认值)
    可以动态地调整 Redis 服务器的配置(configuration)而无须重启
    config get xxx、config set xxx

   常用配置:

daemonize  #后端运行
bind #ip绑定
timeout  #客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接

databases #设置数据库的个数,可以使用 SELECT 命令来切换数据库。默认使用的数据库是 0
save  #设置 Redis 进行rdb持久化数据库镜像的频率。
rdbcompression #在进行镜像备份时,是否进行压缩

slaveof #设置该数据库为其他数据库的从数据库
masterauth  #当主数据库连接需要密码验证时,在这里配置

maxclients  #限制同时连接的客户数量,当连接数超过这个值时,redis 将不再接收其他连接请求,返回error

maxmemory  #设置 redis 能够使用的最大内存

 备注:
    防止所用内存超过服务器物理内存, maxmemory限制的是Redis实际使用的内存量, 也就是used_memory统计项对应的内存
    由于内存碎片率的存在, 实际消耗的内存可能会比maxmemory设置的更大, 实际使用时要小心这部分内存溢出
    默认无限使用服务器内存, 为防止极端情况下导致系统内存耗尽, 建议所有的Redis进程都要配置maxmemory
    在64bit系统下,maxmemory设置为0表示不限制Redis内存使用,在32bit系统下,maxmemory不能超过3GB

注意:
    redis在占用的内存超过指定的maxmemory之后,通过maxmemory_policy确定redis是否释放内存以及如何释放内存 
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值