You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Redis服务重启后所有键被清空,如何让列表实现非易失性?

让Redis列表具备非易失性的方法

嘿,刚接触Redis碰到这个问题太正常啦!默认情况下Redis是把数据存在内存里的,一旦服务重启,内存里的所有数据就都没了。要让你的列表重启后还能保留,就得开启Redis的持久化功能,它有两种核心方式,我给你详细说说:

1. RDB持久化(快照方式)

RDB是Redis默认开启的持久化方式,它会定期把内存中的所有数据生成一个快照文件(默认叫dump.rdb)存到磁盘上。重启Redis时,它会加载这个文件恢复数据。

怎么配置/使用:

  • 自动快照:修改Redis配置文件(redis.conf)里的save参数,比如:
    save 60 1000  # 意思是60秒内如果有至少1000个键被修改,就自动生成快照
    save 300 10   # 300秒内至少10个键修改,自动快照
    
    你可以根据自己的需求调整这些阈值,甚至可以设置多个规则。
  • 手动快照:如果想立刻生成快照,在Redis客户端里执行:
    • SAVE:会阻塞Redis服务,直到快照生成完成,适合数据量小的时候用;
    • BGSAVE:后台异步生成快照,Redis可以继续处理请求,推荐日常使用。

优缺点:

  • ✅ 优点:快照文件体积小,数据恢复速度快;
  • ❌ 缺点:如果在两次快照之间Redis意外宕机,这段时间内的数据会丢失,适合对数据完整性要求不是极高的场景。

2. AOF持久化(追加日志方式)

AOF是另一种持久化方式,它会把每一条修改数据的命令(比如LPUSHRPUSH这些操作列表的命令)追加到一个日志文件(默认叫appendonly.aof)里。重启Redis时,它会重新执行日志里的所有命令来恢复数据。

怎么配置/使用:

  • 开启AOF:修改redis.conf里的参数:
    appendonly yes  # 把no改成yes,开启AOF
    
  • 同步策略:可以配置命令同步到磁盘的频率,平衡数据安全和性能:
    appendfsync everysec  # 每秒同步一次,默认选项,最多丢失1秒的数据
    # appendfsync always  # 每次写命令都同步,最安全但性能损耗大
    # appendfsync no      # 交给操作系统决定同步时机,性能最好但最不安全
    
  • 动态开启:如果不想重启Redis,也可以在客户端执行:
    CONFIG SET appendonly yes
    
    然后执行CONFIG REWRITE,把这个配置写入到redis.conf里,避免重启后失效。

优缺点:

  • ✅ 优点:数据安全性更高,默认配置下最多丢失1秒的数据;日志文件可读性强,甚至可以手动修改修复错误;
  • ❌ 缺点:日志文件体积通常比RDB大,数据恢复速度比RDB慢一点。

新手推荐方案

如果你是新手,优先推荐开启AOF持久化,它的数据安全性更有保障,配置也简单。当然你也可以同时开启RDB和AOF,Redis启动时会优先加载AOF文件来恢复数据,这样既兼顾了AOF的安全性,也有RDB的快速恢复能力。

记得修改配置后,要么重启Redis服务,要么用CONFIG SET动态生效并执行CONFIG REWRITE保存配置哦!

内容的提问来源于stack exchange,提问作者user1469712

火山引擎 最新活动