- Redis
- 什么是Redis
- Redis是一个完全开源的并遵守BSD协议的高性能键值数据库
- Redis主要是做什么的?
- 因为很多语言都支持Redis,也因为Redis交换数据很快,在服务器中经常用来存储一些需要频繁调取的数据,节省内存开销,也极大的提升了速度。将一些热点数据存储到Redis中,用的时候直接从内存取,也极大的提升了速度和节约了服务器的开销
- 会话缓存
- 消息队列
- 排行榜和计数
- 订阅发布消息
- 列表
- 开发人员应该如何配置和使用Redis(这个其实以前在我的blogs里写过啦)
-
- Redis的部署模式(单点、主从、哨兵)
- 单机模式
- 【优】单机模式具有架构简单、部署方便、高性价比及高性能的优点;
- 【劣】
- 但其高性能受限于CPU的处理能力,且不保证数据的可靠性;
- 同时该模式不适用于生产,如果发生宕机就会导致所有连接redis的服务发生缓存失效引起雪崩
-
- 主从模式
- 【优】
- 主从模式采用主从部署结构,相较于但副本而言最大的特点就是主从间数据实时同步,并且提供数据持久化和备份策略。
- 因为采用双机主备架构,所以当主库出现故障时自动进行主备切换,从库升级为主库;
- 另一方面,开启数据持久化功能和配置合理的备份策略,能有效的解决数据误操作和数据异常丢失的问题
- 【缺】
-
- 故障恢复复杂,如果没有redis HA的话,故障时需要手动升级从节点;
- 主库的读写能力受到单机的限制;
- 主库的存储能力受到单机的限制
- 【优】
- 主从模式
-
- 哨兵模式
- 哨兵模式是社区版本推出的原生高可用方案。其中部署架构主要redis sentinel集群和redis 数据集群构成
- Redis sentinel集群是由若干sentinel节点组成的分布式集群,可以实现故障发现、故障自动转移、配置中心和客户端通知
- Redis sentinel的节点数量要满足2n+1(n>=1)的奇数个
- 【优】
-
- Redis sentinel集群部署简单,能够解决redis主从模式下高可用切换问题;
- 很方便实现redis数据节点的线性扩展从而突破单线程瓶颈,满足redis大容量或高性能业务要求
- 【缺】
-
- 相对于redis主从模式复杂,原理理解较繁琐;
- 资源浪费,Redis 数据节点中 slave 节点作为备份节点不提供服务;
- 不能解决读写分离问题,实现起来相对复杂
- 哨兵模式是社区版本推出的原生高可用方案。其中部署架构主要redis sentinel集群和redis 数据集群构成
- 哨兵模式
-
- 集群模式
- 集群模式是社区版推出的redis分布式集群解决方案,主要解决redis分布式方面的需求;如:当遇到单机内存,并发和流量等瓶颈的时候,Redis Cluster 能起到很好的负载均衡的目的
- Redis cluster集群节点最小配置六个节点以上(3主3从),其中主节点主要提供读写操作,从节点主要作为备用节点,只供故障转移使用;redis cluster采用虚拟槽分区,所有的键根据哈希函数映射到0-16383的整数槽内,每个节点负责维护一部分槽和槽所映射的键值数据
- 【优】
-
- 集群模式没有中心架构,数据按照slot存储分布在多个节点,且节点间数据共享,可动态调整数据分布;
- 扩展性表现在可线性的扩展到1000+节点,节点可以动态添加或删除;
- 高可用性则体现在部分节点不可用的时,集群仍可用。通过增加 Slave 做 standby 数据副本,能够实现故障自动 failover,节点之间通过 gossip 协议交换状态信息,用投票机制完成 Slave 到 Master 的角色提升;
- 【缺】
-
- client实现复杂,客户端的不成熟影响业务的稳定性;
- 数据通过异步复制不保证数据的强一致性;
- 多个业务使用同一套集群时,无法根据统计区分冷热数据,资源隔离性较差,容易出现相互影响的情况;
- Key 批量操作限制,只支持多 key 在同一节点上的事务操作;
- Key 事务操作支持有限,只支持多 key 在同一节点上的事务操作;
- Key 作为数据分区的最小粒度,不能将一个很大的键值对象如 hash、list 等映射到不同的节点
- 不支持多数据库空间,单机下的 redis 可以支持到 16 个数据库,集群模式下只能使用 1 个数据库空间
- 集群模式
-
- Redis运维(启动、停止、扩容、缩容、备份)
- 高可用方案
-
- 主从模式
- 主服务器返回+fullresync <runid> <offset>回复,表示主服务器要求与从服务器进行完整的数据全量同步操作。其中,runid是当前主服务器运行id,而offset是当前主服务器的复制偏移量。
- 如果主服务器应答+continue,那么表示主服务器与从服务器进行部分数据同步操作,将从服务器缺失的数据同步过来即可。
- 如果主服务器应答-err,那么表示主服务器版本低于2.8,识别不了psync命令,此时从服务器将向主服务器发送sync命令,执行完整的全量数据同步
- 主从模式
-
-
- 哨兵模式
- redis使用一组哨兵(sentinel)节点来监控主从redis服务的可用性。
- 一旦发现redis主节点失效,将选举出一个哨兵节点作为领导者(leader)。
- 哨兵领导者再从剩余的从redis节点中选出一个redis节点作为新的主redis节点对外服务
- 哨兵领导者向剩余的从节点发送命令,让它们成为新主节点的从节点。
- 哨兵节点集合会将原来的主节点更新为从节点,当其恢复之后命令它去复制新的主节点的数据
- 哨兵模式
-