`

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

阅读更多

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

 

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

redis.host2=192.168.142.34

  2. 连接池配置:使用shardedJedisPool

    <bean id = "shardedJedisPool" class = "redis.clients.jedis.ShardedJedisPool">
        <constructor-arg index="0" ref="jedisPoolConfig"/>
        <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>
    </bean>

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

    ShardedJedisPool shardedPool = (ShardedJedisPool)context.getBean("shardedJedisPool");
    ShardedJedis shardedJedis = shardedPool.getResource();
     ...
    shardedPool.returnResource(shardedJedis); 

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

    shardedJedis.set("president", "Obama");
    String president = shardedJedis.get("president");
    shardedJedis.del("president");

 

1
0
分享到:
评论
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集群环境搭建以及java中jedis客户端集群代码实现

    Jedis的源码则使用Java编写,提供了丰富的API接口,通过分析源码,我们可以学习如何优雅地设计和实现客户端库,以便与分布式服务交互。 总结来说,Redis集群提供了高可用性和水平扩展的能力,而Jedis作为Java客户端...

    redis集群批量插入

    Java客户端库如JedisCluster或Lettuce提供了连接和操作Redis集群的API。 批量插入String类型数据时,通常使用`JedisCluster`类中的`mset`方法。这个方法允许一次性设置多个键值对,但需要注意的是,由于Redis集群的...

    redis集群连接及工具类DEMO

    【Redis集群连接及工具类DEMO】是一个Spring工程,它提供了与Redis集群交互的实例,同时也包含了一些实用的工具类,使得开发者能够更方便地在Java应用中使用Redis作为数据存储。这个DEMO的主要目标是展示如何配置和...

    springcloud部署redis集群

    Redis集群通过数据分片(Sharding)技术,将数据分散存储在多个节点上,每个节点只负责一部分数据,从而实现数据的水平扩展。每个节点都是独立的Redis实例,可以处理读写请求。集群中的节点之间通过Gossip协议进行...

    jedis-2.5.1.jar

    Jedis 是 Redis 官方首选的 Java 客户端开发包。 实例方法: ? 1 import redis.clients.jedis.* ? 1 2 3 Jedis jedis = new Jedis("localhost"); jedis.set("foo", "bar"); String value = jedis.get("foo"); 支持...

    redis集群工具包和配置

    Redis Cluster是Redis官方提供的原生集群解决方案,它通过数据分片(Sharding)来实现数据的分布式存储,并且具备故障转移功能,确保服务的高可用性。 在Windows环境下配置Redis集群,首先需要安装以下几个关键组件...

    redis-redis.zip

    在Java开发中,我们通常使用Jedis或Lettuce这两个Java客户端来连接和操作Redis。Jedis是更老牌的选择,功能齐全,API简洁,而Lettuce则是异步非阻塞的客户端,适合高并发环境。 1. **Redis基本概念**: - **键(key...

    redis 性能测试(读写)

    Jedis 是 Java 开发者常用的 Redis 客户端库,它提供了丰富的 Redis 操作接口,使得在 Java 应用中与 Redis 交互变得简单。 在进行 Redis 的性能测试时,我们通常关注两个关键指标:读操作和写操作的性能。这里的...

    redis集群,使用ruby脚本搭建集群

    5. 配置客户端:客户端连接集群时,需要使用支持集群的客户端库,如 Jedis(Java)、redis-py(Python)或 Node.js 的 ioredis。它们会自动处理槽映射和节点发现。 6. 数据分布与迁移:在集群中,当数据被插入时,...

    redis从入门到精通

    1. **Jedis库**: Java开发中,通常使用Jedis作为Redis的客户端库。Jedis提供了丰富的API,如`set`、`get`、`del`等,与Redis命令一一对应,方便Java程序与Redis交互。 2. **连接池**: 为了提高性能和资源利用率,...

    jedis-jedis-2.4.0.tar.gz

    Jedis是Java语言中的一款非常流行的Redis客户端库,它提供了丰富的API来操作Redis数据库,使得在Java应用中集成和使用Redis变得极其方便。这个压缩包文件"jedis-jedis-2.4.0.tar.gz"包含了Jedis 2.4.0版本的所有源码...

    redis集群以及Spring-data-redis操作集群

    Redis集群通过数据分片(Sharding)策略将数据分散存储在多个节点上,实现负载均衡,增强系统的扩展性和可用性。在Redis 3.0及以上版本,引入了集群功能,支持主从复制、槽分配以及故障转移等特性。 **集群搭建** ...

    Windows环境Redis-Cluster配置

    3. 配置客户端:客户端需要支持Redis-Cluster,例如Jedis、StackExchange.Redis等。配置客户端连接时,需指定集群模式,并提供所有节点的地址。 四、运行和监控 1. 检查集群状态:使用`redis-cli -c -h node1:port ...

    RedisCluster.rar

    RedisCluster是Redis分布式数据库的一种集群模式,它通过分片(Sharding)技术将数据分散存储在多个节点上,以实现高可用性和可扩展性。在Java环境中,与RedisCluster进行交互通常需要使用特定的客户端库。这个...

    redis源码以及哨片分片连接池实现

    在本主题中,我们将探讨Redis的源码解析以及哨片(Sentinel)系统和分片(Sharding)技术的实现,特别是它们如何与Java中的连接池相结合。 首先,让我们深入理解Redis的源码。Redis源码结构清晰,模块化设计良好,...

    Redis教程 安装配置 软件等

    3. Jedis:Java客户端,广泛应用于Java项目中连接Redis。 4. StackExchange.Redis:C#/.NET的Redis客户端库。 五、Redis应用场景 1. 缓存:Redis的高速读写性能使其成为数据缓存的理想选择,可以提高网站或应用的...

    Redis技术文档

    Jedis是Java语言的Redis客户端,提供了丰富的API,方便开发者进行Redis操作。它支持连接池管理,提高连接复用,降低系统资源消耗。例如,使用Jedis进行键值操作、事务处理、发布订阅等功能。 总结,Redis作为一款...

    spring集成redis,集成redis集群

    至于标签中的“源码”,这可能暗示了我们要深入理解Spring和Redis的底层实现,比如了解Jedis或Lettuce客户端如何处理命令的发送和响应,或者Redis集群如何处理数据分片和故障转移。这需要阅读相关的源代码和文档,...

    Redis集群搭建资料大整合

    Redis集群(Redis Cluster)是其提供的一种分布式解决方案,旨在提高数据的可用性和可扩展性,通过数据分片(Sharding)实现多节点的数据存储。在本资料包中,您将找到关于Redis集群搭建的详细步骤和教程。 首先,...

    分布式redis储存方式

    在Java中,可以通过Jedis或Lettuce等Redis客户端库配置主从连接,实现数据的实时同步。 2. **Sentinel哨兵系统** Redis Sentinel是Redis提供的高可用性解决方案,它可以监控、发现并自动处理主节点的故障,将从...

Global site tag (gtag.js) - Google Analytics