Jedis下的ShardedJedis
jedis客户端操作redis主要三种模式:单台模式、分片模式(ShardedJedis)、集群模式(BinaryJedisCluster)
一、简介
1、jedis
redis是内存数据库,常被用作缓存。jedis是java语言的redis客户端。本文将基于原生的jedis,对spring与redis集成开发进行介绍。
2、ShardedJedisPool
ShardedJedisPool是基于一致性哈希算法实现的分布式jedis池。
这里的一致性哈希算法,简单的说,就是将部署的redis-server(一个或多个)和存数据的key映射到同一地此空间,
这样redisServer可动态添加或减少。
二、开发步骤
1、添加java的redis驱动器jedis,以及连接池,maven依赖如下:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.4.2</version>
</dependency>
2、配置jedis控制参数,redis.clients.jedis.JedisPoolConfig,其中的参数有:
a)maxTotal,池中最多可以有多少个jedis实例,默认值是8
b)maxIdle,池中最多有多少个空闲的jedis实例,默认值是8
c)minIdle,池中最小有多少个空闲的jedis实例,默认值是0
d)maxWaitMillis,获取jedis实例的最大等待毫秒数,默认值是-1
配置可如:
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"
p:maxTotal="6000"
p:maxIdle="300"
p:minIdle="100"
p:maxWaitMillis="1000"
/>
3、配置jedis池,redis.clients.jedis.ShardedJedisPool,其有多个构造函数,最主要的是:
public ShardedJedisPool(GenericObjectPoolConfig poolConfig, List<JedisShardInfo> shards) {
this(poolConfig, shards, Hashing.MURMUR_HASH);
}
即是:
a)添加控制参数,也就是上一步配置的JedisPoolConfig。
b)添加redis分片,每一个分片在redis.clients.jedis.JedisShardInfo中配置,
内部参数包括部署地址、端口、超时时间、权重等信息,原码如下:
public class JedisShardInfo extends ShardInfo<Jedis> {
private int timeout;
private String host;
private int port;
private String password;
private String name;
public abstract class ShardInfo<T> {
private int weight;
}
完整配置如:
<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 name="host" value="127.0.0.1" />
<constructor-arg name="port" value="6379" />
</bean>
<bean class="redis.clients.jedis.JedisShardInfo">
<constructor-arg name="host" value="127.0.0.1" />
<constructor-arg name="port" value="6380" />
</bean>
</list>
</constructor-arg>
</bean>
4、通过ShardedJedisPool获取jedis实例
ShardedJedis shardedJedis = shardedJedisPool.getResource();
5、使用jedis进行数据存取
如:
shardedJedis.set(name,value); shardedJedis.get(name);
6、使用完后,将jedis实例还给池
shardedJedisPool.returnResource(shardedJedis); //正常使用完后,将jedis实例返回到池中 shardedJedisPool.returnBrokenResource(shardedJedis); //无法正常使用,将jedis实例返回到池中,标识该jedis实例不能使用
三、代码实例
1、添加maven依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.4.2</version>
</dependency>
2、添加spring配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<span style="color: #0000ff;"><</span><span style="color: #800000;">bean </span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="jedisPoolConfig"</span><span style="color: #ff0000;"> class</span><span style="color: #0000ff;">="redis.clients.jedis.JedisPoolConfig"</span><span style="color: #ff0000;">
p:maxTotal</span><span style="color: #0000ff;">="6000"</span><span style="color: #ff0000;">
p:maxIdle</span><span style="color: #0000ff;">="300"</span><span style="color: #ff0000;">
p:minIdle</span><span style="color: #0000ff;">="100"</span><span style="color: #ff0000;">
p:maxWaitMillis</span><span style="color: #0000ff;">="1000"</span>
<span style="color: #0000ff;">/></span>
<span style="color: #0000ff;"><</span><span style="color: #800000;">bean </span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="shardedJedisPool"</span><span style="color: #ff0000;"> class</span><span style="color: #0000ff;">="redis.clients.jedis.ShardedJedisPool"</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"><</span><span style="color: #800000;">constructor-arg </span><span style="color: #ff0000;">index</span><span style="color: #0000ff;">="0"</span><span style="color: #ff0000;"> ref</span><span style="color: #0000ff;">="jedisPoolConfig"</span> <span style="color: #0000ff;">/></span>
<span style="color: #0000ff;"><</span><span style="color: #800000;">constructor-arg </span><span style="color: #ff0000;">index</span><span style="color: #0000ff;">="1"</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"><</span><span style="color: #800000;">list</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"><</span><span style="color: #800000;">bean </span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="redis.clients.jedis.JedisShardInfo"</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"><</span><span style="color: #800000;">constructor-arg </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="host"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="127.0.0.1"</span> <span style="color: #0000ff;">/></span>
<span style="color: #0000ff;"><</span><span style="color: #800000;">constructor-arg </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="port"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="6379"</span> <span style="color: #0000ff;">/></span>
<span style="color: #0000ff;"></</span><span style="color: #800000;">bean</span><span style="color: #0000ff;">></span>
<span style="color: #008000;"><!--</span><span style="color: #008000;"><bean class="redis.clients.jedis.JedisShardInfo"></span><span style="color: #008000;">--></span>
<span style="color: #008000;"><!--</span><span style="color: #008000;"><constructor-arg name="host" value="127.0.0.1" /></span><span style="color: #008000;">--></span>
<span style="color: #008000;"><!--</span><span style="color: #008000;"><constructor-arg name="port" value="6380" /></span><span style="color: #008000;">--></span>
<span style="color: #008000;"><!--</span><span style="color: #008000;"></bean></span><span style="color: #008000;">--></span>
<span style="color: #0000ff;"></</span><span style="color: #800000;">list</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"></</span><span style="color: #800000;">constructor-arg</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"></</span><span style="color: #800000;">bean</span><span style="color: #0000ff;">></span>
本文介绍了Jedis客户端操作Redis的三种模式,重点讲解了ShardedJedis通过一致性哈希实现分布式缓存。阐述了ShardedJedisPool基于一致性哈希算法的原理,还给出了开发步骤,包括添加依赖、配置控制参数和池、获取实例、数据存取等,最后给出代码实例。

969

被折叠的 条评论
为什么被折叠?



