1.Redis的五大数据结构
2.Redis的持久化
Redis DataBase
RDB,简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上
自动触发
Redis版本6之后发生改变......(RDB快照的频数)
注意:不可以把备份文件 dump.rdb 和 生成Redis的服务器发在同一台机器,防止物理机器损坏备份文件也丢失
注意:flushall/flushdb 和 退出Redis操作都会触发 rdb 规则
手动触发
save 和 bgsave 命令
SAVE 直接调用 rdbSave函数 ,阻塞 Redis 主进程,直到保存完成为止。
bgsave:异步保存数据到磁盘(适合线上)
RDB的优缺点
优点:①、只有一个文件 dump.rdb,方便持久化。
②、容灾性好,一个文件可以保存到安全的磁盘
③、使用单独子进程来进行持久化,主进程不会进行任何 IO 操作,保证了 redis 的高性能
④、4.相对于数据集大时,比 AOF 的启动效率更高
缺点:数据安全性低(若持久化阶段redis故障,会导致数据丢失)
Append Only File
原理:日记 记录所有的写操作
三种写回策略
重写机制
:就是AOF文件压缩,只保留可以恢复数据的最小指令集
AOF的优缺点
优点:1、数据安全(appendfsync属性,可以每秒进行一次操作)
2、通过 append 模式写文件,即使中途服务器宕机,可以通过 redis-check-aof 工具解决数据一致性问题。
3、AOF 机制的 rewrite 模式(压缩文件)
缺点:1、AOF 文件比 RDB 文件大,且恢复速度慢。
2、数据集大的时候,比 rdb 启动效率低。
RDB + AOF
组合的持久化 AOF 主导 !
那可不可以只使用AOF?
--->建议不要,因为AOF保存的在不断变化(或者说只取最新最有效的记录),而RDB保存的比较完全,可以把RDB看作数据库的备份
纯缓存模式
关闭-RDB和AOF--------------------->纯缓存模式
sava " " :禁用RDB
appendonly no:禁用AOF
但是仍可以手动触发RDB,AOF持久化
3.Redis复制机制
Redis的主从复制的主要作用:
①读写分离:主机master只写,从机slave只读(主从结构,一是为了纯粹的备份,二是为了提升读性能)---负载均衡
②故障恢复:主机宕机,从机可以快速故障恢复
优化:主从架构中,可以关闭主服务器的持久化操作,只对从服务器保持持久化操作,可以提升主服务器的性能!
4.分布式锁
setnx(SET if Not Exists)
抢锁-判断-释放
setnx--->争抢锁,抢到之后,再用 expire 给锁加一个过期时间防止锁忘记了释放
抢锁:RLock -----> tryLock(等待时间,锁释放时间,时间的类型) :尝试获取锁--> setnx?
--->等待时间设置为0,即只抢一次锁,抢不到则放弃(分布式-缓存预热)
判断是否是当前线程的锁:RLock ------> isHeldByCurrentThread() 判断是否是此时线程的锁
释放锁:注意释放锁要写在 finally 中(若中途出现异常,锁最后还是会释放)
看门狗解决锁逾期问题
续期机制:RLock -----> tryLock(等待时间,锁释放时间,时间的类型)
锁释放时间改为 -1 !!!