Redis 3.0介绍及集群说明

来源:互联网 发布:淘宝价格走势图哪里看 编辑:程序博客网 时间:2024/05/13 13:24

Redis是一个开源、基于C语言、基于内存亦可持久化的高性能NoSQL数据库,同时,它还提供了多种语言的API。近日,Redis 3.0在经过6个RC版本后,其正式版终于发布了。Redis 3.0的最重要特征是对Redis集群的支持,此外,该版本相对于2.8版本在性能、稳定性等方面都有了重大提高。
Redis 3.0正式版相对于RC6版本的改进内容包括:
1.修复了无磁盘情况下的的复制问题;
2.在角色变化后对BLPOP复制进行了测试;
3.改进了prepareClientToWrite()错误处理;
4.移除了dict.c中不再使用的函数。
Redis 3.0版本相对于2.8版本带来的主要新特性包括:
1.实现了分布式的Redis即Redis Cluster,从而做到了对集群的支持;
2.引入了全新的"embedded string" 对象编码方式,从而实现了更少的缓存丢失和在特定的工作负载下速度的大幅提升;
3.AOF重写过程中的 "last write" 操作降低了AOF child -> parent数据传输的延迟大幅提升LRU算法的性能以用于值的失效;
4.WAIT命令能够阻塞传输到指定数量从节点的写操作;
5.实现了对MIGRATE连接缓存的支持,从而大幅提升键值迁移的性能;
6.为MIGARTE新增了参数:COPY和REPLACE;
7.CLIENT PAUSE命令实现了在指定时间内停止处理客户端请求;
8.提高了BITCOUNT、INCR操作的性能;
9.CONFIG SET能够接受不同单位的内存值,如CONFIG SET maxmemory 1gb;
10.调整Redis日志格式。
Redis之父Salvatore Sanfilippo针对Redis 3.0正式版的发布这样说到:“自己相信Redis 3.0将能够完全改变Redis的面貌,人们将认识到Redis是一个全新的东西,它的自动扩展、容错和高可用性都有了很大的改进,从此,它将能够在更大范围内承担更关键的任务。Redis 3.0标志着一个新阶段和新开发模式的开始。以后,大量已经开发的新功能将不再急于进入稳定版本,实际上Redis 3.0就放弃了很多新功能,从而保证用户能够马上使用新的稳定版本。”

Redis集群是一个可以在多个 Redis 节点之间进行数据共享的设施(installation)。
Redis集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 Redis 节点之间移动数据, 并且在高负载的情况下, 这些命令将降低 Redis 集群的性能, 并导致不可预测的行为。
Redis集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。
Redis 集群提供了以下两个好处:
1.将数据自动切分(split)到多个节点的能力。
2.当集群中的一部分节点失效或者无法进行通讯时, 仍然可以继续处理命令请求的能力。
注:
1.Sentinel还在与Cluster并行继续开发中。目前单实例场景下需要HA的话,它还是最佳选择。但长远看,我们会用Cluster解决Sentinel的使用场景。
2.Redis 集群使用数据分片(sharding)而非一致性哈希(consistency hashing)来实现:
一个 Redis 集群包含 16384 个哈希槽(hash slot), 数据库中的每个键都属于这 16384 个哈希槽的其中一个, 集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和 。

3.为了使得集群在一部分节点下线或者无法与集群的大多数(majority)节点进行通讯的情况下, 仍然可以正常运作, Redis 集群对节点使用了主从复制功能: 集群中的每个节点都有 1 个至 N 个复制品(replica), 其中一个复制品为主节点(master), 而其余的 N-1 个复制品为从节点(slave)。
4。Redis 集群不保证数据的强一致性(strong consistency):
在特定条件下, Redis 集群可能会丢失已经被执行过的写命令。

使用异步复制(asynchronous replication)是 Redis 集群可能会丢失写命令的其中一个原因。
Redis 集群另外一种可能会丢失命令的情况是, 集群出现网络分裂(network partition), 并且一个客户端与至少包括一个主节点在内的少数(minority)实例被孤立。
5.Redis 集群的键空间被分割为 16384 个槽(slot), 集群的最大节点数量也是 16384 个。推荐的最大节点数量为 1000 个左右。

转至:http://www.infoq.com/cn/news/2015/04/redis-3-release

参考文档:
1.官方集群文档:规范与教程
英文:
http://redis.io/topics/cluster-spec
http://redis.io/topics/cluster-tutorial
中文:
http://redis.readthedocs.org/en/latest/topic/cluster-spec.html
http://redis.readthedocs.org/en/latest/topic/cluster-tutorial.html
2.Redis 3.0官方文档中文翻译

0 0