哨兵
sentinel 系统可以监视一个或者多个 redis master 服务,以及这些 master 服务的所有从服务;当某个 master 服务下线时,自动将该 master 下的某个从服务升级为 master 服务替代已下线的 master 服务继续处理请求。
集群模式下的请求
集群模式是去中心化的,随便请求到哪个 master 后,判断 key 属于哪个 hash 槽以及在哪个机器上,进行请求路由。
redis 热点 key
单机 QPS 瓶颈后,可以用集群分片,来分担请求压力,但是如果一个 key 就是在某一个分片上形成了热点 key 怎么办。
对 key 的值在业务上拆分,使其分散到更多的分片上。
或者如果 key 对应的数据允许有一定的误差,可以将该值存在进程内存里,做二级缓存,定时同步 redis 即可。
查看大 key
redis-cli -h 127.0.0.1 -p 6379 --bigkeys
使用 scan 扫描,对性能影响较小
查看状态
redis-cli -h 127.0.0.1 -p 6379 --stat -i 3
-i 3 每隔 3 秒输出一次
re-hash 过程
数据结构里存放了两个 hash 结构,一个是当前的,一个是 rehash 时候使用的。
数据从旧结构往新结构迁移,为了不影响查询和插入,是渐进式的,新数据写新结构。
问题
Q:怎么保证高性能、高可用和数据不丢失
使用集群分片保证请求的离散来突破单机 QOS 瓶颈。
使用主从模式保证数据的不丢失。
使用哨兵模式监控 master 可用性,及时提升从服务为主服务,来保证高可用。