键的过期时间
简介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命令来人为主动的删除过期的键。
nodejs中使用npm和yarn,使用最新阿里云镜像 aliyun mirror,网上很多还是文章用的是下面这个地址~~yarn config set registry https://registry.npm.taobao.org~~
最近想把公司的内网几台服务器能通过打开一个网站的方式进行管理,所以寻求了一圈最终选择了Teleport。Teleport,这是一个使用Go语言编写的,高效的现代SSH管理工具。
在前面我们已经介绍了Redis的持久化RDB和AOF。但是很多时候,我们需要考虑很多因素:服务器宕机数据丢失、持久化时的性能开销、持久化文件的大小以及数据恢复速度。RDB持久化,两次快照之间写入的数据可能会丢失,当写入流量较大且数据集也很大时,RDB中系统调用fork()的延迟和内存的开销也是一个问题。但是RDB比AOF文件占用的磁盘空间更小,并且从RDB中恢复数据的速度更快。事实上,我们可以同时启动这两个功能。
Centos中用Chrome将网页导出为PDF,chrome --headless --print-to-pdf https://developer.chrome.com/
最近国内访问GitHub特别的慢,那么对于一名程序猿来说,GitHub是多么的重要,本文主要记录如何加快GitHub的访问。
快速生成表格
Electron页面跳转、浏览器打开链接和打开新窗口
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。
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问题