如果redis没有设置expire,他是否默认永不过期?

https://blog.csdn.net/soulmate_p/article/details/81136054

                    版权声明:本文为博主原创文章,未经博主允许不得转载。                        https://blog.csdn.net/soulmate_P/article/details/81136054                    </div>
                                                <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-cd6c485e8b.css">
                                    <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-cd6c485e8b.css">
            <div class="htmledit_views" id="content_views">
                                        <p>如果没有设置有效期,即使内存用完,redis 自动回收机制也是看设置了有效期的,不会动没有设定有效期的,如果清理后内存还是满的,就不再接受写操作。</p>

 
 
  1. Redis无论有没有设置expire,他都会遵循redis的配置好的删除机制,在配置文件里设置:
  2. redis最大内存不足 "时,数据清除策略,默认为" volatile-lru "。
  3. volatile-lru  ->对"过期集合 "中的数据采取LRU(近期最少使用)算法.如果对key使用"expire "指令指定了过期时间,那么此key将会被添加到"过期集合 "中。将已经过期/LRU的数据优先移除.如果"过期集合 "中全部移除仍不能满足内存需求,将OOM.
  4. allkeys-lru ->对所有的数据,采用LRU算法
  5. volatile-random ->对"过期集合 "中的数据采取"随即选取 "算法,并移除选中的K-V,直到"内存足够 "为止. 如果如果"过期集合 "中全部移除全部移除仍不能满足,将OOM
  6. allkeys-random ->对所有的数据,采取"随机选取 "算法,并移除选中的K-V,直到"内存足够 "为止
  7. volatile-ttl ->对"过期集合 "中的数据采取TTL算法(最小存活时间),移除即将过期的数据.
  8. noeviction ->不做任何干扰操作,直接返回OOM异常

另外,如果数据的过期不会对"应用系统"带来异常,且系统中write操作比较密集,建议采取"allkeys-lru"。

由以上可以看出,对没设置expire的数据,产生影响的是allkeys-lru机制,allkeys-random。

所以redis没设置expire的数据是否会删除,是由你自己选择的删除机制决定的。

在Redis服务器占用内存达到maxmemory最大的情况下,当再想增加内存占用时,会按maxmemory-policy删除机制将老的数据删除。这里简单说一下volatile-lru,Redis会按LRU算法删除设置了过期时间但还没有过期的key,而对于没有设置过期时间的key,Redis是永远保留的。当然,如果你不想删除没有过期的key,那可以使用noeviction机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hello_world!

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值