【原】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文 ...
随机推荐
- jquery mobile validation
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...
- Spring整合freemarker发送邮件
转载:http://blog.csdn.net/zdp072/article/details/32745335 分类: freemarker spring 2014-06-20 23:39 752人阅 ...
- js 中多维数组的深拷贝的多种实现方式
因为javascript分原始类型与引用类型(与java.c#类似).Array是引用类型,所以直接用=号赋值的话,只是把源数组的地址(或叫指针)赋值给目的数组,并没有实现数组的数据的拷贝.另外对一维 ...
- NFC(11)MifareUltralight格式规范及读写示例
注意 MifareUltralight 不支三种过滤方式之一,只支持第四种(用代码,activity singleTop ) 见 NFC(4)响应NFC设备时启动activity的四重过滤机制 Mi ...
- 【HDOJ】4336 Card Collector
概率DP的题目,一直就不会做这类题目.dp[s]表示状态为s的时候再买多少张牌可以买全,表示的是一个期望值.dp[s] = 1 + P(empty) * dp[s] + P(had) * dp[s] ...
- git rebase无法处理的问题
在进行代码整理的时候,遇到了冲突 现在chucklu_master分支指向这个commit SHA-1: 88fa1ee9263402626d85b5a4362e1b620935953f * remo ...
- Struts2国际化文件乱码解决
方法1:使用native2ascii进行编码转换 代码如下: native2ascii -encoding UTF-8 GlobalMessages.properties NewGlobalMessa ...
- JADE平台入门
相关介绍: JADE(Java Agent Development Framework,Java智能体开发框架) 用途: Java智能体开发框架 开发者: TILAB 主要功能: AMS.DF.ACC ...
- 函数fsp_seg_inode_page_get_nth_inode
#define FSEG_ARR_OFFSET (FSEG_PAGE_DATA + FLST_NODE_SIZE) #define FSEG_PAGE_DATA FIL_PAGE_DATA #defi ...
- C#中判断一个网址是否可以打开
public static void GetPage(String url) { try { // Creates an HttpWebRequest for the specified URL. H ...