Redis 常用客户端: Redission、Jedis
jedis 简介
redis的Java客户端,可访问、操作Redis
Jedis工具类:
package com.zhiwei.redis_jedis;
import java.util.ResourceBundle;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* Redis的基础工具类
* @author Yang Zhiwei
*
*/
public final class RedisUtil {
private static JedisPool jedisPool = null;
//初始化JedisPool连接池
static {
try {
//从classpath路径下获取redis.perpoties文件,获取jedis连接池参数(后缀名可以省略)
ResourceBundle rb=ResourceBundle.getBundle("com/zhiwei/redis_jedis/redis");
int maxActive=Integer.parseInt(rb.getString("redis.pool.maxActive"));
int maxIdle=Integer.parseInt(rb.getString("redis.pool.maxIdle"));
int minIdle=Integer.parseInt(rb.getString("redis.pool.minIdle"));
int maxWait=Integer.parseInt(rb.getString("redis.pool.maxWait"));
//下面亮相两项配置会影响性能(一般在测试环境中使用)
boolean testOnBorrow=Boolean.parseBoolean(rb.getString("redis.pool.testOnBorrow"));
boolean testOnReturn=Boolean.parseBoolean(rb.getString("redis.pool.testOnReturn"));
String host=rb.getString("redis.ip");
int port=Integer.parseInt(rb.getString("redis.port"));
//封装jedis连接池参数
JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
jedisPoolConfig.setMaxActive(maxActive);
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMinIdle(minIdle);
jedisPoolConfig.setMaxWait(maxWait);
jedisPoolConfig.setTestOnBorrow(testOnBorrow);
jedisPoolConfig.setTestOnReturn(testOnReturn);
//创建redis连接池
jedisPool=new JedisPool(jedisPoolConfig,host,port);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 通过Jedis连接池获取Jedis:原子性
* @return
*/
public synchronized static Jedis getJedis() {
try {
if (jedisPool != null) {
Jedis resource = jedisPool.getResource();
return resource;
} else {
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* jedis连接返回给连接池,释放资源
* @param jedis
*/
public static void releaseJedis(final Jedis jedis) {
if (jedis != null) {
jedisPool.returnResource(jedis);
}
}
/**
* 根据key值去查找value值
* @param key
* @return
*/
public static String find(String key){
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.get(key);
} catch (Exception e) {
e.printStackTrace();
return null;
}finally{
RedisUtil.releaseJedis(jedis); //释放Jedis连接
}
}
/**
* 获取key对应的value值的子串:
* set key "this is example!"
* getrange key 0 3
* --->"this"
*/
public static String findSubStr(String key,Integer startOffset,Integer endOffset){
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.getrange(key, startOffset, endOffset);
} catch (Exception e) {
e.printStackTrace();
return null;
}finally{
jedisPool.returnResource(jedis);
}
}
/**
* redis添加k-v对:finally中代码块通过try--catch之后一定会触发
* @param key
* @param value
* @return
* @throws Exception
*/
public static boolean add(String key,String value) throws Exception{
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
jedis.set(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}finally{
RedisUtil.releaseJedis(jedis);
}
}
/**
* 删除redis中的key对应的k-v对
* @param key
* @return
*/
public static boolean del(String key){
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
jedis.del(key);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}finally{
RedisUtil.releaseJedis(jedis);
}
}
}
Redis 配置
redis.pool.maxActive=200 #最大连接数:能够同时建立的“最大链接个数”
redis.pool.maxIdle=100 #最大空闲数:空闲链接数大于maxIdle将进行回收
redis.pool.minIdle=5 #最小空闲数:低于minIdle时,将创建新的链接
redis.pool.maxWait=100 #最大等待时间:单位ms
redis.pool.testOnBorrow=true #使用连接时,检测连接是否成功
redis.pool.testOnReturn=true #返回连接时,检测连接是否成功
redis.ip=127.0.0.1
redis.port=6379
基础测试类:
package com.zhiwei.redis_jedis;
/*
*jedis是java访问redis的一个客户端,类似FTPClient HttpClient
*/
import redis.clients.jedis.Jedis;
public class MainTest {
public static void main(String[] args) throws Exception {
if(RedisUtil.add("squirrel", "xiaoyang")){
System.err.println("key:squirrel,value:"+RedisUtil.find("squirrel"));
}
}
//常规连接:类比FTPClient
@SuppressWarnings("unused")
private static void basic() {
Jedis jedis = new Jedis("127.0.0.1"); //建立jedis与redis连接
System.out.println("Connection to server sucessfully");
System.out.println("Server is running: "+jedis.ping());
jedis.set("name", "xiaoyang"); //添加k-v对
System.out.println(jedis.get("name")); //获取key为name的元素的值
jedis.del("name"); //删除Key为name的元素
System.out.println(jedis.get("name"));
jedis.flushDB(); //清空当前访问DB的数据
}
/**
* 基础测试类:一般开发
*/
private static void poolJedis(){
//获取Redis的客户端Jedis:一般开发使用Redis进行集群开发,jedis连接通过连接池获取
Jedis jedis=RedisUtil.getJedis();
jedis.set("name", "sqirrel"); //redis中添加数据:k-v形式
System.out.println("redis--->"+jedis.get("name"));//取值
String result=RedisUtil.find("name");
System.out.println("result--->"+result);
}
}
来源:oschina
链接:https://my.oschina.net/u/4074151/blog/3013891