键的过期时间
简介Redis可以通过对键设置过期时间来自动删除过期的键信息。当设置了一个过期时间后,过期时间会被存储为一个绝对的UNIX的时间戳。这样做的目的是即使Redis服务器宕机了一段时间,这个时间戳也会被持久化到RDB文件中,当Redis服务器启动时,这个用来判断键是否过期的时间戳不会发生变化,一旦超过了这个时间戳,键就过期了。
Redis可以通过对键设置过期时间来自动删除过期的键信息。当设置了一个过期时间后,过期时间会被存储为一个绝对的UNIX的时间戳。这样做的目的是即使Redis服务器宕机了一段时间,这个时间戳也会被持久化到RDB文件中,当Redis服务器启动时,这个用来判断键是否过期的时间戳不会发生变化,一旦超过了这个时间戳,键就过期了。
在一个键过期后,客户端访问已经过期的键,Redis就会立即将其从内存中删除。Redis这种删除键的方式被称为被动过期。对于那些已经过期也不会被再次访问的键,Redis会定期运行一个基于概率的算法来进行主动删除。跟具体的就是Redis会选择设置了过期时间的20个键,在这20个键中已经过期的就立即删除,如果选中的键中25%的键已经过期被删除,那Redis会继续选择20个进行重复这个过程,该过程每秒钟运行10次,可通过配置文件的hz值进行设置。
清理键过期的方法:
- 使用PERSIST命令使其成为持久的键;
- 键的值被替换或被删除,都会清除过期时间。但是修改列表、集合、哈希不会清理过期时间,这里只是修改了元素信息,并没有操作键的信息;
- 被另一个没有过期时间的键重命名;
相关命令
EXPIRE、EXPIREAT、TTL、PERSIST
相关操作
1、使用EXPIRE设置过期时间、TTL命令查看剩余时间
127.0.0.1:6379> LPUSH "user_ids" 123 456 234 156 888
(integer) 5
127.0.0.1:6379> TTL "user_ids" #如果没有过期时间,就返回-1
(integer) -1
127.0.0.1:6379> EXPIRE "user_ids" 100 #100设置为过期的相对时间,单位秒
(integer) 1
127.0.0.1:6379> TTL "user_ids"
(integer) 99
#等待99秒
127.0.0.1:6379> TTL "user_ids" #如果这个键不存在就返回-2
(integer) -2
127.0.0.1:6379> EXISTS "user_ids"
(integer) 0
2、使用PERSIST命令将键设置为持久的键
127.0.0.1:6379> LPUSH "user_ids" 123 456 234 156 888
(integer) 5
127.0.0.1:6379> EXPIRE "user_ids" 100
(integer) 1
127.0.0.1:6379> TTL "user_ids"
(integer) 98
127.0.0.1:6379> PERSIST "user_ids"
(integer) 1
127.0.0.1:6379> TTL "user_ids"
(integer) -1
注意:EXPIRE命令和EXPIREAT命令类似,EXPIREAT用来指定一个绝对的UNIX的时间戳。EXPIRE和EXPIREAT都可以
是毫秒级的精度来指定过期时间。
Redis对已经过期的键的主动删除是不可预料的,所以有些已经过期的键可能永远不会被删除。当发现有太多的键没有被删除掉的时候,可以使用SCAN命令来人为主动的删除过期的键。
最近在使用Golang的WEB框架Iris做了一个小的系统,但是里面有一些静态的资源,如css、js、html文件,如果只是通过go build打包的这些静态文件是打包不进去的,所以本文主要记录下如何将所以文件都打包的二进制文件中。
桌面应用很多都会在系统托盘中出现,那么Flutter的开发的桌面应用该如何增加到系统托盘中呢?本文将带大家一起尝试一下.
ss命令是类似并将取代netstat的工具,它能用来查看网络状态信息,包括TCP、UDP连接、端口等信息。它的优点是能够显示更多详细的有关网络连接信息,而且比netstat更快速高效。 如果系统中没有ss命令,就需要进行安装:yum install iproute
首先我们通过fake2db生成一批测试数据,生成过程查看《Python常用包整理-fake2db:一个生成测试数据的工具》
通过学习Flutter的布局,可以通过ListView、Container、Row、Column等组件来对界面进行布局。
快速生成表格
Electron页面跳转、浏览器打开链接和打开新窗口
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
Docker编译镜像出现:fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.2c4ac24e.tar.gz: No such file or directory问题