平时,我们将创建多个redis实例,以缓解单redis压力范例。但,作为高速缓存的数量增加。对redis对于扩展是一种非 - 不要无所谓。对redis有几种方法用于扩张可能。让我们添加每个redis最大内存实例。

之中的一个,并且缺乏灵活性和可扩展性。在redis官网上,提到了预分片技术。本文将对预分片技术进行解说,同一时候解说jedis对分片是怎样支持的。

一、redis预分片技术

在单个server上搭建多个redis实例。当须要扩展时。能够利用复制机制进行扩展。可參照例如以下步骤:

1)在新的server上创建空的redis实例。

2)配置新的redis实例作为源实例的从实例,将源数据导到新实例上。

3)停止client(如jedis)。

4)将client配置的实例ip更新为新的server地址。

注意此处是替换老的ip地址,不能进行追加或调换各地址的顺序。

5)在新server上发送SLAVEOF NO ONE命令。使其不再作为从实例。

6)用新的配置重新启动client。

7)最后停止老server上不再使用的旧实例。

在这里提出个问题,将老的ip地址替换后。之前映射到旧的redis实例上keyword能否映射到相应的新redis实例上?本文后面将会进行分析。

二、jedis对分片技术的实现

jedis支持分片技术。上图为涉及到的几个主要类。主要分成两部分:

1)记录各个redis实例的地址信息。从类图中能够看出,ShardInfo和JedisShardInfo实现了此功能;

2)使用一致性hash算法。对keyword及redis实例进行映射。从类图能够看出Sharded提供了此功能的一个基类,BinaryShardedJedis和ShardedJedis各自是字节和字符串的实现。

在Sharded类创建时,会运行一个初始化方法。通过hash算法,对每一个redis实例得出160个hash值,并将该值作为TreeMap的key,将Redis实例的ShardInfo信息作为value。注意:在计算hash值时。并非使用的ip地址,而是用的一个别名。

该别名要么是在ShardInfo中设置,要么就是以一定规则生成。详细可看以下的代码:

    private void initialize(List<S> shards) {
nodes = new TreeMap<Long, S>(); for (int i = 0; i != shards.size(); ++i) {
final S shardInfo = shards.get(i);
if (shardInfo.getName() == null)
for (int n = 0; n < 160 * shardInfo.getWeight(); n++) {
nodes.put(this.algo.hash("SHARD-" + i + "-NODE-" + n),
shardInfo);
}
else
for (int n = 0; n < 160 * shardInfo.getWeight(); n++) {
nodes.put(
this.algo.hash(shardInfo.getName() + "*"
+ shardInfo.getWeight() + n), shardInfo);
}
resources.put(shardInfo, shardInfo.createResource());
}
}

不使用ip地址进行哈希,就能够避免在ip地址变更时,缓存里的数据无法訪问。

这里回答了之前提出的问题。

实际上。这里就是一致性哈希算法的实现。memcached使用的也是此算法。160个哈希值。实际上是单个实例在哈希环上的虚拟节点。假设不建立虚拟节点,在增肌或删除节点时,会对某个节点造成压力,假设建立虚拟节点,能够将压力分解到各个redis实例上。



版权声明:本文博主原创文章。博客,未经同意不得转载。

redis预切片技术,实现的更多相关文章

  1. 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_08-课程预览技术方案

    3.2.1 技术需求 课程详情页面是向用户展示课程信息的窗口,课程相当于网站的商品,本页面的访问量会非常大.此页面的内容设 计不仅要展示出课程核心重要的内容而且用户访问页面的速度要有保证,有统计显示打 ...

  2. 设备、像素和点 、 9切片技术 、 颜色和外观 、 NavigationBar的美化

    1 TMessage项目的输入面板界面 1.1 问题 IOS中经常会使用到九切片技术对图片进行处理.本案例使用九切片技术完成Tmessage项目的输入板界面,如图-1所示: 图-1 1.2 方案 首先 ...

  3. dns-prefetch—DNS预解析技术

    今天在看一个网站的源代码时 发现了 <link rel="dns-prefetch" href="//static.tuweia.cn/"> 对dn ...

  4. 从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史(转载)

    转载 https://zhuanlan.zhihu.com/p/49271699 首发于深度学习前沿笔记 写文章   从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史 张 ...

  5. 转 Redis集群技术及Codis实践

    转  Redis集群技术及Codis实践 转自 :http://blog.51cto.com/navyaijm/1637688 codis开源地址:https://github.com/CodisLa ...

  6. DNS Prefetch 【DNS 预解析技术】

    DNS 实现域名到IP的映射.通过域名访问站点,每次请求都要做DNS解析.目前每次DNS解析,通常在200ms以下.针对DNS解析耗时问题,一些浏览器通过DNS Prefetch 来提高访问的流畅性. ...

  7. zz从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史

    从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史 Bert最近很火,应该是最近最火爆的AI进展,网上的评价很高,那么Bert值得这么高的评价吗?我个人判断是值得.那为什么 ...

  8. python的字符串切片技术

    听说过python的字符串切片技术吗?是不是听着超高级的?实际上,也不用想得太难,python的字符串切片技术就是将字符串的某些字符提取出来而已~ 字符串切片 字符串是一种序列类型,可以按序号访问其中 ...

  9. Redis - NoSQL数据库技术(一)

    NoSQL入门概述(一) 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 什么是NoSQL NoSQL(NoSQL - Not Only SQL),意“不仅仅是SQL”: 泛指非关系 ...

随机推荐

  1. 学习日记之命令模式和Effective C++

    命令模式(Command): 讲一个请求封装为一个对象.从而使你可用不同的请求对客户进行參数化.对请求队列或记录请求日志.以及支持可撤销的操作. 命令模式长处: (1),它能较easy地设计一个命令队 ...

  2. Android中使用JNI获得APK签名的哈希值

    原地址:http://blog.csdn.net/i5suoi/article/details/19036975 最近在研究android应用中的安全问题,貌似只有将核心代码写到JNI底层才是最安全的 ...

  3. wkhtmtopdf--高分辨率转HTML成PDF--目录篇

    原文:wkhtmtopdf--高分辨率转HTML成PDF--目录篇 wkhtmtopdf--高分辨率转HTML成PDF(一):简述wkhtmtopdf的简介和安装 wkhtmtopdf--高分辨率转H ...

  4. TR90眼镜_百度百科

    TR90眼镜_百度百科 TR90眼镜

  5. 为什么 string.find()返回值是-1

    之前好像在哪里见到过这个问题,时间有点久,想不起来了,今天写字符串又碰到这个问题,书上给出的定义是当string.find()没有找到时返回的是一个非常大的值,网上有人说是-1,两种说法都对,由于整数 ...

  6. UVA 11080 - Place the Guards(二分图判定)

    UVA 11080 - Place the Guards 题目链接 题意:一些城市.之间有道路相连,如今要安放警卫,警卫能看守到当前点周围的边,一条边仅仅能有一个警卫看守,问是否有方案,假设有最少放几 ...

  7. python 入门学习---模块导入三种方式及中文凝视

    Python 有三种模块导入函数 1. 使用import 导入模块 import modname : 模块是指一个能够交互使用,或者从还有一Python 程序訪问的代码段.仅仅要导入了一个模块,就能够 ...

  8. ssh, maven and eclipse 那些破事

    Unix根据该理念keep it simple, keep it stupid.可在j2ee有keep it complex, keep it smart. 所以,我彻底晕菜. 最后能活着把sprin ...

  9. 传京东副总裁蒉莺春或将接管POP业务-搜狐IT

    传京东副总裁蒉莺春或将接管POP业务-搜狐IT 传京东副总裁蒉莺春或将接管POP业务

  10. 强势围观,CSDN代码引用bug

    看我写的一篇blog  http://blog.csdn.net/laijieyao/article/details/41014355,在代码上引用了微软雅黑的字体,结果代码显示出来把我给惊呆了 竟然 ...