解决redis运行期间key值过期但是内存memory依然占用过高

要解决这个问题,首先要了解redis info信息中几个数据的意义:

used_memory:810575104 //数据占用了多少内存(字节)

used_memory_human:773.02M //数据占用了多少内存(带单位的,可读性好)

used_memory_rss:885465088  //redis占用了多少内存

used_memory_rss_human:844.45M //redis占用了多少内存(带单位的,可读性好)

used_memory_peak:2001274696 //占用内存的峰值(字节)

used_memory_peak_human:1.86G //占用内存的峰值(带单位的,可读性好)

mem_fragmentation_ratio:1.09   //内存碎片率

里面需要注意的有:

used_memory_human,代表redis数据数据占用内存的大小,

used_memory_rss_human,代表服务器时下为redis分配的内存大小,也就是redis具体占用内存的大小

used_memory_peak_human,代表redis在使用期间最高占用了多少内存。

mem_fragmentation_ratio = used_memory_rss / used_memory

mem_fragmentation_ratio,越低越高,趋向于1,大于1的部分redis碎片占用的大小。范围在1 - 1.5,大于1.5说明碎片过多,必须要清理了。

redis的碎片清理:

redis4.0以前内存碎片过多的情况下只能关闭redis重启后才能生效。

redis4.0以后新增了配置项:activedefrag

redis的配置项activedefrag默认为no,未开启,不会自动回收内存清理碎片,

当需要清理碎片的时候,使用命令

config set activedefrag yes

将activedefrag的配置设置为开启状态。则redis会自动清理碎片,回收内存。

原文地址:https://www.cnblogs.com/xzlive/p/11757960.html

时间: 2024-08-29 14:31:33

解决redis运行期间key值过期但是内存memory依然占用过高的相关文章

Python操作Redis之设置key的过期时间

对于一个已经存在的key,我们可以设置其过期时间,到了那个时间后,当你再去访问时,key就不存在了 有两种方式可以设置过期时间,一种是指定key从当前时间开始算起还能存活多久,时间单位有两个,一个是秒,一个是毫秒 第二种方式是指定key在某一个时间失效,这需要指定明确的年月日时分秒,如果你指定的这个时间已经早于当前时间,那么这个key会立即失效 现在,我们现在redis中添加两个key,分别为ex1 和 ex2 然后分别用两种不同的方式设置其过期时间 # coding=utf-8 ''' Cre

spring-redis-session 自定义 key 和过期时间

对于分布式应用来说,最开始遇到的问题就是 session 的存储了,解决方案大致有如下几种 使用 spring-session 它可以把 session 存储到你想存储的位置,如 redis,mysql 等 使用 JWTs ,它使用算法来验证 token 的合法性,是否过期,并且 token 无法被伪造,信息也是无法被篡改的 本文内容主要说 spring-session 使用 redis 来存储 session ,实现原理,修改过期时间,自定义 key 等 spring-session 对于内部

高并发架构系列:Redis并发竞争key的解决方案详解

需求由来 1.Redis高并发的问题 Redis缓存的高性能有目共睹,应用的场景也是非常广泛,但是在高并发的场景下,也会出现问题:缓存击穿.缓存雪崩.缓存和数据一致性,以及今天要谈到的缓存并发竞争. 这里的并发指的是多个redis的client同时set key引起的并发问题. 2.出现并发设置Key的原因 Redis是一种单线程机制的nosql数据库,基于key-value,数据可持久化落盘.由于单线程所以Redis本身并没有锁的概念,多个客户端连接并不存在竞争关系,但是利用jedis等客户端

redis key的过期机制

redis是一个 高性能的key-value数据库.我们可以对其中的key设置一个过期时间,相关命令如下: 1.在创建一个key value 的时候同时设置过期时间 比如: set key1 value1 EX 60 表示: 我们想要将这个 key value 放到redis中,并在其中保存60秒. set key2 value2 PX 60 表示:我们想要将这个key value放到redis中,并在其中保存 60毫秒 2.对于已经存在的key value, 比如: 事先有 set key3

谈谈redis的热key问题如何解决

引言 讲了几天的数据库系列的文章,大家一定看烦了,其实还没讲完...(以下省略一万字).今天我们换换口味,来写redis方面的内容,谈谈热key问题如何解决.其实热key问题说来也很简单,就是瞬间有几十万的请求去访问redis上某个固定的key,从而压垮缓存服务的情情况.其实生活中也是有不少这样的例子.比如XX明星结婚.那么关于XX明星的Key就会瞬间增大,就会出现热数据问题.ps:hot key和big key问题,大家一定要有所了解.本文预计分为如下几个部分 热key问题 如何发现 业内方案

Redis键值过期自动执行回调函数

用到了 redis 的键空间通知(keyspace notifications) 今天帮忙解决问题时遇到的redis一个功能点 具体行为就是:某个键值到了过期时间自动触发回调函数,然后执行一些操作,比如订单15分钟未支付就自动取消. 系统环境Win10, PHP7.1 下面记录下刚才爬的坑: 1.redis 2.8版本的升级到 3.0 以上再说,比如 3.2 2.如果将redis加入到windows的系统服务了,建议在初始阶段停止服务,使用redis-server "配置文件路径" 来

REDIS 主从架构key过期时间失效问题

活动中用到了Redis来存放用户的奖励票信息,原则上是一天一清,现在设置的是expireAt(零点)但是最近运营反馈有部分用户有异常票,经过加log排查后发现指定在零点过期的key并没有准时过期,从库中在0点23秒的时候还能读到数据,程序中用了简单的exists(key) 判断key是否存在,存在就取值.这么想可能是主库在零点过期了,但是没有及时同步到从库.在网上一看,有用户遇到同样的情况,Redis版本3.2之前的会存在这种情况,然后查看了一下我们的redis版本,发现是3.0 这也就难怪了,

spring boot redis序列化key-value时key值前面出现多余值

参考网址:https://blog.csdn.net/yunhaibin/article/details/9001198# 业务涉及将之前的一主二从redis集群改造后5主5从的redis集群,改造完成后发现一个问题,往redis里面写数据时,key值钱面会出现多余的值(比正常的key值里面多了个t6),如下图 用redis链接客户端访问时,会显示乱码,如下图 经参考大神文章,在redis.xml配置增加redis序列化相关匹配信息解决 <bean id="redisTemplate&qu

MATLAB GUI程序设计中ListBox空间在运行期间消失的原因及解决方法

在运行期间,ListBox控件突然消失,同时给出如下错误提示: Warning: single-selection listbox control requires that Value be an integer within String rangeControl will not be rendered until all of its parameter values are valid 此错误经常出现在清空List之后.原因在于,List的Value属性指示当前选中的列表项序号,如果超