Redis入门很简单之七【使用Jedis实现客户端Sharding】

博客分类:

<一>. 背景介绍:
 1. sharding机制:即通常所说的“分片”,允许数据存放在不同的物理机器上,  以适应数据量过大的场景,克服单台机器内存或者磁盘空间的限制。而这种“离散式”地存放,对客户端来说是透明的,对客户端来讲,完全看不到这种差别。
 2. 常见的内存缓存中间件,比如Memcached支持服务器端Sharding,客户端根本无须关心具体的实现细节。而Redis并不支持服务器端分片,不过我们可以使用Jedis提供的API来实现客户端的分片,通过“一致性hash”算法,使得数据离散地存放在不同的服务器上面。
 3. 对客户端来说,这是透明的,数据具体存在在那一台机器上面,对客户端来讲是无差别的。然后,通过不同机器上面的Redis控制台,我们还是可以看出数据的存储情况。
 4. 优缺点:使用Sharding机制,克服了单台服务器的“内存限制”,但是不可避免的降低了数据的存储和访问效率。

<二>. 进行配置:
 1. 增加节点:去掉之前的主从配置,作为用作Sharding的一台服务器,增加属性设置

  1. redis.host2=192.168.142.34

2. 连接池配置:使用shardedJedisPool

  1. <bean id = "shardedJedisPool" class = "redis.clients.jedis.ShardedJedisPool">
  2. <constructor-arg index="0" ref="jedisPoolConfig"/>
  3. <constructor-arg index="1">
  4. <list>
  5. <bean class="redis.clients.jedis.JedisShardInfo">
  6. <constructor-arg index="0" value="${redis.host}"/>
  7. <constructor-arg index="1" value="${redis.port}" type="int"/>
  8. <constructor-arg index="2" value="${redis.timeout}" type="int"/>
  9. <property name="password" value="${redis.password}"/>
  10. </bean>
  11. <bean class="redis.clients.jedis.JedisShardInfo">
  12. <constructor-arg index="0" value="${redis.host2}"/>
  13. <constructor-arg index="1" value="${redis.port}" type="int"/>
  14. <constructor-arg index="2" value="${redis.timeout}" type="int"/>
  15. <property name="password" value="${redis.password}"/>
  16. </bean>
  17. </list>
  18. </constructor-arg>
  19. </bean>

<三>. 使用API编程:
  1. 获取shardedJedis:

  1. ShardedJedisPool shardedPool = (ShardedJedisPool)context.getBean("shardedJedisPool");
  2. ShardedJedis shardedJedis = shardedPool.getResource();
  3. ...
  4. shardedPool.returnResource(shardedJedis);

2. 存储/访问/删除数据:

  1. shardedJedis.set("president", "Obama");
  2. String president = shardedJedis.get("president");
  3. shardedJedis.del("president");
1 
0 
分享到:  
参考知识库
Redis知识库4924  关注 | 738  收录
评论
5 楼 di1984HIT 2017-02-02  
jedis应该是自己判断了~
4 楼 wxx302 2016-02-15  
你好,有个疑问想请教下。
文中的连接池配置是通过 <constructor-arg index="1">  
        <list>  
            <bean class="redis.clients.jedis.JedisShardInfo">  
                <constructor-arg index="0" value="${redis.host}"/>         
                <constructor-arg index="1" value="${redis.port}" type="int"/>  
                <constructor-arg index="2" value="${redis.timeout}" type="int"/>  
                <property name="password" value="${redis.password}"/>  
            </bean>  
            <bean class="redis.clients.jedis.JedisShardInfo">  
                <constructor-arg index="0" value="${redis.host2}"/>         
                <constructor-arg index="1" value="${redis.port}" type="int"/>  
                <constructor-arg index="2" value="${redis.timeout}" type="int"/>  
                <property name="password" value="${redis.password}"/>  
            </bean>  
        </list>             
    </constructor-arg>  
实现,那么在下面获取shardedJedis,执行数据缓存时,是怎么判断获取的是上面配置的哪个主机的资源或者将数据缓存到哪个主机的呢?
3 楼 长滩岛上的辣炒年糕 2015-12-11  
太赞了,感觉jedis可以做好多东西啊  
2 楼 bert82503 2014-08-13  
Memcached服务端不支持Sharding,是客户端做的“一致性hash”分片算法。见《memcached全面剖析--4. memcached的分布式算法》http://blog.charlee.li/memcached-004/
可以看一下 Java Memcached 实现源码
1 楼 bert82503 2014-08-13  
Memcached服务端不支持Sharding,是客户端做的“一致性hash”分片算法。见[url]《memcached全面剖析--4. memcached的分布式算法》http://blog.charlee.li/memcached-004/[/url]
可以看一下 Java Memcached 实现源码

Redis入门很简单之七【使用Jedis实现客户端Sharding】的更多相关文章

  1. Redis入门很简单之六【Jedis常见操作】

    Redis入门很简单之六[Jedis常见操作] http://www.tuicool.com/articles/vaqABb http://www.cnblogs.com/stephen-liu74/ ...

  2. Redis入门很简单之五【Jedis和Spring的整合】

    Redis入门很简单之五[Jedis和Spring的整合] 博客分类: NoSQL/Redis/MongoDB redisnosql缓存jedisspring  在上一篇文章中,简单介绍了Jedis的 ...

  3. Redis入门很简单之四【初识Jedis】

    Redis入门很简单之四[初识Jedis] 博客分类: NoSQL/Redis/MongoDB redisnosql缓存jedis  使用Jedis提供的Java API对Redis进行操作,是Red ...

  4. Redis入门很简单之一【简介与环境搭建】

    Redis入门很简单之一[简介与环境搭建] 博客分类: NoSQL/Redis/MongoDB redisnosqlmemcached缓存中间件  [Redis简介] <一>. NoSQL ...

  5. Redis入门很简单之三【常见参数配置】

    Redis入门很简单之三[常见参数配置] 博客分类: NoSQL/Redis/MongoDB redisnosql缓存中间件memcached  Redis的一下常见设置都是通过对redis.conf ...

  6. Redis入门很简单之二【常见操作命令】

    Redis入门很简单之二[常见操作命令] 博客分类: NoSQL/Redis/MongoDB redisnosql缓存  Redis提供了丰富的命令,允许我们连接客户端对其进行直接操作.这里简单介绍一 ...

  7. 踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的(1)

    1.前言与作者 首先声明,我是由于非常偶然的机会获得<C语言入门很简单>这本书的,绝对不是买的.买这种书实在丢不起那人. 去年这书刚出版时,在CU论坛举行试读推广,我当时随口说了几句(没说 ...

  8. [电子书] 《Android编程入门很简单》

    <Android编程入门很简单>是一本与众不同的Android学习读物,是一本化繁为简,把抽象问题具体化,把复杂问题简单化的书.本书避免出现云山雾罩.晦涩难懂的讲解,代之以轻松活泼.由浅入 ...

  9. 《Mysql 入门很简单》(读后感①)

    下载完整版<Mysql 入门很简单>,点击这里~: http://files.cnblogs.com/files/zhengyeye/MySQL%E5%85%A5%E9%97%A8%E5% ...

随机推荐

  1. Feedforward and BackPropagation Algorithm

    在下图所示的Neural Network中,我们将拥有三个节点的layer1及layer4分别称为输入和输出层,而中间的两层layer2,layer3称为隐藏层(hidden layer).输入数据X ...

  2. SQL标量函数

    调用 MS SQL 标量值函数,应该在函数前面加上 "dbo.",否则会报 “不是可以识别的 内置函数名称”错误.例如 DECLARE @WhichDB TINYINT;     ...

  3. c#处理json格式类型的字符串

    string channelGroup=[{"SpType":"1","BaseInfoId":["xxx"," ...

  4. java包装类,自动装箱,拆箱,以及基本数据类型与字符串的转换

    package cn.learn; import java.util.ArrayList; /* 包装类 java.lang中,基本运算类型效率高 装箱:把基本类型数据包装为包装类 1.构造方法 In ...

  5. [Python3 练习] 010 找出藏在字符串中的“密码”

    题目:找出藏在字符串中的"密码" (1) 描述 1) 题源 1 Python Challenge, level 3 2) 题源 2 小甲鱼老师的 Python 课程,第 20 讲课 ...

  6. JS formData

    有时候,我们需要使用formData来上传文件,并根据反馈的结果做不同的处理, 这个时候使用form来提交文件不方便 #perform 获取的的上传文件所用的input标签 var formData ...

  7. 微信小程序(一)--微信小程序的介绍

    一.微信小程序简介 小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用.也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题.应用将无 ...

  8. [AGC028D](dp计数)

    题解点我 Code #include <bits/stdc++.h> typedef long long LL; typedef unsigned long long uLL; #defi ...

  9. python面试题之Python如何实现单例模式?

    #使用__metaclass__(元类)的高级python用法 class Singleton2(type): def __init__(cls, name, bases, dict): super( ...

  10. CodeChef Count Substrings

    Count Substrings   Problem code: CSUB   Submit All Submissions   All submissions for this problem ar ...