将 ShardedJedis 与 RedisTemplate 一起使用
Posted
技术标签:
【中文标题】将 ShardedJedis 与 RedisTemplate 一起使用【英文标题】:Using ShardedJedis with RedisTemplate 【发布时间】:2015-06-19 10:26:48 【问题描述】:以下是从jedis github页面直接复制的Jedis文档:
List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
JedisShardInfo si = new JedisShardInfo("localhost", 6379);
si.setPassword("foobared");
shards.add(si);
si = new JedisShardInfo("localhost", 6380);
si.setPassword("foobared");
shards.add(si);
那么,ShardedJedis
有两种使用方式。直接连接或使用ShardedJedisPool
。为了可靠运行,后者必须在多线程环境中使用。
2.a) 直接连接:
ShardedJedis jedis = new ShardedJedis(shards);
jedis.set("a", "foo");
jedis.disconnect;
2.b) 池化连接:
ShardedJedisPool pool = new ShardedJedisPool(new Config(), shards);
ShardedJedis jedis = pool.getResource();
jedis.set("a", "foo");
.... // do your work here
pool.returnResource(jedis);
.... // a few moments later
ShardedJedis jedis2 = pool.getResource();
jedis.set("z", "bar");
pool.returnResource(jedis);
pool.destroy();
上面的例子展示了如何使用ShardedJedis
。
在我当前的设置中,我使用的是RedisTemplate
和JedisConnectionFactory
。
我的问题是
如何将
ShardedJedis
与RedisTemplate
一起使用?
【问题讨论】:
这是旧的,但当时回复说它不支持分片。 forum.spring.io/forum/spring-projects/data/nosql/… 【参考方案1】:我认为它不直接支持你的情况。 RedisTemplate 为 Redis 交互提供了高级抽象。 而 RedisConnection 提供了接受和返回二进制值(字节数组)的低级方法。
见:Working with Objects through RedisTemplate
【讨论】:
【参考方案2】:我认为您可以使用以下代码在 spring.xml 中配置 jedis: 当然你应该创建一个 JedisClient.java 作为接口
<!-- redis cluster -->
<!-- <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
<constructor-arg>
<set>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="$redis01.real.cluster.client.host"/>
<constructor-arg name="port" value="$redis01.real.cluster.client.port"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="$redis02.real.cluster.client.host"/>
<constructor-arg name="port" value="$redis02.real.cluster.client.port"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="$redis03.real.cluster.client.host"/>
<constructor-arg name="port" value="$redis03.real.cluster.client.port"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="$redis04.real.cluster.client.host"/>
<constructor-arg name="port" value="$redis04.real.cluster.client.port"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="$redis05.real.cluster.client.host"/>
<constructor-arg name="port" value="$redis05.real.cluster.client.port"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="$redis06.real.cluster.client.host"/>
<constructor-arg name="port" value="$redis06.real.cluster.client.port"/>
</bean>
</set>
</constructor-arg>
</bean>
<bean id="jedisClientCluster" class="com.dingli.rest.component.impl.JedisClientCluster"/> -->
【讨论】:
以上是关于将 ShardedJedis 与 RedisTemplate 一起使用的主要内容,如果未能解决你的问题,请参考以下文章