目录
▪️ 基础命令介绍:
https://blog.youkuaiyun.com/qq_42816268/article/details/115178561
▪️ 初步了解:
1、可以为key设置过期时间,redis会根据其删除策略对过期的key进行删除
1)常见删除策略:
▪️ 立即删除(不属于redis):立即删除可以保证内存中数据的新鲜度,保证key过期了就可以马上被删除,其所占用的CPU也会被释放,但是对CPU不是很友好,redis的事件处理对时间事件的处理方式是无序链表,查找一个key的时间复杂度为O(n),不适合处理大量时间事件。
▪️ 惰性删除:key过期后并不会被马上删除,当key被访问时,会先检查该key是否过期,如果过期了就删除,但是对于一些经常不被访问的key,会长久的存在内存中,浪费资源。
▪️ 定期删除:每隔一段时间执行一次删除操作。
2)惰性删除+定期删除是最中和的方法。
2、设置的时间可以是微秒,也可以是秒。
3、当使用WATCH监控被设置有效期的key时,如果在事务执行前,该key失效了,WATCH命令并不会认为该key被改变,则不会中断事务的执行。
4、若某个key设置了过期时间后,执行一些改变该key的命令(SET、GETSET、DEL等),那么之前对该key设置的过期时间将会取消。
5、若只是执行对value进行操作的命令(INCR、LPUSH、HSET等),那么过期时间不会被取消。
▪️ 过期时间(秒) EXPIRE、检查过期时间 TTL
1)语法:EXPIRE key 秒 、TTL key
2)语意:为某个存在的key设置过期时间,到期后该key会被删除。
检查某个key的过期时间
3)要点:若某个key设置了过期时间后,执行一些改变该key的命令(SET、GETSET、DEL等),那么之前对该key设置的过期时间将会取消
127.0.0.1:6379> SET checkCode 1414 // 设置checkCode = 1414 OK 127.0.0.1:6379> EXPIRE checkCode 500 // 设置checkCode的过期时间为500秒,设置成功返回值1 (integer) 1 127.0.0.1:6379> TTL checkCode // 5秒后用TTL key 命令查看该key的过期时间,还有495秒 (integer) 495 127.0.0.1:6379> EXPIRE checkCode 50 // 重新设置checkCode的过期时间为50秒 (integer) 1 127.0.0.1:6379> TTL checkCode // 2秒后查看其过期时间,还有48秒 (integer) 48 127.0.0.1:6379> GET checkCode2 // 不存在checkCode2这个key (nil) 127.0.0.1:6379> EXPIRE checkCode2 500 // 为不存在的key设置过期时间,返回0,设置失败 (integer) 0 127.0.0.1:6379> TTL checkCode2 // TTL检查不存在的key,返回-2,表示该key不存在 (integer) -2 127.0.0.1:6379> SET checkCode3 1415 // 设置 checkCode3 = 1415,不给其设置过期时间 OK 127.0.0.1:6379> TTL checkCode3 // 用TTL检查没有设置过期时间的key,返回-1 (integer) -1
▪️ 过期时间(毫秒) PEXPIRE
1)语法:PEXPIRE key 毫秒
2)语意:为某个存在的key设置过期时间,到期后该key会被删除。
同EXPIRE,只是把秒换成了毫秒
▪️ 取消过期时间 PEISIST
1)语法:PERSIST key
2)语意:取消对应key的过期时间
3)要点:
(1)若某个key设置了过期时间后,执行一些改变该key的命令(SET、GETSET、DEL等),那么之前对该key设置的过期时间也会取消。
(2)若只是执行对value进行操作的命令(INCR、LPUSH、HSET等),那么过期时间不会被取消。
(3)若某个key不存在或者之前没有被设置过期时间,则会返回0,取消成功则会返回1。
127.0.0.1:6379> SET checkCode 1515 // 设置 checkCode = 1515 OK 127.0.0.1:6379> TTL checkCode // 查看其过期时间,返回该key并没有被设置过期时间 (integer) -1 127.0.0.1:6379> PERSIST checkCode // 对没有设置过期时间的key用PERSIST命令,返回0 (integer) 0 127.0.0.1:6379> EXPIRE checkCode 100 // 对key为checkCode设置100秒的过期时间 (integer) 1 127.0.0.1:6379> TTL checkCode // 8秒后检查该key的过期时间,还有92秒 (integer) 92 127.0.0.1:6379> PERSIST checkCode // 取消checkCode的过期时间,成功,返回1 (integer) 1 127.0.0.1:6379> TTL checkCode // 用TTL检查该key的过期时间,返回-1,表示该key虽然存在,但是没有被设置过期时间 (integer) -1 127.0.0.1:6379> GET checkCode // checkCode = 1515 "1515"
▪️ 在指定UNIX时间戳过期 EXPIREAT、PEXPIREAT
1)语法:EXPIREAT key 时间戳(秒) 、 PEXPIREAT key 时间戳(毫秒)
2)语意:为指定key设置过期时间,在指定时间戳后过期
127.0.0.1:6379> SET checkCode 1414 // 设置checkCode = 1414 OK 127.0.0.1:6379> EXPIREAT checkCode 1617797660 // checkCode 将会在时间戳为1617797660之后过期(时间戳单位为秒) (integer) 1 127.0.0.1:6379> TTL checkCode // 距离过期时间还有100秒 (integer) 100 127.0.0.1:6379> PEXPIREAT checkCode 1617797660000 // checkCode 将会在时间戳为1617797660000之后过期(时间戳单位为毫秒) (integer) 1 127.0.0.1:6379> TTL checkCode // 还有68秒 (integer) 68