1、redis高可用
- redis主从复制
- redis持久化
- 哨兵机制(监听):
监听所有服务器状态(主、从)
投票选举新主节点 - keepalived监听:
监听所有服务器状态(主、从)
重启脚本
宕机自动重启(多次重启失败时发送通知)
2、主从复制实现
不需要配置主服务器
配置从服务器:
slaveof 主ip port
masterauth link link
登录客户端:
redis-server /etc/redis/redis.conf
redis-cli -h 127.0.0.1 -p 6379 -a link
info 可查看到从节点信息
从服务器不能写只能读
集群的搭建:
多加入多台从服务器
3、哨兵机制
哨兵配置:
sentinel.conf:
sentinel monitor mymaster 主ip port 投票策略
sentinel auth-pass mymaster 密码
检测主节点:
sentinel down-after-milliseconds mymaster 1000
从节点个数:
sentinel parallel-syncs mymaster 2
启动哨兵:
redis-server /sentinel.conf --sentinel &
宕机测试:
进入主节点:shutdown
可以看到从节点重新选出主节点
4、redis持久化
默认:
dbfilename dump.rdb
1、RDB持久化
二进制存储
不是实时存储
文件较小
默认开启
持久化策略:单位s
save 900 1
save 300 10
save 60 10000
900s内保存一个key做一次持久化
300s内保存10个做一次持久化
2、AOF 持久化
实时存储
以日志文件储存
文件较大
开启aof:
appendonly yes
日志文件末尾累加
5、redis事务机制
multi:开启事务
操作
exec:提交事务
6、redis发布订阅
发布频道(生产者)
|
创建频道
|
关注频道(订阅频道)
7、redis汇总
redis实现分布式锁
缓存雪崩
缓存击穿
8、Redis
1、多路I/O复用模型
2、模糊key查询SCAN
3、分布式锁
Redis2.6.12
SET KEY value [EX seconds] [PX milliseconds] [NX|XX]
4、持久化RDB\AOF
5、Pineline批量执行指令
6、同步机制
主从同步原理:不自动设置主节点,不提供写入
Sentinel(哨兵)
Redis集群(分片)
9、redis持久化
9.1、RDB:在指定的时间间隔能对你的数据进行快照存储:
# 时间策略:900s内如果有1条是写入命令,触发产生一次快照
save 900 1
save 300 10
save 60 10000
# 文件名称
dbfilename dump.rdb
# 文件保存路径
dir /home/work/app/redis/data/
# 如果持久化出错,主进程是否停止写入
stop-writes-on-bgsave-error yes
# 是否压缩
rdbcompression yes
# 导入时是否检查
rdbchecksum yes
9.2、AOF:记录每次对服务器写的操作,当服务器重启的时候
会重新执行这些命令来恢复原始的数据。
# 是否开启aof
appendonly yes
# 文件名称
appendfilename "appendonly.aof"
# 同步方式
appendfsync everysec
# aof重写期间是否同步
no-appendfsync-on-rewrite no
# 重写触发配置
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 加载aof时如果有错如何处理
aof-load-truncated yes
# 文件重写策略
aof-rewrite-incremental-fsync yes
- 三种模式
always:把每个写命令都立即同步到aof,很慢,但是很安全
everysec:每秒同步一次,是折中方案
no:redis不处理交给OS来处理,非常快,但是也最不安全
10、linux安装redis
安装make:
yum -y install gcc automake autoconf libtool make
yum install gcc gcc-c++
安装:
tar xzf redis-4.0.6.tar.gz
cd redis-4.0.6
make
cd src/
make install
mkdir /etc/redis
cp redis.conf /etc/redis/
redis-server
redis-cli
配置后台运行:
vim /etc/redis/redis.conf
找到daemonize no 改为daemonize yes
redis-server /etc/redis/redis.conf
配置:
库的个数
持久化方式
密码
11、redis实现分布式锁
分布式锁的实现,还是有很多的,有数据库方式的,
有redis分布式锁,有zookeeper分布式锁等等
通过key不能重复实现
Striing key = "ID_Generate_KEY"
// 返回一个1,那就代表了成功
// 返回0,那就代表失败了
setnx key value
// 如果其他操作再去set同样的key会返回0,操作失败
// 释放锁之后,其他操作才能进行
delete key
- 可能会有死锁的问题发生
比如服务器1设置完之后,获取了锁之后,忽然发生了宕机。那后续的删除key操作就没法执行,这个key会一直在redis中存在,其他服务器每次去检查,都会返回0,他们都会认为有人在使用锁,我需要等
- 解决方法给key 设置有效期
1,第一种就是在set完key之后,直接设置key的有效期 “expire key timeout” ,为key设置一个超时时间,单位为second,超过这个时间锁会自动释放,避免死锁。
这种方式相当于,把锁持有的有效期,交给了redis去控制。如果时间到了,你还没有给我删除key,那redis就直接给你删了,其他服务器就可以继续去setnx获取锁。
2,第二种方式,就是把删除key权利交给其他的服务器,那这个时候就需要用到value值了,