Redis过期时间与缓存
1、设置过期时间
EXPIRE key seconds 其中 seconds 参数标识键的过期时间,单位是秒。返回1表示设置成功,返回0则表示键不存在或设置失败。
TTL key 查看一个键还有多久的时间会被删除。返回值是剩余的时间,单位是秒。当键不存在时该命令会返回 -2.
PEXPIRE key seconds 其中 seconds 参数标识键的过期时间,单位是毫秒。返回1表示设置成功,返回0则表示键不存在或设置失败。
PTTL key 查看一个键还有多久的时间会被删除。返回值是剩余的时间,单位是毫秒。当键不存在时该命令会返回 -2.
PERSIST key 取消键的过期时间,即将键恢复成永久的。过期时间被成功清楚则返回1,否则返回0(键不存在或键本来就是永久的)
127.0.0.1:6379> set session:101 uid1314
OK
127.0.0.1:6379> expire session:101 120
(integer) 1
127.0.0.1:6379> ttl session:101
(integer) 106
127.0.0.1:6379> ttl session:101
(integer) 93
127.0.0.1:6379> ttl session:101
(integer) -2
没有为键设置过期时间,既永久存在,这是建立一个键后的默认情况。TTL命令返回 -1。
在2.6版本中,无论键不存在还是键没有过期时间都会返回 -1,知道 2.8 版本后两种情况才会分别返回 -2 和 -1 两种结果。
2、实现缓存
当服务器内存有限时,如果大量地使用缓存键且过期时间设置的过长就会导致Redis占满内存;如果将缓存键的过期时间设置的过短,就可能导致缓存命中率过低并且大量内存白白地闲置。
很难为缓存键设置合理的过期时间,为此可以限制Redis能使用的最大内存,并让Redis按照一定的规则淘汰不需要的缓存键。
设置方法:修改配置文件的 maxmemory 参数,限制Redis最大可用内存大小(单位是字节),当超出这个限制时Redis会依据 maxmemory-policy 参数指定的策略来删除不需要的键直到Redis占用的内存小于指定的内存。
volatile-lru 使用LRU算法删除一个键(支队设置了过期时间的键)
allkeys-lru 使用LRU算法删除一个键
volatile-random 随机删除一个键(支队设置了过期时间的键)
allkeys-random 随即删除一个键
volatile-ttl 删除过期时间最近的一个键
noeviction 不删除键,只返回错误
LRU(Least Recently Used)算法即“最近最少使用”,其认为最近最少使用的键在未来一段时间内也不会被用到,即当需要空间是认为这些键是可以被删除的。
推荐阅读
-
JAVAEE——宜立方商城06:Redis安装、数据类型和持久化方案、Redis集群分析与搭建、实现缓存和同步
-
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
-
redis学习(五) redis过期时间
-
Python操作Redis之设置key的过期时间实例代码
-
localstorage实现带过期时间的缓存功能
-
RabbitMQ与.net core(三) fanout类型Exchange 与 消息的过期时间 与 队列的存活时间
-
MySQL与Redis实现二级缓存
-
Redis系列(六):设置/移除键的过期时间
-
从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之八MemoryCache与redis缓存的使用
-
redis缓存淘汰策略LRU和LFU对比与分析