目录
--1.redis过期时间设置原理
--2.redis数据持久化原理
--3.redis内存回收策略
1.redis过期时间设置原理
a.redis可以使用expire命令设置一个键的过期时间,达到约定时间自动删除
EXPIRE <KEY> <TTL> : 将键的生存时间设为 ttl 秒
PEXPIRE <KEY> <TTL> :将键的生存时间设为 ttl 毫秒
EXPIREAT <KEY> <timestamp> :将键的过期时间设为 timestamp 所指定的秒数时间戳
PEXPIREAT <KEY> <timestamp>: 将键的过期时间设为 timestamp 所指定的毫秒数时间戳
b.key还有多久时间被删除
当键不存在时,TTL命令会返回-2,而对于没有给指定键设置过期时间的,通过TTL命令会返回-1
TTL key
c.移除key的过期时间设置
清除了过期时间,则返回1 。 否则返回0(键不存在或者本身就是永久的)
PERSIST key
--针对字符串独有的过期时间设置方式
setex(String key,int seconds,String value)
d.key过期删除的原理
redis使用的过期键值删除策略是:惰性删除加上定期删除,两者配合
(1)惰性删除
key值过期后,此键值不会马上被删除,而是等到下次被使用的时候,才会被检查到过期,此时才能得到删除。缺点明显太浪费内存,对于不常用的,容易造成大量垃圾数据堆积
(2)定时删除
Redis会周期性地随机测试一些key,已过期的key将会被删掉。Redis每秒会进行10次操作,具体的流程:
a 随机测试 20 个带有timeout信息的key;
b 删除其中已经过期的key;
c 如果超过25%的key被删除,则重复执行步骤1;
其实还有一种删除机制:立即删除:设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除,缺点:redis是单线程,如果删除要删除大量的key值,遇上cpu繁忙时,会造成性能低下.
2.redis数据持久化原理
a.rdb
符合一定条件时,Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中
Redis会在以下几种情况下对数据进行快照
(1)根据配置规则进行自动快照
save 900 1
save 300 10
save 60 10000
(2)用户执行SAVE或者GBSAVE命令
(3)执行FLUSHALL命令
(4) 执行复制(replication)时
b.aof
默认情况下Redis没有开启AOF(append only file)方式的持久化,可以通过appendonly参数启用,在redis.conf中
找到 appendonly yes
网友评论