Redis持久化与过期机制

Redis持久化与过期机制

1. 持久化机制

1.1 RDB(默认)

  • 机制
    • 指定时间内、指定次数写操作 -> 会将内存中的数据写入磁盘(dump.rdb文件)
    • 重启Redis将会加载磁盘中已持久化的数据
  • 优点:恢复速度快,适用于大多数场景
  • 缺点:数据的数据完整性、一致性不高(因为如果内存中的数据写入磁盘之前,程序挂了或者宕机,会导致新的数据没有被持久化)

1.2 AOF

  • 机制
    • 将每个写操作以日志的方式记录并追加到文件中
    • 重启Redis将会读取日志文件进行恢复
  • 优点:数据的完整性、一致性更高
  • 缺点:日志记录较多,恢复速度慢

2. 过期机制

2.1 根据过期策略删除数据

  • 定时删除:内存占用低,CPU消耗高。每100ms进行一次随机抽样(100个key),删除过期的key。如果删除的key超过抽样总数的25%(即25个),那么立即进行下一次抽样检查。
  • 惰性删除:内存占用高,CPU消耗低。当key被访问时,才检查key是否过期,如果过期则删除这个key,并返回空。
  • 定期删除:定时删除与惰性删除的结合版。如果删除频次较高,转为定时删除,如果删除频次较低,转为惰性删除。

2.2 当内存过大装不下新数据时,将启用淘汰机制

  • 一般为了防止Redis占用内存过大,影响整个服务器,会设置其最大内存值,即maxmemory
  • 当内存超过maxmemory时,将根据maxmemory_policy释放内存
    • noeviction:写入新数据时,直接报错
    • allkeys-lru:写入新数据时,删除所有数据中最近最少使用的key
    • allkeys-lfu:写入新数据时,删除所有数据中使用频次最少的key
    • allkeys-random:写入新数据时,随机删除所有数据中的key
    • volatile-lru:写入新数据时,删除设置了过期时间的数据中最近最少使用的key
    • volatile-lfu:写入新数据时,删除设置了过期时间的数据中使用频次最少的key
    • volatile-random:写入新数据时,随机删除设置了过期时间的数据中的key
    • volatile-ttl:写入新数据时,优先删除过期时间较早的key
  • 补充
    • LRU -> least recently used
    • LFU -> least frequently used

其他

  • Redis快的原因
    • 纯内存操作
    • epoll是单线程,没有多线程的加锁以及切换
发布了128 篇原创文章 · 获赞 45 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/alionsss/article/details/103721462