Redis教程

关于Redis的一些问题

本文主要是介绍关于Redis的一些问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
  • 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分布式集群解决方案,主要解决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节点对外服务
        • 哨兵领导者向剩余的从节点发送命令,让它们成为新主节点的从节点。
        • 哨兵节点集合会将原来的主节点更新为从节点,当其恢复之后命令它去复制新的主节点的数据

 

这篇关于关于Redis的一些问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!