本文主要分析了Redis的几种常见的使用方式及其优缺点。一、常用的使用方法Redis的几种常用的使用方法包括:Redis单副本;Redis多副本(主从);Redis哨兵(哨兵);集群;Redis自研。二、各种使用方式的优缺点1、Redis单副本Redis单副本采用单Redis节点部署架构。没有备份节点实时同步数据,不提供数据持久化和备份策略。适用于数据可靠性要求不高的场合。纯缓存业务场景。优点:架构简单,部署方便;性价比高:使用缓存时不需要备节点(单实例的可用性可以通过supervisor或者crontab来保证),当然为了满足业务的高可用,也可以牺牲一个备节点,但一次只有一个实例对外提供服务;高性能。缺点:数据可靠性无法保证;使用缓存并重新启动进程后数据丢失。即使有备用节点解决高可用,仍然无法解决缓存预热问题,不适合对数据可靠性要求高的业务;高性能受限于单核CPU的处理能力(Redis是单线程机制),CPU是主要瓶颈,适合操作命令简单、排序少、计算量少的场景。您也可以考虑改用Memcached。2、Redis多副本(master-slave)Redis多副本采用master-slave(replication)部署结构。与单副本相比,最大的特点是主从实例之间的数据实时同步,并提供数据持久化和备份策略。主从实例部署在不同的物理服务器上。根据公司基础环境配置,可同时对外提供服务和读写分离策略。优点:可靠性高:一方面采用双机主备架构,当主库出现故障时可以自动切换主备,并推动从库为主库提供服务,保证服务的顺利运行;另一方面,启用数据持久化优化功能,合理配置备份策略,有效解决数据误操作、数据异常丢失等问题;读写分离策略:从节点可以扩展主库节点的读能力,有效应对大并发读操作。缺点:故障恢复复杂。如果没有RedisHA系统(需要开发),当主库节点出现故障时,需要手动提升一个从节点为主节点,需要通知业务方更改配置,其他从库节点需要复制新的主库节点需要全程人工干预,比较繁琐;主库写入能力受限于单机,可以考虑分片;主库存储容量受限于单机,可以考虑鼠兔;nativereplication的缺点在早期版本中也会更加突出,例如:Redis复制中断后,Slave会发起psync。如果此时同步不成功,则会进行全量同步。主库进行全量备份时,可能会造成毫秒级或秒级的卡顿;并且由于COW机制,极端情况下主库内存溢出,程序异常退出或崩溃;主库节点生成的备份文件导致服务器磁盘IO和CPU(压缩)资源的消耗;发送几千兆的备份文件,导致服务器出口带宽激增,请求受阻。建议升级到最新版本。3、Redis哨兵(Sentinel)Redis哨兵是社区版推出的原生高可用解决方案。其部署架构主要包括两部分:RedisSentinel集群和Redis数据集群。其中,RedisSentinel集群是由多个Sentinel节点组成的分布式集群,可以实现故障发现、故障自动转移、配置中心和客户端通知。RedisSentinel的节点数要满足2n+1的奇数(n>=1)。优点:RedisSentinel集群部署简单;可以解决Redis主从模式下的高可用切换问题;非常方便的实现Redis数据节点的线性扩展,轻松突破Redis自身的单线程瓶颈,可以极大的满足Redis业务的大容量或者高性能需求;可以实现一组Sentinel来监控一组Redis数据节点或者多组数据节点。缺点:部署较Redis主从模式复杂,原理理解较繁琐;资源浪费,Redis数据节点中的slave节点作为备份节点,不提供服务;RedisSentinel主要是针对Redis数据节点中master节点的高可用切换,Redis数据节点的故障判断有两种:主观下线和客观下线。对于Redis从节点,对节点进行主观下线操作,不进行故障转移。不能解决读写分离的问题,实现起来也比较复杂。建议:如果要监控同一个业务,可以选择Sentinel集群监控多组Redis数据节点,或者选择Sentinel方案监控一组Redis数据节点。sentinelmonitor
