Redis持久化机制

Redis 提供了两种不同的持久化方式:

  1. RDB(Redis DataBase):在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshotting。
  2. AOF(Append Only File):保存Redis服务器所执行的所有写操作命令到文件。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# RDB是默认的持久化方式。在一定时间间隔内将内存中的数据集快照写入磁盘
save 900 1      # 900秒内至少1个键被修改则触发保存
save 300 10     # 300秒内至少10个键被修改则触发保存
save 60 10000   # 60秒内至少10000个键被修改则触发保存
 
dbfilename dump.rdb
dir /path/to/your/redis/directory

# 增量日志 AOF 方式,设置刷新到磁盘的频率
appendonly yes                      # 开启AOF持久化
appendfilename appendonly.aof       # AOF文件名
dir /path/to/your/redis/directory   # AOF文件存储目录

appendfsync always  				# 每次写入都同步,最慢但最安全
# appendfsync everysec  			# 每秒同步一次,折衷方案
# appendfsync no  					# 完全依赖操作系统,最快但不安全

在实际应用中,通常会同时使用RDB和AOF两种持久化方式,以此来保证数据的持久性和可靠性。

Redis内存管理策略

我们需要注意,缓存过期策略和内存淘汰机制是容易混淆的两个概念,两者的目的不同。

  • 缓存过期策略:针对过期 Key ,从内存中移除的方式。
  • 内存淘汰机制:针对 Redis 内存不足时,业务还在继续往 Redis 追加内容,如何处理已有的内容。

在 Redis 的 redis.conf 文件中,我们能找到八种可配置的内存淘汰机制:

  • volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 key;
  • allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key;
  • volatile-lfu:当内存不足以容纳新写入数据时,在过期密集的键中,使用 LFU 算法进行删除 key;
  • allkeys-lfu:当内存不足以容纳新写入数据时,对所有的 key 执行 LFU 算法筛选过期;
  • volatile-random:当内存不足以容纳新写入数据时,在设置了过期的键中,随机删除一个 key;
  • allkeys-random:当内存不足以容纳新写入数据时,随机删除一个或者多个 key;
  • volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 key 优先移除;
  • noeviction:当内存不足以容纳新写入数据时,新写入操作直接报错,无法写入。

上述算法按照特性可以分为几类:LRU/LFU 算法、随机删除算法、优先淘汰历史数据算法、报错处理算法。

在项目中推荐两种 LRU 算法,即如果 Redis 用作持久化数据库,不配置缓存过期时间,采用 allkeys-lru ;如果 Redis 作为缓存数据库,配置了 Key 过期时间,采用volatile-lru算法。

LRU(Least Recently Used,最近最少使用算法)

分布式系统数据一致性

分布式系统中的一致性概念分三种:

  1. 强一致性:所有节点的数据必须实时同步,保证任何时候读取到的数据都是最新的。
  2. 弱一致性:系统允许数据暂时不一致,但最终会达到一致状态。
  3. 最终一致性:数据更新后,经过一段时间,系统会逐步达到一致状态。这个时间不固定,但在业务允许的范围内。

参考阅读:

https://www.jb51.net/database/324978r5e.htm

https://www.51cto.com/article/785894.html

https://zhuanlan.zhihu.com/p/629247043

https://zhuanlan.zhihu.com/p/689382641

Redis Stream消息队列

消息队列工具如此之火,以至于Redis5.0开始提供了一份模拟Kafka的效率队列数据类型Stream,下面看深度介绍:

https://zhuanlan.zhihu.com/p/496944314

https://zhuanlan.zhihu.com/p/671006777

(完)