7.redis原理

目录

--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

推荐阅读更多精彩内容

  • 9.1 服务器中的数据库 Redis服务器将所有的数据库都保存在服务器状态redis.h/redisServer结...
    猪大金阅读 38评论 0 0
  • redis是一个以key-value存储的非关系型数据库。有五种数据类型,string、hashes、list、s...
    林ze宏阅读 258评论 0 0
  • 制定Redis过期策略,是整个Redis缓存策略的关键之一,因为内存来说,公司不可能无限大,所以就要对key进行一...
    JackFrost_fuzhu阅读 3,007评论 1 10
  • 本文对Redis的过期机制简单的讲解一下讲解之前我们先抛出一个问题,我们知道很多时候服务器经常会用到redis作为...
    流蓝浅阅读 1,823评论 0 1
  • NOSQL类型简介键值对:会使用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据,如redis,volde...
    MicoCube阅读 2,066评论 3 26