Redis自问自答(2)
Drip
2025-03-18 21:18
累计阅读8
评论0

redis做为缓存,数据的持久化是怎么做的?

在Redis中提供了两个持久化方案,1)RDB (快照文件) ,2)AOF(日志文件-追加命令)。

这两种持久化方式有什么区别呢

RDB是一种快照文件,他是把将内存中的数据写到磁盘里。当Redis宕机重启恢复数据的时候,会加载这个RDB快照文件中恢复数据。

AOF的含义是追加文件,也叫做日志文件。他主要是将redis的每个执行命令记录到这个文件当中。当redis实例宕机恢复数据的时候,会从这个文件中再次执行一遍命令来恢复数据。

这两种方式,哪种恢复的比较快呢?

RDB因为是二进制文件,所以文件体积比较小。因此恢复起来会更快一些。

但是他可能会丢数据,因为他是周期性备份的,可以设置备份策略。

我们通常在项目中使用的是AOF,虽然恢复的速度慢一些,但是丢数据的风险会小很多,可以设置追加策略。我们当时是设置的每秒批量写入一次命令。

Redis的数据过期删除策略有哪些?(假如Redis的key过期之后,会立即删除吗?)

嗯,Redis提供了两种过期删除策略:惰性删除和定期删除。

先说惰性删除。在设置好key过期时间后,我们不去管他,等到需要使用到该key时,检测其是否过期,如果过期,删除key,反之,返回key。

第二种是定期删除。Redis会每隔一段时间,就会对一些key进行检查,并删除里面的过期的key。定期删除的两种模式是:SLOW模式和FAST模式,他们主要区别就是检测频率和执行时长的不同。

Redis的过期删除策略是:惰性删除+定期删除策略配合使用。

Redis的过期淘汰策略是什么?(假如缓存过多,内存是有限的,内存被占满了怎么办)

嗯,这个在Redis里提供了很多种,默认是noeviction,不删除任何key,内存不足时直接报错。这个可以再Redis的配置文件里修改。其中两个最关键的概念是LRU,LFU。LRU就是指最少最近使用,它会优先淘汰掉最长时间未使用的缓存。LFU是指最少频率使用,他会统计每个key中的使用频率,并且优先淘汰掉频率小的缓存。

我们项目里使用的就是allkeys-lru,由于有冷热数据的区分,他会挑选最近使用最少的数据进行淘汰,把一些最近经常访问的key留在redis中。

数据库有1000万数据,Redis只能缓存20w数据。如何保证Redis中的数据都是热点数据?

嗯,我想一下。可以是用redis的数据淘汰策略allkeys-lru。最少最近使用。优先淘汰最近使用最少的数据进行淘汰,这样保留下来都是热点数据。

Redis的内存用完了会发生什么?

这取决于Redis的数据淘汰策略,如果是默认的配置,内存使用完后会直接报错。我们当时使用的是allkeys-lru。把最近最常访问的数据留在缓存中。

评论