Redis内存满了怎么办?✨缓存淘汰策略And动态内存设定带你解决!!!
😉毛遂自荐
毛遂自荐,给大家推荐一下自己的专栏😁,欢迎小伙伴们收藏关注😊
🔥一张图带你了解Redis有哪些缓存淘汰策略!!!
✨前提概要
众所周知,Redis是基于内存的数据库,数据都在内存中,配合上其高效的数据结构、多路IO机制、单线程等等,使得Redis的性能非常高,单个实例的 QPS 能够达到 10W 左右。
但是,内存也是有限的,不可能让你无限制的进行数据的存放
所以,当Redis内存空间满了之后,如果在进行写请求就会报错,当然读请求还是正常执行!
那么,Redis内存满了之后的解决办法,下面一一都给大家进行讲解!!!😁
🔥通过命令动态修改内存大小
//设置Redis最大占用内存大小为100M
127.0.0.1:6379> config set maxmemory 100mb
//获取设置的Redis能使用的最大内存大小
127.0.0.1:6379> config get maxmemory
如果不设置最大内存大小或者设置最大内存大小为0,在64位操作系统下不限制内存大小,在32位操作系统下最多使用3GB内存
🔥Redis过期删除策略
常用的过期数据的删除策略就两个(重要!自己造缓存轮子的时候需要格外考虑的东西):
惰性删除 :只会在取出key的时候才对数据进行过期检查。这样对CPU最友好,但是可能会造成太多过期 key 没有被删除。 定期删除 :指的是 Redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。
定期删除对内存更加友好,惰性删除对CPU更加友好。两者各有千秋,
所以Redis 采用的是 定期删除+惰性删除的混合模式 。
但是,仅仅通过给 key 设置过期时间还是有问题的。因为还是可能存在定期删除和惰性删除漏掉了很多过期 key 的情况。这样就导致大量过期 key 堆积在内存里,然后就OOM了。
解决方法: Redis 内存淘汰机制。
🔥Redis缓存淘汰策略
-
noeviction: 添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,就返回error,然后啥也不干
-
allkeys-lru: 添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,就会扫描所有的key,淘汰一些最近未使用的key
-
allkeys-lfu: 添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,就会扫描所有的key,淘汰一些最近最少使用的key
-
allkeys-random :添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,就会扫描所有的key,随机淘汰一些key
-
volatile-lru: 添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,扫描那些设置了过期时间的key,淘汰一些最近未使用的key
-
volatile-random: 添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,扫描那些设置了过期时间的key,随机淘汰一些key
-
volatile-lfu: 添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,就会淘汰一些设置了 过期时间的,并且最近最少使用的key
-
volatile-ttl: 添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,扫描那些设置里过了时间的key,淘汰一些即将过期的key
❤最后
创作不易,如果这篇博文对各位有帮助,希望各位小伙伴可以==一键三连哦!==,感谢支持,我们下次再见~~~
转载自:https://juejin.cn/post/6997614654985863182