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.

【原】Redis分区的更多相关文章

  1. Redis分区

    数据是怎样分布在多个Redis实例上的 分区是将你的数据分布在多个Redis实例上,以至于每个实例只包含一部分数据. 为什么分区是有用的呢 Redis分区有两个主要目标: 它允许更大的数据库,用许多计 ...

  2. Redis 分区

    分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集. 分区的优势 通过利用多台计算机内存的和值,允许我们构造更大的数据库. 通过多核和多台计算机,允许我们扩展计算能力:通 ...

  3. Redis分区探究

    Redis比较好的分区算法是采用Hash分区算法 也就是我们可以将所有的server例如:user1,user2,user3.通过hash函数将key转化为一个数字然后求余找到需要存储的server. ...

  4. [原]Redis主从复制各种环境下测试

    Redis 主从复制各种环境下测试 测试环境: Linux ubuntu 3.11.0-12-generic 2GB Mem 1 core of Intel(R) Core(TM) i5-3470 C ...

  5. [原]Redis详细配置介绍

    Redis详细配置介绍 # redis 配置文件示例 # 当你需要为某个配置项指定内存大小的时候,必须要带上单位, # 通常的格式就是 1k 5gb 4m 等酱紫: # # 1k => 1000 ...

  6. [原]Redis使用场景及使用经验

    Redis is an open source (BSD licensed), in-memory data structure store! 欢迎转载,转载请注明出处 刚刚结束一个游戏类的活动项目, ...

  7. redis该如何分区-译文(原创)

    写在最前,最近一直在研究redis的使用,包括redis应用场景.性能优化.可行性.这是看到redis官网中一个链接,主要是讲解redis数据分区的,既然是官方推荐的,那我就翻译一下,与大家共享. P ...

  8. 【转载】Redis多实例及分区

    主要看的这篇文章 http://mt.sohu.com/20160523/n451048025.shtml edis Partitioning即Redis分区,简单的说就是将数据分布到不同的redis ...

  9. redis基础操作~~数据备份与恢复、数据安全、性能测试、客户端连接、分区

    数据备份与恢复 数据备份redis save 命令用于创建当前数据库的备份. redis 127.0.0.1:6379> SAVE OK 该命令将在 redis 安装目录中创建dump.rdb文 ...

随机推荐

  1. yum安装gcc

    如果服务器是自己的,并且机器就在身边,那什么都不用说了,缺少gcc顶多就是重新放入安装盘,把开发工具包安装上.但是如果是租的服务器,托管服务 方那帮人又搞不懂你说的啥子gcc,要安装gcc实在是太麻烦 ...

  2. js获取节点

    demo1: <!-- <div id="test" v="1">你好</div> --> // console.log(t ...

  3. 团体程序设计天梯赛-练习集L2-008. 最长对称子串

    L2-008. 最长对称子串 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 对给定的字符串,本题要求你输出最长对称子串的长度. ...

  4. Howto: Deploy VC2008 apps without installing vcredist_x86.exe

    There are several reasons for xcopy deployment of an application (also known as application local). ...

  5. Java 方法覆盖和方法重载

    方法重载(overloaded),要求方法的名称相同,参数列表不相同. 方法覆盖(override),要求①方法名相同,②参数列表相同,③返回值相同 如果是方法覆盖,要注意以下几种情况: 1.子类方法 ...

  6. 玩转redis

    http://www.cnblogs.com/huangxincheng/p/5002794.html

  7. xcode 树形管理 cocos2d-x的资源

    把资源以目录的形式加入xcode中, 同时, 在加入时, 选择"Create Folder References for any  added folders", 而不是默认的&q ...

  8. Linux内核中的中断

    http://blog.csdn.net/weiqing1981127/article/details/8298585 中断处理程序是被内核调用来响应中断的,它运行在中断上下文,中断处理程序是上半部, ...

  9. 关于ckeditor添加的class都会被清除掉的问题

    在源码中输入ul,并且带有class,然后点击源码,到可视化界面 结果显示为aaa,再点看源码,查看HTML源代码 解决方法: 添加配置 config.allowedContent = true 这个 ...

  10. 【HDOJ】4343 Interval query

    最大不相交集合的数量.思路是dp[i][j]表示已经有i个不相交集合下一个不相交集合的最右边界.离散化后,通过贪心解. /* 4343 */ #include <iostream> #in ...