过期时间的设置
在redis中提供了expire命令的设置一个键的过期时间,到期以后redis会自动删除他,这个在我们的实际使用过程中得非常多
expire命令的使用方法为
expire key seconds
其中seconds参数表示过期的时间,单位秒
expire返回值为1表示设置成功,0表示设置失败或者键不存在
如果向知道一个键还有多久时间被删除,可以使用TTL命令
TTL key
当键不存在,TTL会返回2
对于没有给键指定设置过期时间的,通过TTL会返回-1
如果想取消键的过期时间,可以使用persist命令,如果该命令执行成功或者成功清除了过期时间,执行TTL会返回1,否则返回0(键不存在,或者本身就是永久的)
expire命令的时间必须是整数,所以最小单位是1秒,如果需要更小的单位,来查看键的过期时间,可以使用pexpire,pexpire的单位是毫秒,对应的PTTL查看剩余时间的毫秒值
还有一个针对字符串独有的过期时间的设置
setex(String key ,int seconds,String value)
过期时间的原理
redis中的主键失效时间是如何实现的?失效的主键是如何删除的,实际上,redis删除失效的主键方法有2种
消极方法
在主键被访问时,发现该主键的过期时间已失效,那么久删除它
积极方法
周期性的从设置了失效时间的主键中选择一部分失效的主键删除
对于那些从未被查询的key,即使他们已经过期,被动方式已无法删除,因此redis会周期性的随机测试一些key,已经过期的key将会被删除,redis每秒会进行10次操作,具体的过程:
1.随机测试20个带有过期时间的key
2.删除其中已经过期的key
3.如果超过25%(20个的25%)的key被删除,则重复执行步骤1;
这是一个简单的概率算法,基于假设我们随机抽取key代表了全部的key空间。