redis 设置过期时间

1、设置过期时间功能:即对存储在 redis 数据库中的值可以设置一个过期时间。作为一个缓存数据库,这是非常实用的。如我们一般项目中的 token 或者一些登录信息,尤其是短信验证码都是有时间限制的,按照传统的数据库处理方式,一般都是自己判断过期,这样无疑会严重影响项目性能。我们 set key 的时候,都可以给一个 expire time,就是过期时间,通过过期时间我们可以指定这个 key 可以存活的时间。

2、redis删除过期key策略:假设你设置了一批 key 只能存活1个小时,那么接下来1小时后,redis是怎么对这批key进行删除的?

定期删除+惰性删除

(1)定期删除:redis默认是每隔 100ms 就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除。注意这里是随机抽取的。为什么要随机呢?假如 redis 存了几十万个 key ,每隔100ms就遍历所有的设置过期时间的 key 的话,就会给 CPU 带来很大的负载!

(2)惰性删除:定期删除可能会导致很多过期 key 到了时间并没有被删除掉。所以就有了惰性删除。假如过期key,靠定期删除没有被删除掉,还停留在内存里,除非系统去查一下那个 key,才会被redis给删除掉。这就是所谓的惰性删除。

注意:但是仅仅通过设置过期时间还是有问题的。我们想一下:如果定期删除漏掉了很多过期 key,然后你也没及时去查,也就没走惰性删除,此时会怎么样?如果大量过期key堆积在内存里,导致redis内存块耗尽了。怎么解决这个问题呢?

  需要引入redis 内存淘汰机制的概念。

原文地址:https://www.cnblogs.com/guoyu1/p/12264636.html

时间: 2024-10-10 22:41:19

redis 设置过期时间的相关文章

java操作Redis缓存设置过期时间

关于Redis的概念和应用本文就不再详解了,说一下怎么在java应用中设置过期时间. 在应用中我们会需要使用redis设置过期时间,比如单点登录中我们需要随机生成一个token作为key,将用户的信息转为json串作为value保存在redis中,通常做法是: //生成token String token = UUID.randomUUID().toString(); //把用户信息写入redis jedisClient.set(REDIS_USER_SESSION_KEY + ":"

redis文档翻译_key设置过期时间

Available since 1.0.0.    使用开始版本1.01 Time complexity: O(1)  时间复杂度O(1) 出处:http://blog.csdn.net/column/details/redisbanli.html Set a timeout on key. After the timeout has expired, the key will automatically be deleted. A key with an associated timeout

redis 一二事 - 设置过期时间,以文件夹形式展示key显示缓存数据

在使用redis时,有时回存在大量数据的时候,而且分类相同,ID相同 可以使用hset来设置,这样有一个大类和一个小分类和一个value组成 但是hset不能设置过期时间 过期时间只能在set上设置 1 // 向redis中添加缓存 2 jedisClient.set(REDIS_ITEM_KEY + ":" + itemId + ":" + ITEM_KEY, JsonUtils.objectToJson(item)); 3 // 设置key的过期时间 4 jed

laravel redis存数组并设置过期时间

$data = [ 'zoneList'=>$zoneList, 'eqList' => $eqList, 'mdateList' => $mdateList, 'workhoursList' => $workhoursList, 'pricerangeList' => $pricerangeList, ]; Redis::set($cacheKey, serialize($data)); Redis::expire($cacheKey, 300); laravel门面set

redis hash结构如何设置过期时间

Redis中有个设置时间过期的功能,即通过setex或者expire实现,目前redis没有提供hsetex()这样的方法,redis中过期时间只针对顶级key类型,对于hash类型是不支持的,这个时候,我们可以采用,所以如果想对hash进行expires设置,可以采用下面的方法: redis 127.0.0.1:6379> hset expire:me name tom (integer) 0 redis 127.0.0.1:6379> hget expire:me name "t

Redis原子性写入HASH结构数据并设置过期时间

Redis中提供了原子性命令SETEX或SET来写入STRING类型数据并设置Key的过期时间: > SET key value EX 60 NX ok > SETEX key 60 value ok 但对于HASH结构则没有这样的命令,只能先写入数据然后设置过期时间: > HSET key field value ok > EXPIRE key 60 ok 这样就带了一个问题:HSET命令执行成功而EXPIRE命令执行失败(如命令未能成功发送到Redis服务器),那么数据将不会过

redis的过期时间设置和过期删除机制

1.设置过期时间 redis有四种命令可以用于设置键的生存时间和过期时间 EXPIRE <KEY> <TTL> : 将键的生存时间设为 ttl 秒 PEXPIRE <KEY> <TTL> :将键的生存时间设为 ttl 毫秒 EXPIREAT <KEY> <timestamp> :将键的过期时间设为 timestamp 所指定的秒数时间戳 PEXPIREAT <KEY> <timestamp>: 将键的过期时间设

redis hash过期时间

Redis中有个设置时间过期的功能,即通过setex或者expire实现,目前redis没有提供hsetex()这样的方法,redis中过期时间只针对顶级key类型,对于hash类型是不支持的可以采用,所以如果想对hash进行expires设置 redis 127.0.0.1:6379> hset expire:me name tom (integer) 0 redis 127.0.0.1:6379> hget expire:me name "tom" redis 127.

redis之过期时间

命令 实例和命令 persist persist key-name 移除键的过期时间 ttl ttl key-name 查看键的过期时间还有多少秒 expire expire key-name seconds 设置过期时间 expireat expireat key-name timestamp 设置过期时间,UNIX时间戳 pttl pttl key-name 查看过期时间,单位毫秒 pexpire pexpire key-name milliseconds 设置过期时间,单位毫秒 pexpi