一、redis缓存介绍
redis虽然是内存数据库,但它的数据依然保存在物理内存中,redis会更具持久化配置每隔一段时间就会往磁盘写入数据,在写入数据时会覆盖磁盘中相同的key。redis当前的缓存数据是保存在cached里面的,通过free -mh查看【-/+ buffers/cache: 16G 46G】,16G里面保存的就是redis的当前缓存数据。
举例:
这是一台redis服务器,可以看到物理内存的使用量已经达到57G,但是redis的真正使用量其实最多只有16G
从这里【-/+ buffers/cache: 16G 46G】可以看到redis当前最多使用了16G,当前内存可用空间还有46G(前提是这台服务器只运行了redis服务)
- [root@jxq-c2-16-3 ~]# /alidata/redis/bin/redis-cli
- 127.0.0.1:6379> info
- # Memory
- used_memory:15128469488 #redis数据占用了多少内存(字节显示)
- used_memory_human:14.09G #redis数据占用了多少内存(G显示,便于可读性)
- used_memory_rss:15497564160 #redis进程占用了多少内存(字节)
- used_memory_peak:15164396944 #redis的峰值,最高运行到多大内存(字节)
- used_memory_peak_human:14.12G #redis的峰值,最高运行到多大内存(G显示,便于可读性)
- used_memory_lua:33792 #lua引擎所占用的内存大小(字节)
- mem_fragmentation_ratio:1.02 #内存碎片率
- mem_allocator:jemalloc-3.2.0 #redis内存分配器版本,在编译时指定的。有libc、jemalloc、tcmalloc这3种。
复制代码 二、redis内存释放
注意:不要使用#echo 3 > /proc/sys/vm/drop_caches 这条命令释放内存,可能会造成redis数据丢失
主要有以下几种方法:
修改redis.conf中的maxmemory-policy选项
- 加内存
- 缩短(或设置)数据过期时间,以释放内存
- redis集群
1、如果数据是不怕丢的缓存数据,那么可以在redis.conf里,配置如下两项,进行内存数据淘汰(需要重启redis):- #设置redis最大内存限制单位是字节1024B=1kb(这里我设置为64M):
- maxmemory 64000000 #这个值应该设置为物理内存的50%
- #超过内存限制后的处理策略(这里我使用的策略为从内存中迁出(其实就是删除)不常用的key):
- maxmemory-policy allkeys-lfu
- 淘汰策略有以下几种可选:
- LRU算法表示最近最少使用的,LFU算法表示最不常用的:
- #volatile-lru - >在设置了过期的key中,删除最近最少使用的key,直到空间足够为止
- #allkeys-lru - >从所有key里删除最近最少使用的key,不管有没设置过期,直到空间足够为止
- #volatile-lfu - >在设置了过期的key中,删除最少使用的key,直到空间足够为止
- #allkeys-lfu - >从所有key里删除最少使用的key,不管有没设置过期,直到空间足够为止
- #volatile-random - >删除一个过期集合中的随机key。
- #allkeys-random - >删除一个随机key,不管有没设置过期。
- #volatile-ttl - >删除即将过期的key(次TTL)
- #noviction - >不删除,拒绝写入,写入操作时返回错误。
复制代码 2、看看如何动态添加redis最大内存限制以及相关策略(无需重启redis):到此这篇关于防止redis内存溢出优化方法的文章就介绍到这了,更多相关防止redis内存溢出优化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
来源:https://www.jb51.net/database/337905ws7.htm
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |