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


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

    博客分类:

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

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

    Shell代码  收藏代码
    1. redis.host2=192.168.142.34  

      2. 连接池配置:使用shardedJedisPool

    Xml代码  收藏代码
    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:

    Java代码  收藏代码
    1. ShardedJedisPool shardedPool = (ShardedJedisPool)context.getBean("shardedJedisPool");  
    2. ShardedJedis shardedJedis = shardedPool.getResource();  
    3.  ...  
    4. shardedPool.returnResource(shardedJedis);   

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

    Java代码  收藏代码
    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 实现源码
  • 相关阅读:
    2020杭电HDU-6831多校第六场Fragrant numbers(区间DP打表)
    Gym 102219H-Are You Safe?(凸包求解+判断点与凸包关系)
    2020杭电HDU-6827多校第六场Road To The 3rd Building(找规律求期望)
    洛谷P1099&Noip 2007提高-树网的核(树直径上的尺取)
    2020杭电HDU-6832多校第六场A Very Easy Graph Problem(最短路转最小生成树+dfs)
    CodeForces 950D-A Leapfrog in the Array(打表找规律)
    使用odoo价格表[pricelist]对价格进行特别处理,如 .99
    odoo 10 生产自动领料
    安装odoo服务
    advanced validation on purchase.
  • 原文地址:https://www.cnblogs.com/timssd/p/7468628.html
Copyright © 2020-2023  润新知