【原】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.
【原】Redis分区的更多相关文章
- Redis分区
数据是怎样分布在多个Redis实例上的 分区是将你的数据分布在多个Redis实例上,以至于每个实例只包含一部分数据. 为什么分区是有用的呢 Redis分区有两个主要目标: 它允许更大的数据库,用许多计 ...
- Redis 分区
分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集. 分区的优势 通过利用多台计算机内存的和值,允许我们构造更大的数据库. 通过多核和多台计算机,允许我们扩展计算能力:通 ...
- Redis分区探究
Redis比较好的分区算法是采用Hash分区算法 也就是我们可以将所有的server例如:user1,user2,user3.通过hash函数将key转化为一个数字然后求余找到需要存储的server. ...
- [原]Redis主从复制各种环境下测试
Redis 主从复制各种环境下测试 测试环境: Linux ubuntu 3.11.0-12-generic 2GB Mem 1 core of Intel(R) Core(TM) i5-3470 C ...
- [原]Redis详细配置介绍
Redis详细配置介绍 # redis 配置文件示例 # 当你需要为某个配置项指定内存大小的时候,必须要带上单位, # 通常的格式就是 1k 5gb 4m 等酱紫: # # 1k => 1000 ...
- [原]Redis使用场景及使用经验
Redis is an open source (BSD licensed), in-memory data structure store! 欢迎转载,转载请注明出处 刚刚结束一个游戏类的活动项目, ...
- redis该如何分区-译文(原创)
写在最前,最近一直在研究redis的使用,包括redis应用场景.性能优化.可行性.这是看到redis官网中一个链接,主要是讲解redis数据分区的,既然是官方推荐的,那我就翻译一下,与大家共享. P ...
- 【转载】Redis多实例及分区
主要看的这篇文章 http://mt.sohu.com/20160523/n451048025.shtml edis Partitioning即Redis分区,简单的说就是将数据分布到不同的redis ...
- redis基础操作~~数据备份与恢复、数据安全、性能测试、客户端连接、分区
数据备份与恢复 数据备份redis save 命令用于创建当前数据库的备份. redis 127.0.0.1:6379> SAVE OK 该命令将在 redis 安装目录中创建dump.rdb文 ...
随机推荐
- 关于sqlmap无法打开的问题解决办法
sqlmap无法打开这个问题困扰了我几天,今天才从一个论坛的视频教程里看到这个办法,有可能对其他有些情况依旧没用,但是希望和我一样状况的人看到这篇文章,能收到一些启发 我之前百度了很久,google了 ...
- HTML元素大小和位置相对于谁的问题
一.如果元素的position属性值为absolute,那么此时分为两种情况: 1. 父级(包括直接父级和间接父级)元素中没有定义position属性(即默认属性static),那么该元素会参照页面, ...
- pthread_create用法
linux下用C开发多线程程序,Linux系统下的多线程遵循POSIX线程接口,称为pthread. #include <pthread.h> int pthread_create(pth ...
- mysql查看表的结构
①mysql > show create table 表名; ②mysql > desc 表名; ③mysql > describe 表名;
- ZooKeeper 安装部署及hello world
ZooKeeper 安装部署及hello world 先给一堆学习文档,方便以后查看官网文档地址大全: OverView(概述)http://zookeeper.apache.org/doc/r3. ...
- Qt的版本历史
发展史 Qt的第一个商业版本于1995年推出,随后Qt的发展就很快了,下面是Qt发展史上的一 些里程碑,从之前的Qt1.x开始到现在的Qt5.x. Qt1-3 版本 发布日期 1.40 10 July ...
- adb开启不了解决方案
原文地址: adb开启不了解决方案 - vaecer - 博客频道 - CSDN.NET http://blog.csdn.net/vaecer/article/details/45894643 ...
- HDU1875——畅通工程再续(最小生成树:Kruskal算法)
畅通工程再续 Description相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当 ...
- Civil3D二次开发 启动Civil3D异常
用Com方式启动Civil3D时,经常会在第一次启动时出现各种异常. 1. RPC_E_CALL_REJECTED 0x80010001 被呼叫方拒绝接收呼叫 解决方案:外部程序通过COM启动Auto ...
- java截取url中的值
Map<String, Object> urlSplit(String data){ StringBuffer strbuf = new StringBuffer(); StringBuf ...