Redis-序列化和存储模式

Posted yuaosun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis-序列化和存储模式相关的知识,希望对你有一定的参考价值。

Redis中数据存储模式有2种:cache-only,persistence;
? cache-only即只做为“缓存”服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在“数据恢复”的手段,是一种安全性低/效率高/容易扩展的方式;
? persistence即为内存中的数据持久备份到磁盘文件,在服务重启后可以恢复,此模式下数据相对安全。
对于persistence持久化存储,Redis提供了两种持久化方法:
    ? Redis DataBase(简称RDB)

      rdb更像是一个定时任务,在固定的时间点通过单独的子进程来进行持久化,主进程不进行任何IO操作,在持久化结束后用这个临时文件去替换上次的的持久文件,但是一旦在持久化过程中发生故障,此期间的数据将会丢失.Redis默认开启的是此模式,此模式性能更高其使用数据快照的方式也更适合目前主流开发.

  redis.conf的设置参数为:

#dbfilename:持久化数据存储在本地的文件
dbfilename dump.rdb
#dir:持久化数据存储在本地的路径,如果是在/redis/redis-3.0.6/src下启动的redis-cli,则数据会存储在当前src目录下
dir ./
##snapshot触发的时机,save <seconds> <changes>  
##如下为900秒后,至少有一个变更操作,才会snapshot  
##对于此值的设置,需要谨慎,评估系统的变更操作密集程度  
##可以通过“save “””来关闭snapshot功能  
#save时间,以下分别表示更改了1个key时间隔900s进行持久化存储;更改了10个key300s进行存储;更改10000个key60s进行存储。
save 900 1
save 300 10
save 60 10000
##当snapshot时出现错误无法继续时,是否阻塞客户端“变更操作”,“错误”可能因为磁盘已满/磁盘故障/OS级别异常等  
stop-writes-on-bgsave-error yes  
##是否启用rdb文件压缩,默认为“yes”,压缩往往意味着“额外的cpu消耗”,同时也意味这较小的文件尺寸以及较短的网络传输时间  
rdbcompression yes  

  

 

    ? Append-only file (简称AOF)

aof,每秒向日志文件尾部追加数据和对数据的操作的指令,更加的安全可靠,即使redis发生故障,也只会丢失1s的数据,日志文件若不完整也可以使用redis-check-aof来进行修复.并且可以对日志文件进行操作删除不必要的指令和数据.AOF中的内容是字符串还挺方便理解的......但是AOF文件会比RDB文件大许多恢复速度会慢上许多

Redis默认是关闭AOF的需要更改配置文件来开启 reds.conf:appendonly yes

##此选项为aof功能的开关,默认为“no”,可以通过“yes”来开启aof功能  
##只有在“yes”下,aof重写/文件同步等特性才会生效  
appendonly yes  
##指定aof文件名称  
appendfilename appendonly.aof  
##指定aof操作中文件同步策略,有三个合法值:always everysec no,默认为everysec  
appendfsync everysec  
##在aof-rewrite期间,appendfsync是否暂缓文件同步,"no"表示“不暂缓”,“yes”表示“暂缓”,默认为“no”  
no-appendfsync-on-rewrite no  
##aof文件rewrite触发的最小文件尺寸(mb,gb),只有大于此aof文件大于此尺寸是才会触发rewrite,默认“64mb”,建议“512mb”  
auto-aof-rewrite-min-size 64mb  
##相对于“上一次”rewrite,本次rewrite触发时aof文件应该增长的百分比。  
##每一次rewrite之后,redis都会记录下此时“新aof”文件的大小(例如A),那么当aof文件增长到A*(1 + p)之后  
##触发下一次rewrite,每一次aof记录的添加,都会检测当前aof文件的尺寸。  
auto-aof-rewrite-percentage 100  

如果缓存中的数据会经常变更aof会造成很大的磁盘负担.

 

当然,两种模式可以共同开启(不推荐)

在当前网络环境和物理环境都稳定的情况下还是推荐使用rdb恢复起来速度快,当然也可以master使用AOF确保数据完整性,作为备份的第一选择.而slave作快速响应客户端请求的角色使用rdb.





以上是关于Redis-序列化和存储模式的主要内容,如果未能解决你的问题,请参考以下文章

Redis的持久化机制 (RDB&amp;amp;AOF&amp;amp;混合模式)

Redis实现分布式锁(设计模式应用实战)

Redis实现分布式锁(设计模式应用实战)

go-redis 基于beego正确使用序列化存储数据和反序列化获取数据

redis缓存怎么存储对象

Redis存储对象序列化和反序列化