Redis教程

《redis设计与实现》读笔之redis过期与持久化

本文主要是介绍《redis设计与实现》读笔之redis过期与持久化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Redis基础

redis主要由【dict】【expires】两个字典构成。dict负责键值对,expires保存键值对过期时间。

expires结构:
{
    key:指针,指向键对象
    value: longlong过期时间,毫秒为单位的UNIX时间戳
}

redis键总是一个字符串对象,value可以是任意redis对象类型

redis过期

1 设置过期

EXPIRE, PEXPIRE关键字设置过期

2 保存过期

过期字典:expires字典保存了所有键的过期时间
{
key:指针,指向键对象
value: longlong过期时间,毫秒为单位的UNIX时间戳
}

所以可以通过过期dict里的value和当前unix时间戳比较,判断是否过期。

3 过期键删除

  1. 定时删除:设置定时器timer,在设定key的时候设定。键多时,cpu不友好
  2. 惰性删除:获得键的时候,查看过期dict判断是否过期。cpu友好
  3. 定期删除:每隔一段时间对数据库进行检查,删除过期键。折中,但是不好设置删除的时长和频率
    AOF:AOF写入:一个键过期,但是没被删除,对于AOF不会有影响。当惰性删除or定时删除后,程序向AOF追加一个DEL命令来删除.AOF重写:检查过期的键。
    
    RDB:创建RDB时:对键检查,过期的不会载入到快照。载入RDB文件时:主服务器模式运行会检查键是否过期,从服务器模式不会。

redis持久化

RDB snapshot快照

快照式的持久化方法。

redis数据持久化时,现将数据写到临时文件,持久化结束后再用临时文件替换上次持久化好的文件。保证完整

是按照一定的策略周期性的将数据保存到磁盘。配置文件中的 save 参数来定义快照的周期

redis主进程进行数据处理,专门folk出一个子进程进行持久化,让主进程不参加IO

AOF: append only file

只追加,不改写。

将redis执行过的所有写指令记录到AOF文件中,下次redis重新启动时,只要把这些写指令从前到后重复执行一遍就可以数据恢复了。(默认一秒一次)AOF也是先写临时文件,再替换。

日志数据丢失怎么办:redis有redis-check-aof工具,防止追加日志时导致数据丢失。

日志文件太大怎么办:AOF文件大小超过阈值时,redis自动启动AOF文件重写,内容压缩。

RDB, AOF优缺点 不同点:

  1. aof数据的恢复完整度更高。rdb保存的有些数据可能不是最新的, 可能丢失数据。

  2. AOF文件会越来越大。

  3. AOF方式恢复的很慢。

  4. 如果不小心执行了FLUSHALL, 对数据进行了误删,导致数据清空,AOF可以恢复。(删除最后一个flushall命令,重启Redis)

  5. 处理过期不同:
    {

    AOF:AOF写入:一个键过期,但是没被删除,对于AOF不会有影响。当惰性删除or定时删除后,程序向AOF追加一个DEL命令来删除.AOF重写:检查过期的键。

    RDB:创建RDB时:对键检查,过期的不会载入到快照。载入RDB文件时:主服务器模式运行会检查键是否过期,从服务器模式不会。
    }

这篇关于《redis设计与实现》读笔之redis过期与持久化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!