zoukankan      html  css  js  c++  java
  • 06 Redis-cluster

      redis官方声称可以达到10万/秒,每秒执行10万条命令,假如业务需要每秒100万的执行命令呢?一台服务器内存正常是16~256G,假如你的业务需要500G内存,新浪微博作为世界上最大的redis存储,就超过1TB的数据,去哪买这么大的内存条?各大公司有自己的解决方案,推出各自的集群功能,核心思想都是将数据分片(sharding)存储在多个redis实例中,每一片就是一个redis实例。

    1 各大企业集群方案:
    2 twemproxy由Twitter开源
    3 Codis由豌豆荚开发,基于GO和C开发
    4 redis-cluster官方3.0版本后的集群方案

      解决方案是:

        考虑分布式,加机器,把数据分到不同的位置,分摊集中式的压力,一堆机器做一件事。

    客户端分片:

      redis3.0集群采用P2P模式,完全去中心化,将redis所有的key分成了16384个槽位,每个redis实例负责一部分slot,集群中的所有信息通过节点数据交换而更新。

    redis实例集群主要思想是将redis数据的key进行散列,通过hash函数特定的key会映射到指定的
    redis节点上

    原理图:

    数据分布理论:

      分布式数据库首要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整个数据的一个子集。

      常见的分区规则有哈希分区和顺序分区。Redis Cluster采用哈希分区规则

        (1)节点取余分区

        (2)一致性哈希分区

        (3)虚拟槽分区(redis-cluster采用的方式)

    1 虚拟槽分区巧妙地使用了哈希空间,使用分散度良好的哈希函数把所有的数据映射到一个固定范围内的整数集合,整数定义为槽(slot)。
    2 
    3 Redis Cluster槽的范围是0 ~ 163834 
    5 槽是集群内数据管理和迁移的基本单位。采用大范围的槽的主要目的是为了方便数据的拆分和集群的扩展,
    6 
    7 每个节点负责一定数量的槽。

     

    工作原理:

      redis客户端任意访问一个redis实例,如果数据不在该实例中,通过重定向引导客户端访问所需要的redis实例

    搭建redis-cluster详情请看  :https://www.cnblogs.com/pyyu/p/9844093.html

  • 相关阅读:
    python运行出现TypeError: super() takes at least 1 argument (0 given)错误
    史上最全Python数据分析学习路径图
    Windows平台Python编程必会模块之pywin32
    PyMySQL的基本使用
    python:让源码更安全之将py编译成so
    最高分是多少
    哪些技术可以用在WEB开发中实现会话跟踪
    自定义输入模板
    JAVA中HashMap和Hashtable区别
    Java中ArrayList与LinkedList的区别
  • 原文地址:https://www.cnblogs.com/a2534786642/p/11146650.html
Copyright © 2011-2022 走看看