Redis持久化弥补默认不存储的缺陷(redis默认不持久化)
Redis是一款开源的关键值(key-value)存储,它可用于存储构造Web应用程序、大规模数据处理系统、游戏排行榜及实时在线分析等场景。它可以很有效地加速你的Web应用,可以作为消息队列的缓存,可以当做一个NoSQL的存储库来使用,还可以有效支持大规模的计算机集群。
由于Redis是一个内存数据库,因此它的默认模式是数据不会被持久化存储的,也就是说,当Redis重新启动时,存储在内存中的数据将全部丢失。受影响的场景包括,Redis平滑重启,Redis宕机重启、REDIS崩溃重启等。这个缺陷将会使得所有数据可能丢失,这显然是一个可怕的问题,因此接下来将介绍Redis持久化,来解决这一问题。
Redis默认是不会持久化存储,这主要是为了保证其高性能,而持久化的职责被交给了使用者,以便于他们根据自己的实际需求决定是否开启持久化。Redis支持两种持久化方式,分别为RDB和AOF,这两种方式可以不同的实现方式,进行持久化。
RDB(Redis数据库)是将Redis的当前所有数据集快照到文件中的一种持久化技术,而AOF(Append Only File) 则是记录所有写操作,并将其保存到文件中,并在Redis重新启动时将其重放到内存中,从而实现恢复数据功能。
为了实现RDB和AOF,可以使用以下配置指令:
// 配置RDB
save “900 1 300 100 60 1000”
// 配置AOF
appendonly yes
// 设置AOF重写策略
auto-aof-rewrite-percentage 100
以上指令中,我们可以配置RDB快照文件的生成条件,按”900 1 300 100 60 1000″这样的配置,“900 1 300 100 60 1000” 表示在900秒内,如果插入了1条记录,又再插入300条记录,又再插入100条记录,又再插入60条记录,那么系统会自动触发一次快照,然后生成一个RDB快照文件。
此外,Redis支持如下配置,可以使用如下代码来设置:
// 设置保存的文件名
db filename dump.redis
// 设置保存的目录
dir /var/redis/
上述代码为RDB快照文件的存储路径设置了文件名dump.redis,subdir参数为路径/var/redis/。类似的,AOF持久化的文件名,我们也可以通过appendfilename参数来设置文件名,同时也可以使用appendfsync参数定义文件写入时的fsync策略,可以设置三种策略,包括:always、everysec、no,分别表示每次写入,每秒执行一次fsync操作以及关闭fsync操作,可以根据实际情况定制适合自己系统的fsync策略。
以上就是Redis持久化的介绍和实现方法,持久化可以非常有效地防止Redis重新启动时数据丢失,可以说是弥补Redis默认不存储的缺陷,因此它一定是Redis技术栈认识到的重要技术。