redis持久化:
为什么要进行持久化: 防止数据丢失,确保数据的安全性
RDB:
Save启动方式:
相关指令配置:
dbfilename Drump-6380.rdb 修改本地数据库文件名,默认值为Dump.rdb
dir 存储.rdb文件的路径
rdbcompression yes :是否压缩存储至本数据库的文件
rdbchecksum yes 是否进行RDB格式校验
缺点:Redis单线程是单线程执行的,持久化过程中会造成阻塞。
bgsave启动方式:
会调用fork函数创建子进程执行存储操作,是异步执行的
两种启动方式对比:
save配置的启动方式:
save second changes:满足限定时间范围内key的变化数量达到指定数量就进行持久化。
rdb优点:适合数据备份,二进制文件,存储效率高
rdb缺点:存储数据量大,效率低
会利用fork创建子进程,消耗CPU资源
宕机会带来数据丢失的风险
.RDB文件不适合实时持久化的问题
.RDB文件采用二进制存储,新老版本无法兼容
AOF:RDB是记录数据,而AOF是记录操作过程,能有效避免数据丢失的风险,重启时再重新执行AOF中的命令,达到恢复数据的目的。
AoF写数据过程:写数据时都会同步到AOF缓冲区
AOF写数据三种策略:
always:每次写入都同步到AOF文件中,数据没有误差,但是性能太低,
everysec:每秒将数据同步到AOF文件中,数据准确性高,系统宕机时最多丢失一秒钟的数据
No:由系统控制每次同步到AOF文件的周期,过程不可控
AOF重写:随着不断的写入AOF文件,文件会越来越大,将一些冗余,覆盖的指令合并,同步到新的AOF文件
优点:降低磁盘占用量,提高磁盘利用率
提高持久化效率,降低持久化写时间。
降低磁盘恢复用时,提高数据恢复效率
AOF重写规则:
进程内已经失效的数据,不再写入文件
忽略无效指令,如get指令,对同一数据进行多次set,只保留最后一次。
RDB与AOF选择:
RDB安全性不如AOF会丢数据。
RDB是基于数据的,会记录全部数据,适合做灾难恢复
RDB恢复速度较快,
如果既要保证安全性,又要做数据备份,一般结合使用。
Redis事物:
定义: 一组命令的集合,使该组命令连续的执行,不受其他客户端指令的干扰
事物的基本操作:
开启事物
multi
执行事物:
exec
事物取消
discard
事物的工作流程:
在执行指令时,会判断该指令是否存是事物状态,如果不是就直接执行,如果是的话就将该指令加入队列,直到遇到EXEC就执行该队列,如果遇到disCard就销毁该队列
事物操作的注意事项:
1.如果有语法错误,事物整体都不会执行
2.如果没有语法错误,但是执行时出错,运行错误的指令不会执行,但是事物整体不会回滚。就只能自己手动回滚
Redis锁
定义:多个客户端可能对同一数据进行多次操作,可能导致该数据发生错误,在操作之前锁定该数据,一但发生变化时,就终止该操作。
操作:
witch指令
unwitch指令