1. 主从复制
1.1 主从复制介绍
应用层向master中写数据,然后,master将数据复制到slave中
优点:
1. 读写分离, 通过master写数据,通过slave读取数据
2. 容灾的快速恢复: 当一台从服务器挂掉,我们可以快速的到第二台服务器中读取
配置集群,当主服务器挂掉,从机根据优先级自动升级
1.2 主从复制配置
- 创建配置主从复制的文件夹
- 拷贝redis.config的配置文件
- 新建6379,6380,6381的redis配置文件,配置一主两从
- 在三个配置文件中写入基本配置
include /root/myredies/redis.conf
pidfile "/var/run/redis_6379.pid"
port 6379
dbfilename "dump6379.rdb"
INFO replication 查询主从关系
SLAVEOF 192.168.42.101 6379 设置主从关系
slaveof no one将从机变成主机
哨兵模式自动反客为主
- 配置sentinel.conf文件
sentinel monitor mymaster 192.168.42.101 6379 1 # 1表示只需要一个slave同意就可以升级为master
- 启动 redis-sentinel ./sentinel.conf
2. 集群
2.1 配置文件
cluster-enabled yes #开启集群
cluster-config-file nodes-6381.conf #设置配置文件名称
cluster-node-timeout 15000 #超时时间
2.2 启动redis
2.3 创建集群
redis-cli --cluster create --cluster-replicas 1 ***.101:6379 ***101:6380 ***.101:6381 ***101:6389 ***101:6390 ***101:6391
连接redis : redis-cli -c -p port
cluster nodes查看节点信息
mset name{user} chay age{user} 26 gender{user} 1 设置多个值,user为组
查看当前键所在插槽 cluster keyslot user
cluster countkeysinslot 5474 返回当前插槽所存在多少个键
CLUSTER GETKEYSINSLOT 5474 3 返回三5474插槽中的三个键
3. 缓存穿透
- 当应用服务器的压力突然变大了。
- redis命中率降低
- 一直查询数据库
1. redis查询不到数据
2. 出现了很多非正常url访问
解决方案:
1 对控制进行缓存
2 设置可访问的名单,借助bitmap
3 采用布隆过滤器 命中率不好
4 对redis进行实时监控, 如果一个ip在一直访问一个错误的名单,那么我们设置黑名单
4.缓存击穿
- 数据库访问压力瞬时增加
- redis 里边并没有出现大量的key过期
- redis正常的运行状态
原因: redis中某个key过期,但是大量访问这个key
解决方案:
1. 预先设置热门数据
2. 实时调整,调整key的过期时间
3. 使用锁
5. 缓存雪崩
在极少的时间段,查询大量key的集中过期情况
解决方案:
1. 多重缓存 nginx, redis, ehcache
2. 锁或者队列
3. 设置过期标志更新缓存
4. 将缓存失效时间分散开