您的位置:首页 > 数据库 > Redis

Redis 学习(四)Jedis使用

2016-06-07 16:16 645 查看
上篇文章说明了redis 集群、分片的几种方式。一般的数据和流量不高的项目用一个redis做缓存或者分片基本能够满足需求。

下面就针对jedis做一个简单demo。

1、准备jedis环境

<dependencies>
<!-- jedis 客户端 目前到2.8.X start -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.0</version>
</dependency>
<!-- jedis 客户端 end -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency>
</dependencies>
2、jedis支持连接池和分片连接池

JedisPool

import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* redis连接池
* @author yangfenge
* 2016年6月2日
*/
public class RedisPool {
private static JedisPool pool;

/**
* 创建连接池
* @param host redis机器地址
* @param port redis机器端口
*/
private static void createJedisPool(String host,int port){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
// 设置最大连接数
jedisPoolConfig.setMaxTotal(100);
// 设置最大阻塞时间,记住是毫秒数milliseconds
jedisPoolConfig.setMaxWaitMillis(1000);
// 设置空间连接
jedisPoolConfig.setMaxIdle(10);
// 创建连接池
pool = new JedisPool(jedisPoolConfig, host, port);
}
/**
* 同步初始化连接池,防止多线程调用重复创建
* @param host redis机器地址
* @param port redis机器端口
*/
public static synchronized JedisPool GetIntance(String host,int port){
if (pool==null) {
createJedisPool(host,port);
}
return pool;
}

}
ShardJedisPool

/**
* redis分片连接池
* @author yangfenge
* 2016年6月2日
*/
public class RedisShardPool {
private static ShardedJedisPool pool;

/**
* 创建分片连接池
* @param confs 分片的各个机器配置
*/
private static void createJedisPool(List<Map<String, Integer>> confs){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
// 设置最大连接数
jedisPoolConfig.setMaxTotal(100);
// 设置最大阻塞时间,记住是毫秒数milliseconds
jedisPoolConfig.setMaxWaitMillis(1000);
// 设置空间连接
jedisPoolConfig.setMaxIdle(10);
List<JedisShardInfo> jedisShardInfos = new ArrayList<JedisShardInfo>();
for (Map<String, Integer> item : confs) {
Set<Entry<String, Integer>> conf = item.entrySet();
for (Entry<String, Integer> entry : conf) {
JedisShardInfo jedisShardInfo = new JedisShardInfo(entry.getKey(), entry.getKey());
jedisShardInfos.add(jedisShardInfo);
break;
}
}
// 创建连接池
pool = new ShardedJedisPool(jedisPoolConfig,jedisShardInfos);
}
/**
* 同步初始化连接池,防止多线程调用重复创建
* @param confs 分片的各个机器配置
*/
public static synchronized ShardedJedisPool GetIntance(List<Map<String, Integer>> confs){
if (pool==null) {
createJedisPool(confs);
}
return pool;
}

}
3、jedis客户端和jedis分片客户端

JedisClient

/**
* redis客户端
*
* @author yangfenge 2016年6月2日
*/
public class JedisClient {
private static JedisPool pool;

/**
* 获取redis客户端jedis
*
* @param host
* @param port
* @return
*/
public static Jedis GetIntance(String host, int port) {
pool = RedisPool.GetIntance(host, port);
return pool.getResource();
}

/**
* 释放redis客户端jedis
*
* @param host
* @param port
* @return
*/
public static void ReturnJedisToPool(Jedis jedis) {
pool.returnResourceObject(jedis);
}
}
JedisShardClient

/**
* redis分片客户端
*
* @author yangfenge 2016年6月2日
*/
public class JedisShardClient {
private static ShardedJedisPool pool;

/**
* 获取redis分片客户端jedis
*
* @param host
* @param port
* @return
*/
public static ShardedJedis GetIntance(List<Map<String, Integer>> confs) {
pool = RedisShardPool.GetIntance(confs);
return pool.getResource();
}

/**
* 释放redis客户端分片jedis
*
* @param host
* @param port
* @return
*/
public static void ReturnJedisToPool(ShardedJedis jedis) {
pool.returnResourceObject(jedis);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jedis redis