Redis过期时间以及慢查询日志

本文来自Redis深度历险核心原理与应用实践-钱文品书籍

一、过期时间

     1、Redis的所有的数据结构都是可以设置过期时间,时间一到,Redis会自动删除相应的对象,需要主要的是,过期是以对象为单位的,不如一个hash结构的过期是整个hash对象的过期,而不是其中的某个子key的过期。

     2、如果一个字符串已经设置了过期时间,然后你调用set方法修改它,它的过期时间会小时的。Redis的字符串是动态字符串,是可以修改的字符串,字符串的最大长度是512MB。

      以华为云的免费版Redis 5.0【宣传一哈】演示一下过期时间的设置.【设置过期时间是秒级】

      

       

     

二、扩容策略

       字符串扩容机制介绍:

      1、类似Java中的ArrayList和LinkedList的预分配冗余空间的方式减少内存的频繁分配。

      2、内部实际分配的空间容量大于字符串的长度。

      3、在字符串长度小于1M之前,扩容空间采用加倍策略,也就是保留100%的冗余空间。

      4、当字符串长度超过1MB之后,为了避免加倍后的冗余空间过大而导致浪费,每次扩容只会多分配1MB大小的冗余空间。

三、内存回收策略

      1、Redis并不总是将空闲内存立即归还给操作系统。

      2、如果当前Redis内存有10GB,当你删除1GB的key后,再去观察内存,你会发现内存变化不会太大。原因是操作系统系统是页为单位回收内存的,这个页上只要还有一个key在使用,那么他就不会被回收。Redis虽然删除了1GB的key,但是这些key分散到不同页面了,每个页面都还有其他的key存在,这就导致了内存不会被立即回收。flushdb后然后再观察内存,会发现内存确实被回收了,原因是所有的key到被干掉了,页面都被清理干净了,当然就会被操作系统立即回收了。

      3、Redis虽然无法保证立即回收已经删除的key的内存,但是它会重新使用那些尚未被回收的空闲内存。

四、内存分配算法

      1、Redis为了保持自身结构的简单性,在内存分配方面直接交给第三方内存分配库区实现,目前Redis使用jemalloc库来管理内存的。

       info memory

       mem_allocator:jemalloc-5.1.0 

       附【List列表右边进右边出-栈】

  

 【右边进、左边出-队列】

  

五、慢查询日志

1、默认的慢查询的时间值是10000us,就是10ms秒

config get slowlog-log-slower-than

 2、默认存储128条

 config   get  slowlog-max-len

   

 3、查看慢查询日志

 slowlog get 

[3]获得慢查询日志格式
1) 1) (integer) 5           # 日志的唯一标识符
   # 命令执行时的Unix时间戳
   3) (integer) 6           # 命令执行的时长,单位微妙
   4) 1) "set"              # 命令
      2) "score"            # 命令参数
      3) "1"                # 命令值
   5) "127.0.0.1:55186"

它决定 slow log 最多能保存多少条日志, slow log 本身是一个 FIFO 队列,当队列大小超过 slowlog-max-len 时,最旧的一条日志将被删除,而最新的一条日志加入到 slow log ,是保留在内存中的,仅仅记录命令的执行耗时,如客户端的发送回复、耗时是不记录在内的.

4、SLOWLOG RESET【清空日志】

5、获取慢查询队列的当前长度 slowlog len 

  附:限制最大使用内存以及相应的实际内存超过maxmemory时,Redis的几种可选的淘汰策略

  maxmemory:134217728 maxmemory_human:128.00M maxmemory_policy:volatile-lru

  尝试淘汰设置了过期时间的key,最少使用的key优先1被淘汰,没有设置过期时间的key不会被淘汰,这样可以保证需要持久化的数据不会突然丢失.

  allkeys-xxx策略:会对所有的key进行淘汰.

  volatile-xxx策略:只会针对带过期时间的key进行淘汰.线上Redis是提供缓存功能还是持久环功能选择,视情况而定.

  

附:Redis的常用配置参数,以华为云Redis的建议值参考如下

  

hash-max-ziplist-entries 512	1~10,000	512	
hash-max-ziplist-value   64	    1~10,000	64	
latency-monitor-threshold 0	    0~86,400,000	0	
lua-time-limit           5,000	100~5,000	5,000	
master-read-only          no	yes,no	no	
maxclients              10,000	1,000~50,000	10,000	
maxmemory-policy        volatile-lru	volatile-lru,allkeys-lru,volatile-lfu,allkeys-lfu,volatile-random,allkeys-random,volatile-ttl,noeviction	volatile-lru	
notify-keyspace-events  Ex	请参考该参数的描述。	Ex	
proto-max-bulk-len      536,870,912	1,048,576~536,870,912	536,870,912	
set-max-intset-entries  512	1~10,000	512	
slowlog-log-slower-than 10,000	0~1,000,000	10,000	
slowlog-max-len         128	0~1,000	128	
timeout                  0	0~7,200	0	
zset-max-ziplist-entries 128	1~10,000	128	
zset-max-ziplist-value   64	1~10,000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大道之简

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

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

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

打赏作者

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

抵扣说明:

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

余额充值