2020-08-27 02:22:34
当 Redis 内存满载时,可通过配置内存淘汰策略、启用持久化保障数据安全、采用分片技术分散压力等方式解决,同时需明确 Redis 默认行为是拒绝服务以防止数据损坏。 具体应对措施如下:
内存淘汰策略LRU(最近最少使用):根据数据最近被访问的时间进行淘汰,优先删除最近最少使用的键。例如,在一个缓存系统中,如果某些数据长时间未被访问,就会被 LRU 策略淘汰,为新数据腾出空间。
LFU(最不经常使用):依据数据被访问的频率进行淘汰,删除访问频率最低的键。比如,一些偶尔被访问但访问次数较少的数据,在内存紧张时会被 LFU 策略优先淘汰。
RDB(Redis Database):通过创建数据的快照来持久化数据。可以设置在特定时间间隔内,当数据发生一定数量的变化时,自动将数据保存到硬盘。例如,设置 save 900 1 表示在 900 秒内至少有 1 个键发生变化时,进行一次 RDB 持久化。
AOF(Append Only File):记录所有对 Redis 数据库的写操作命令,并将这些命令追加到文件中。在 Redis 重启时,通过重新执行这些命令来恢复数据。AOF 持久化的安全性更高,但文件体积相对较大。可以通过设置 appendfsync 参数来控制数据同步到硬盘的频率,如 appendfsync everysec 表示每秒同步一次。
客户端分片:在客户端代码中,根据一定的规则(如哈希算法)将不同的键分配到不同的 Redis 实例上。例如,对键进行哈希计算,然后根据哈希值将键映射到不同的实例。
代理分片:使用代理中间件(如 Twemproxy、Codis 等)来管理多个 Redis 实例。客户端只需与代理进行通信,代理会根据配置的规则将请求转发到相应的 Redis 实例上。这种方式对客户端透明,便于管理和维护。