是什么
一个基于内存的key-value数据库,用于快速缓存,实现分布式锁。
优势
读写分离,性能扩展
容灾性高
基本数据类型
String
Hash
List
Set
Zset(有序集合)
实现
A写数据
B\C读数据
BC找A要数据,A不会找BC
需要修改 优先级replica-priority 100,哨兵模式默认优先级高的作为宕机后首选替补主机。
指令 slaveof ip +post
A宕机后,无哨兵 BC 死等,A回来之后
有哨兵 假设b优先级高,b替补成为主机, A 回来之后,主机变从机。
redis的事务
事务是什么呢?
多个命令组合成的命令队列。
命令队列不可拆分
原子性,不可分割 ,要么全部做完,要me不做
一致性:各节点的数据完全相同
隔离性:一个事务的执行不能被其他事务干扰,并发的各个事务互相独立互不干扰。
持久性:事务一旦提交,即实现了数据的持久化,对数据库的改变是永久性的
redis中,不存在 隔离级别概念 但存在隔离性,命令序列化之后按顺序执行
不能保证原子性 :命令错误时,全部不会做。
如果运行错误,不会回滚,执行完的就完了,没执行的也会接着执行,错的叉出去宰了。
redis持久化
持久化会单独创建子进程fork进行操作,
fork子进程复制当前进程一样的进程。
RDB
持久化规则:save 手动保存 60 5 每60s进行5 次 持久化操作
bgsave:异步进行快照。同时可以响应客户端请求
将数据写进临时文件,持久化进程结束替换旧版本文件,
适用
大规模数据恢复
对数据完整没要求
AOF
记录操作,复刻操作来进行数据恢复
三种同步规则
始终同步:redis操作的影子、
每秒同步:每秒记录一次操作,丢失秒数据
no 不做决定,交给操作系统决定。
优势:稳健 数据丢失概率低
劣势 占用磁盘空间大
性能压力
三种模式
主从复制
主机写,从机读主机数据进行同步
一主二从
主机宕机,从机死等
薪火相传
主机宕机 从机可成为下一个从机的master 不具有写能力,但仍然保持数据链接
哨兵开启
监控:心跳检测,是否宕机
故障检测:
一旦主节点被标记为“客观下线”,哨兵会从剩余的从节点中选举一个新的主节点。选举的过程会根据一定的规则和优先级进行,确保选出的新主节点是可用的。一旦新的主节点选出,哨兵会通知所有其他哨兵和客户端关于主节点的变化。
与其他哨兵共享信息,甲看a宕机了,乙说没宕机,丙也说a没有宕机,那么出问题可能不是a而是哨兵
主机宕机后,从机选主规则:优先级、数据偏移量(数据完整性)、运行最长时间的节点作为新主机。