RedisCluster构建批量操作探讨
RedisCluster构建批量操作探讨
前言
众所周知,jedis仅支持redis standalone mset,mget等批量操作,在最新的redis cluster中是不支持的,这个和redis cluster的设计有关,将不同的实例划分不同的槽。不同的key会落到不同的槽上,所在的实例也就不同,这就对jedis的批量操作提出问题,即无法同时支持多个实例上的批量操作。(理解可能不是很深入,希望有人看到可以指教一下)
分布式储存产品存储方式
在分布式存储产品中,哈希存储与顺序存储是两种重要的数据存储和分布方式,这两种方式不同也直接决定了批量获取数据的不同,所以这里需要对这两种数据的分布式方式进行简要说明:
- hash分布:
hash分布应用于大部分key-value系统中,例如memcache, redis-cluster, twemproxy,即使像MySQL在分库分表时候,也经常会用user%100这样的方式。
hash分布的主要作用是将key均匀的分布到各个机器,所以它的一个特点就是数据分散度较高,实现方式通常是hash(key)得到的整数再和分布式节点的某台机器做映射,以redis-cluster为例子:
问题:和业务没什么关系,不支持范围查询。 - 顺序分布
- 两种分布方式的比较:
分布方式 | 特点 | 典型产品 |
---|---|---|
哈希分布 | 1. 数据分散度高 2.键值分布与业务无关 3.无法顺序访问 4.支持批量操作 |
一致性哈希memcache redisCluster其他缓存产品 |
顺序分布 | 1.数据分散度易倾斜 2.键值分布与业务相关 3.可以顺序访问 4.支持批量操作 |
BigTable Hbase |
分布式缓存/存储四种Mget解决方案
1. IO的优化思路:
- 命令本身的效率:例如sql优化,命令优化
- 网络次数:减少通信次数
- 降低接入成本:长连/连接池,NIO等。
- IO访问合并:O(n)到O(1)过程:批量接口(mget),