常用的操作Redis的框架有:Jedis,Redisson,Lettuce,其中:
-
Jedis:是Redis的Java实现客户端,提供了比较全面的Redis命令的支持:官网 Jedis比较全面的提供了Redis的操作特性。 Jedis使用阻塞的I/O,且其方法调用都是同步的,程序流需要等到sockets处理完I/O才能执行,不支持异步。Jedis客户端实例不是线程安全的,所以需要通过连接池来使用Jedis。
-
Redisson:实现了分布式和可扩展的Java数据结构。官网 Redisson促使使用者对Redis的关注分离,提供很多分布式相关操作服务,例如,分布式锁,分布式集合,可通过Redis支持延迟队列。 Redisson基于Netty框架的事件驱动的通信层,其方法调用是异步的。Redisson的API是线程安全的,所以可以操作单个Redisson连接来完成各种操作
-
Lettuce:高级Redis客户端,用于线程安全同步、异步和响应使用,支持集群、Sentinel、管道和编码器。官网 Lettuce主要在一些分布式缓存框架上使用比较多 Lettuce基于Netty框架的事件驱动的通信层,其方法调用是异步的。Lettuce的API是线程安全的,所以可以操作单个Lettuce连接来完成各种操作
建 议 使 用 \color{#ca0c16}{建议使用} 建议使用:Jedis + Redisson
本博客代码中的JedisPoolUtil代码请参看:JedisPoolUtil
Jedis工具类import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
public class JedisUtil {
private static final Logger log = LoggerFactory.getLogger(JedisUtil.class);
/key操作
/**
* 删除指定的key
* @param key
* @return
*/
public static long del(String key){
Jedis jedis =null;
long res = -1;
try {
jedis = JedisPoolUtil.getJedis();
res = jedis.del(key);
} catch (Exception e) {
e.printStackTrace();
log.error("strSet {} error:{}",key ,e);
} finally {
JedisPoolUtil.release(jedis);
}
return res;
}
/**
* 字符串设置key-value-expire
* @param key
* @param value
* @param expire 过期时间,值为-1时永不过期
* @return 成功返回OK
*/
public static String strSet(String key ,String value,int expire){
Jedis jedis =null;
String res = null;
try {
jedis = JedisPoolUtil.getJedis();
res = jedis.set(key, value);
if(expire != -1){
jedis.expire(key ,expire);
}
} catch (Exception e) {
e.printStackTrace();
log.error("strSet {} error:{}",key ,e);
} finally {
JedisPoolUtil.release(jedis);
}
return res;
}
///string操作
/**
* 字符串设置key-value
* @param key
* @param value
* @return 成功返回OK
*/
public static String strSet(String key ,String value){
return strSet(key,value,-1);
}
/**
* 根据key获取字符串的值
* @param key
* @return
*/
public static String strGet(String key){
Jedis jedis =null;
String res = null;
try {
jedis = JedisPoolUtil.getJedis();
res = jedis.get(key);
} catch (Exception e) {
e.printStackTrace();
log.error("strSet {} error:{}",key ,e);
} finally {
JedisPoolUtil.release(jedis);
}
return res;
}
public static String strMset(String... keyValues){
String res = null;
Jedis jedis = null;
try {
jedis = JedisPoolUtil.getJedis();
res = jedis.mset(keyValues);
} catch (Exception e) {
e.printStackTrace();
log.error("strMset {} error:{}",keyValues ,e);
} finally {
JedisPoolUtil.release(jedis);
}
return res;
}
public static List strMget(String... keys){
List res = null;
Jedis jedis = null;
try {
jedis = JedisPoolUtil.getJedis();
res = jedis.mget(keys);
} catch (Exception e) {
e.printStackTrace();
log.error("strMget {} error:{}",keys ,e);
} finally {
JedisPoolUtil.release(jedis);
}
return res;
}
/list操作
/**
* 从右边开始往List中添加数据
* @param key
* @param values
* @return 返回值为添加到List中元素的个数
*/
public static long listRpush(String key , String ... values){
long res = -1;
Jedis jedis = null;
try {
jedis = JedisPoolUtil.getJedis();
res = jedis.rpush(key, values);
} catch (Exception e) {
e.printStackTrace();
log.error("listRpush(): {} {},error:{}",key ,values,e);
} finally {
JedisPoolUtil.release(jedis);
}
return res;
}
/**
* 返回key中从start到end之间的元素
* @param key
* @param start
* @param end
* @return
*/
public static List listLrange(String key,int start ,int end){
List res = null;
Jedis jedis = null;
try {
jedis = JedisPoolUtil.getJedis();
res = jedis.lrange(key,start,end);
} catch (Exception e) {
e.printStackTrace();
log.error("listRpush(): {} {} {},error:{}",key ,start,end,e);
} finally {
JedisPoolUtil.release(jedis);
}
return res;
}
/hash操作
public static long mapHset(String key, String field, String value) {
long res = -1;
Jedis jedis = null;
try {
jedis = JedisPoolUtil.getJedis();
res = jedis.hset(key, field, value);
} catch (Exception e) {
e.printStackTrace();
log.info("mapHset() {} {} {} , errors {}",key,field,value,e);
} finally {
JedisPoolUtil.release(jedis);
}
return res;
}
public static String mapHget(String key, String field) {
String res = null;
Jedis jedis = null;
try {
jedis = JedisPoolUtil.getJedis();
res = jedis.hget(key, field);
} catch (Exception e) {
e.printStackTrace();
log.info("mapHget() {} {} , errors {}",key,field,e);
} finally {
JedisPoolUtil.release(jedis);
}
return res;
}
public static String mapHmset(String key, Map map) {
String res = null;
Jedis jedis = null;
try {
jedis = JedisPoolUtil.getJedis();
res = jedis.hmset(key, map);
} catch (Exception e) {
e.printStackTrace();
log.info("mapHmset() {} {} , errors {}",key,map,e);
} finally {
JedisPoolUtil.release(jedis);
}
return res;
}
public static List mapHmget(String key, String... fields) {
List res = null;
Jedis jedis = null;
try {
jedis = JedisPoolUtil.getJedis();
res = jedis.hmget(key, fields);
} catch (Exception e) {
e.printStackTrace();
log.info("mapHmget() {} {} , errors {}",key,fields,e);
} finally {
JedisPoolUtil.release(jedis);
}
return res;
}
//......
}
工具类测试代码
public class JedisUtilTest {
//key 操作
@Test
public void del(){
long res = JedisUtil.del("list");
System.out.println(res);
}
//string 操作
@Test
public void strSet1() {
String res = JedisUtil.strSet("k2", "v2",60);
System.out.println(res);
}
@Test
public void strSet2() {
String res = JedisUtil.strSet("k3", "v3");
System.out.println(res);
}
@Test
public void strGet() {
String k1 = JedisUtil.strGet("k1");
System.out.println(k1);
}
@Test
public void strMset(){
String res = JedisUtil.strMset("k1", "v1", "k2", "v2");
System.out.println(res);
}
@Test
public void strMget(){
List res = JedisUtil.strMget("k1", "k2");
System.out.println(res);
}
//list 操作
@Test
public void listRpush(){
long res = JedisUtil.listRpush("list", "aa", "cc", "dd", "bb", "aa");
System.out.println(res);
}
@Test
public void listLrange(){
List res = JedisUtil.listLrange("list", 0, -1);
for (String item : res) {
System.out.println(item);
}
}
/hash操作
@Test
public void mapHset(){
long res = JedisUtil.mapHset("map", "name", "zhangsan");
System.out.println(res);
}
@Test
public void mapHget(){
String res = JedisUtil.mapHget("map", "name");
System.out.println(res);
}
@Test
public void mapHmset(){
Map map = new HashMap();
map.put("name","zhangsan");
map.put("age","18");
map.put("birth","1999-09-21");
String res = JedisUtil.mapHmset("map",map);
System.out.println(res);
}
@Test
public void mapHmget(){
List res = JedisUtil.mapHmget("map", "name","age","birth");
System.out.println(res);
}
//......
}