Redis集群介绍

大家好,我是IT修真院上海分院第6期学员,一枚正直善良的JAVA程序员。

今天给大家分享一下,修真院官网JAVA任务1中,jdbc数据库连接池的原理及分析。

一、背景介绍

redis简介:

redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库,是目前最流行的NoSQL数据库。众多语言都支持Redis,因为Redis交换数据快,所以在服务器中常用来存储一些需要频繁调取的数据,这样可以大大节省系统直接读取磁盘来获得数据的I/O开销,更重要的是可以极大提升速度。

为什么使用redis集群?

1、大型网站应用,热点数据量往往巨大,单台redis实例不能满足需求。

2、单台服务主机的内存资源往往是有限制的,通过横向可伸缩扩展,使用多台主机提供服务,能够获得更好的效果。

3、单redis服务一旦宕机、对系统服务会造成性能巨大损失。为了在大流量访问下提供稳定的业务,集群化是存储的必然形态。

二、知识剖析

关于redis的集群化方案,目前有三种:

1、Twitter开发的twemproxy。

2、豌豆荚开发的codis。

3、redis官方的redis-cluster。

twemproxy架构简单,就是用proxy对后端redis server进行代理,但是由于代理层的消耗性能很低,而且通常涉及多个key的操作都是不支持的,而且本身不支持动态扩容和透明的数据迁移,而且也失去维护,Twitter内部已经不使用了。

使用hash slot方式,将16348个hash slot覆盖到所有节点上,对于存储的每个key值,使用CRC16(KEY)&16348=slot,得到他对应的hash slot,并在访问key时就去找他的hash slot在哪一个节点上,然后由当前访问节点从实际被分配了这个hash slot的节点去取数据。

节点之间使用轻量协议通信,减少带宽占用,性能很高,自动实现负载均衡与高可用。

codis使用的也是proxy思路,但是做的比较好,是这两种之间的一个中间级,而且支持redis命令是最多的,有图形化GUI管理和监控工具,运维友好。


redis-cluste集群原理:

1、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。

2、节点的fail是通过集群中超过半数的节点检测失效时才生效。

3、客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。

4、redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value。


Redis集群中内置了16384个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。


Redis Cluster主从模式

redis cluster 为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点,主节点提供数据存取,从节点则是从主节点拉取数据备份,当这个主节点挂掉后,就会有这个从节点选取一个来充当主节点,从而保证集群不会挂掉。

这样就算主节点挂掉,redis集群也会选择从节点作为新的主节点,保证能够正常提供服务。


redis-cluster投票:容错

1、投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超时(cluster-node-timeout),认为当前master节点挂掉。

2、什么时候整个集群不可用(cluster_state:fail)?2、什么时候整个集群不可用(cluster_state:fail)?

如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完整时进入fail状态。

可以修改cluster-require-full-coverage参数为true,打开集群兼容部分失败。

如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态。


redis集群搭建:

1、下载安装redis

2、ruby环境

3、配置多个redis节点

4、创建集群

三、常见问题及解决方案

若想使用redis自带的脚本搭建集群,ruby版本必须在2.2以上


四、编码实战

五、拓展思考

六、参考文献

https://www.cnblogs.com/yingchen/p/6763524.html

七、更多讨论

PTT连接:PTT

视频连接:视频

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~

直接点击此连接:http://www.jnshu.com/login/1/10985551



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Celery是一个Python分布式任务队列框架,而Redis是一个高性能的键值存储数据库。当它们结合在一起时,可以构建一个强大的分布式任务队列系统。 Celery和Redis集群的结合可以提供以下功能: 1. 异步任务处理:Celery可以将任务异步地发送到Redis集群中,然后由工作节点处理。这样可以避免任务阻塞主线程,提高系统的响应速度。 2. 分布式任务调度:Redis集群可以作为Celery的消息代理,负责存储和传递任务消息。多个Celery工作节点可以从Redis集群中获取任务,并进行并行处理。 3. 任务结果存储:Celery可以将任务的执行结果存储在Redis集群中,以便后续查询和使用。 4. 任务队列监控:Redis集群可以提供监控和管理Celery任务队列的功能,例如查看队列长度、清理过期任务等。 为了搭建Celery和Redis集群,你需要进行以下步骤: 1. 安装和配置Redis集群:根据你的需求,可以选择使用Redis Sentinel或Redis Cluster来搭建Redis集群。配置好集群后,确保所有节点都正常运行。 2. 安装和配置Celery:使用pip安装Celery库,并在Celery配置文件中指定Redis集群的连接信息。 3. 编写任务代码:定义你的任务函数,并使用Celery的装饰器将其注册为Celery任务。 4. 启动Celery工作节点:在每个工作节点上启动Celery的工作进程,它们将从Redis集群中获取任务并执行。 5. 发布和调度任务:在你的应用程序中,使用Celery的API将任务发布到Redis集群中,并设置任务的调度规则。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值