zoukankan      html  css  js  c++  java
  • 【原】Redis分区

    Redis高级篇

    • 分区


    为什么分区?

    Redis中的分区主要有两个目的:

    • 允许用多台机器的内存存放更大的数据集。如果没有分区,那么你只能存放单台机器内存的最大值的数据集。
    • 允许用多核和多台机器提高计算能力和网络带宽。

    分区简单了解

    分区方法

    假设有4个Redis实例(服务器)R0,R1,R2,R3,代表user的许多keys如user:1,user:2..等,那么就有多种方法实现将给定的key映射到对应的Redis服务器上。
    最简单的方式之一是用range partitioning,即将一个范围内的object映射到具体的Redis实例中。例如,将ID从0到1000放到实例R0上,从1001到2000放到R1上。实践中也在用这种方法,然而,它的缺点是映射表,因为Redis中的每个object都需要该表,所以效率低下。
    另一种分区方式是hash partitioning。这种方式不要求key的形式必须是object_name:

    分区缺点

    • 多个keys的操作例如交集不支持。
    • 多个keys的事务不能用。
    • 分区粒度
    • 增加了数据处理的复杂度,比如数据的添加与删除等操作。

    存储数据 or 缓存数据

    如果Redis用来缓存数据,那么用一致性hash是比较容易实现扩展的。
    如果Redis用来存储数据,那么key常对应固定的Redis实例,所以节点必须是固定的并且不能改变。

    使用Redis实现多重复制应注意如下问题:

    • 在新server中启动Redis服务
    • 移动数据并配置新的实例作为集群的slaves节点
    • 停止clients
    • 更新移动的实例和新Server的Ip地址
    • 在新的slave节点上执行SLAVEOF NO ONE命令
    • 重启Clients
    • 最后关闭不再使用的实例

    Redis分区的实现

    Redis Cluster

    Redis Cluster提供自动分片和高可用性的首选方案。
    详情了解Cluster tutorial

    Twemproxy

    Twemproxy是twitter为Memcached和Redis开发的代理。它是单线程的,用c语言编写,运行较快。它支持在多个Redis实例中自动分区,和可选的节点选举方案。
    Twemproxy基本上是一个处于client和Redis实例中的之间层,负责分区的处理。
    详情了解in this antirez blog post

    Clients supporting consistent hashing

    另外一种Twemporxy的实现方式是用一个client实现client端的分区通过一致性hash或类似算法。比较著名的有 Redis-rb  and Predis.

  • 相关阅读:
    必须了解的经典排序算法整理
    浅谈Code Review
    NOIP2018提高组省一冲奖班模测训练(六)
    NOIP2018提高组省一冲奖班模测训练(五)
    NOIP2018提高组金牌训练营——动态规划专题
    poj 3074
    搜索中的剪枝
    bitset骚操作
    NOIP 2017 宝藏
    prim求最小生成树
  • 原文地址:https://www.cnblogs.com/yourarebest/p/5987545.html
Copyright © 2011-2022 走看看