今日内容详细
1 持久化方案
redis的所有数据保存在内存中,把内存中的数据同步到硬盘上这个过程称之为持久化
快照:某时某刻数据的一个完成备份
-mysql的Dump
-redis的RDB
写日志:任何操作记录日志,要恢复数据,只要把日志重新走一遍即可
-mysql的Binlog
-Redis的 AOF
1.1 RDB
-方式一:通过命令---》同步操作
save:生成rdb持久化文件
-方式二:异步持久化---》 不会阻塞住其他命令的执行
bgsave
-方式三:配置文件配置--》这个条件触发,就执行bgsave
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir "/root/redis-6.2.9/data"
如果60s中改变了1w条数据,自动生成rdb
如果300s中改变了10条数据,自动生成rdb
如果900s中改变了1条数据,自动生成rdb
1.2 AOF方案
日志不是直接写到硬盘上,而是先放在缓冲区,缓冲区根据一些策略,写到硬盘上
always:redis–》写命令刷新的缓冲区—》每条命令fsync到硬盘—》AOF文件
everysec(默认值):redis——》写命令刷新的缓冲区—》每秒把缓冲区fsync到硬盘–》AOF文件
no:redis——》写命令刷新的缓冲区—》操作系统决定,缓冲区fsync到硬盘–》AOF文件
随着命令的逐步写入,并发量的变大, AOF文件会越来越大,通过AOF重写来解决该问题
本质就是把过期的,无用的,重复的,可以优化的命令,来优化,这样可以减少磁盘占用量,加速恢复速度
auto-aof-rewrite-min-size:500m
auto-aof-rewrite-percentage:增长率
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite yes
1.3 混合持久化
appendonly yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-use-rdb-preamble yes
save ""
2 主从复制原理和方案
可能会有以下问题:
1 机器故障
2 容器瓶颈
3 QPS瓶颈
一主一从,一主多从
做读写分离
做数据副本
提高并发量
一个master可以有多个slave
一个slave只能有一个master
数据流向是单向的,从master到slave,从库只能读,不能写,主库既能读又能写
1 副本(从)库通过slaveof 127.0.0.1 6379命令,连接主库,并发送SYNC给主库
2 主库收到SYNC,会立即触发BGSAVE,后台保存RDB,发送给副本库
3 副本库接收后会应用RDB快照,load进内存
4 主库会陆续将中间产生的新的操作,保存并发送给副本库
5 到此,我们主复制集就正常工作了
6 再此以后,主库只要发生新的操作,都会以命令传播的形式自动发送给副本库
7 所有复制相关信息,从info信息中都可以查到.即使重启任何节点,他的主从关系依然都在
8 如果发生主从关系断开时,从库数据没有任何损坏,在下次重连之后,从库发送PSYNC给主库
9 主库只会将从库缺失部分的数据同步给从库应用,达到快速恢复主从的目的
如果不开有可能,主库重启操作,造成所有主从数据丢失!
-1 命令方式,在从库上执行
slaveof 127.0.0.1 6379
slaveof no one
-2 配置文件方式,在从库加入
slaveof 127.0.0.1 6379
slave-read-only yes
autpass 123456
min-slaves-to-write 1
min-slaves-max-lag 3
3 哨兵高可用
1 多个sentinel发现并确认master有问题
2 选举触一个sentinel作为领导
3 选取一个slave作为新的master
4 通知其余slave成为新的master的slave
5 通知客户端主从变化
6 等待老的master复活成为新master的slave
第一步:先搭建一主两从
第二步:哨兵配置文件,启动哨兵(redis的进程,也要监听端口,启动进程有配置文件)
port 26379
daemonize yes
dir /root/redis/data
bind 0.0.0.0
logfile "redis_sentinel.log"
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
port 26390
daemonize yes
dir /root/redis/data1
bind 0.0.0.0
logfile "redis_sentinel.log"
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
port 26381
daemonize yes
dir /root/redis/data2
bind 0.0.0.0
logfile "redis_sentinel.log"
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
第三步:启动三个哨兵
./src/redis-sentinel ./sentinal_26379.conf
./src/redis-sentinel ./sentinal_26380.conf
./src/redis-sentinel ./sentinal_26381.conf
第四步:停止主库,发现80变成了主库,以后79启动,变成了从库
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性