Redis是一种内存数据库,所有数据均存放在内存中。redis在实际使用中,通常被使用者当作缓存使用,在缓存中,我们的目标是提高缓存的命中率,我们知道内存资源是有限的,这意味着我们希望在内存中保留最有可能被访问的键,为此redis提供了一个TTL的功能来设置key的过期时间。
内存中的数据可以通过TTL指令获取其状态。
TTL命令的返回值:
如果键不存在,TTL命令将返回-2。 如果键存在,但是没有设置过期时间,TTL命令将返回-1。 如果键存在且设有过期时间,TTL命令将返回剩余的生存时间,单位是秒。
与TTL类似,PTTL命令以毫秒为单位返回键的剩余生存时间。
针对已经过期的key,Redis实际是如何释放空间的呢?redis对于过期key,有以下的清除策略:
被动(惰性)删除:当访问一个已经过期的key时,会触发key的惰性删除,直接删除这个key。 主动删除:惰性删除无法保证过期数据被及时删除,这些数据持续累积可能导致内存被占满,索引redis自身也会定期主动删除一些已过期的key。默认情况下,Redis每秒钟抽取20个随机key10次,如果key过期了,就会被删除。
注:这两种方法都不能保证所有的过期key都能被立即被删除。
主动删除过期key的操作,是Redis调用后台方法去执行定期任务(Cron jobs)来实现的,这些定期任务的执行频率由hz参数指定,默认是10,即每秒执行10次。
hz: The range is between 1 and 500, however a value over 100 is usually not a good idea. Most users should use the default of 10 and raise this up to 100 only in environments where very low latency is required. hz 10
hz的取值范围为1~500,增大hz参数的值会提升Redis执行后台定期任务的执行频率,对于删除过期来说,可以更快的释放redis内存空间。但是也会提高Redis服务的CPU使用率。
如果Redis本身CPU使用率不是很高,而内存的使用率较高,系统中又长时间存在大量过期key,可适当考虑增加HZ的值,来加快过期key的删除。
参考:
https://www.biggeryun.com/help-65-265.html
https://blog.devgenius.io/understanding-lazy-evaluation-and-key-expiration-in-redis-c8e2e36b0fd3

点个“赞 or 在看” 你最好看!

👇👇👇 谢谢各位老板啦!!!




