1,该文章主要介绍如何使用Jedis操作单节点redis数据,后续两篇文章将介绍Jedis操作redis集群及redisTemplate操作redis集群;码云上面地址:https://gitee.com/dream21th/dream21th-redis


2,项目的pom文件如下:


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.dream21th</groupId>
 <artifactId>dream21th-redis</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>
 <name>dream21th-redis</name>
 <description>Demo project for Spring Boot</description>
 <parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>1.5.13.RELEASE</version>
 <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <java.version>1.8</java.version>
 </properties>
 <dependencies>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-data-redis</artifactId>
 </dependency>
 <dependency>
 <groupId>org.projectlombok</groupId>
 <artifactId>lombok</artifactId>
 </dependency>
 <dependency>
 <groupId>com.alibaba</groupId>
 <artifactId>fastjson</artifactId>
 <version>1.2.41</version>
 </dependency>
        <!-- Swagger2 配置 -->
 <dependency>
 <groupId>io.springfox</groupId>
 <artifactId>springfox-swagger2</artifactId>
 <version>2.7.0</version>
 </dependency>
 <dependency>
 <groupId>io.springfox</groupId>
 <artifactId>springfox-swagger-ui</artifactId>
 <version>2.7.0</version>
 </dependency>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-test</artifactId>
 <scope>test</scope>
 </dependency>
 </dependencies>
 <build>
 <plugins>
 <plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 </plugin>
 </plugins>
 </build>
</project>

3,项目的application.properties配置

#redis

redis.host=192.168.1.81

redis.port=6379

redis.timeout=3

#redis.password=123456

redis.poolMaxTotal=10

redis.poolMaxIdle=10

redis.poolMaxWait=3

4,项目的config配置

@Service
public class RedisPoolFactory extends CachingConfigurerSupport{
 @Autowired
 RedisConfig redisConfig;
 /**
  * redis单例模式
  * @return
  */
 @Bean
 public JedisPool JedisPoolFactory() {
 JedisPoolConfig poolConfig = new JedisPoolConfig();
 poolConfig.setMaxIdle(redisConfig.getPoolMaxIdle());
 poolConfig.setMaxTotal(redisConfig.getPoolMaxTotal());
 poolConfig.setMaxWaitMillis(redisConfig.getPoolMaxWait() * 1000);
 JedisPool jp = new JedisPool(poolConfig, redisConfig.getHost(), redisConfig.getPort(),
 redisConfig.getTimeout()*1000, redisConfig.getPassword(), 0);
 return jp;
 }
}

5,项目主要的方法

package com.dream21th.dream21thredis.redis;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.dream21th.dream21thredis.key.KeyPrefix;
import com.dream21th.dream21thredis.util.ObjectUtils;
import com.dream21th.dream21thredis.util.StringUtils;
import lombok.extern.slf4j.Slf4j;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.exceptions.JedisException;


/**
 * 单机方式redis连接客户端
 * 
 * @author dream21th
 *
 */
@Slf4j
@Service("jedisClient")
public class JedisClient implements IJedisClient {


 @Autowired
 private JedisPool jedisPool;

 /**
  * 获取对象值
  * */
 public <T> T get(KeyPrefix prefix, String key,  Class<T> clazz) {
  Jedis jedis = null;
  try {
  jedis =  jedisPool.getResource();
  //key
  String realKey  = prefix.getPrefix() + key;
  String  str = jedis.get(realKey);
  T t = ObjectUtils.stringToBean(str, clazz);
  return t;
  }finally {
  returnResource(jedis);
  }
 }

 /**
  * 给对象设定值
  * */
 public <T> boolean set(KeyPrefix prefix, String key,  T value) {
  Jedis jedis = null;
  try {
  jedis =  jedisPool.getResource();
  String str =ObjectUtils.beanToString(value);
  if(str == null || str.length() <= 0) {
  return false;
  }
 //key
  String realKey  = prefix.getPrefix() + key;
  int seconds =  prefix.expireSeconds();
  if(seconds <= 0) {
  jedis.set(realKey, str);
  }else {
  jedis.setex(realKey, seconds, str);
  }
  return true;
  }finally {
  returnResource(jedis);
  }
 }

 @Override
 public <T> T getT(String key) {
 T value = null;
 Jedis jedis = null;
 try {
 jedis = getResource();
 if (jedis.exists(getBytesKey(key))) {
 value = toT(jedis.get(getBytesKey(key)));
 log.debug("getObject {} = {}", key, value);
 }
 } catch (Exception e) {
 log.warn("getObject {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return value;
 }


 @Override
 public <T> String setT(String key, T value, int cacheSeconds) {
 String result = null;
 Jedis jedis = null;
 try {
 jedis = getResource();
 result = jedis.set(getBytesKey(key), toBytes(value));
 if (cacheSeconds != 0) {
 jedis.expire(key, cacheSeconds);
 }
 log.debug("setObject {} = {}", key, value);
 } catch (Exception e) {
 log.warn("setObject {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }

 /**
  * 判断键值是否存在
  * */
 public <T> boolean exists(KeyPrefix prefix, String key) {
  Jedis jedis = null;
  try {
  jedis =  jedisPool.getResource();
 //key
  String realKey  = prefix.getPrefix() + key;
 return  jedis.exists(realKey);
  }finally {
  returnResource(jedis);
  }
 }

 /**
  * 增加一个值
  * */
 public <T> Long incr(KeyPrefix prefix, String key) {
  Jedis jedis = null;
  try {
  jedis =  jedisPool.getResource();
 //key
  String realKey  = prefix.getPrefix() + key;
 return  jedis.incr(realKey);
  }finally {
  returnResource(jedis);
  }
 }

 /**
  * 减少一个值
  * */
 public <T> Long decr(KeyPrefix prefix, String key) {
  Jedis jedis = null;
  try {
  jedis =  jedisPool.getResource();
 //key
  String realKey  = prefix.getPrefix() + key;
 return  jedis.decr(realKey);
  }finally {
  returnResource(jedis);
  }
 }
 /**
  * 获取缓存
  * 
  * @param key
  *            键
  * @return 值
  */
 public String get(String key) {
 String value = null;
 Jedis jedis = null;
 try {
 jedis = getResource();
 if (jedis.exists(key)) {
 value = jedis.get(key);
 value = StringUtils.isNotBlank(value) && !"nil".equalsIgnoreCase(value) ? value : null;
 log.debug("get {} = {}", key, value);
 }
 } catch (Exception e) {
 log.warn("get {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return value;
 }


 /**
  * 获取缓存
  * 
  * @param key
  *            键
  * @return 值
  */
 public Object getObject(String key) {
 Object value = null;
 Jedis jedis = null;
 try {
 jedis = getResource();
 if (jedis.exists(getBytesKey(key))) {
 value = toObject(jedis.get(getBytesKey(key)));
 log.debug("getObject {} = {}", key, value);
 }
 } catch (Exception e) {
 log.warn("getObject {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return value;
 }


 /**
  * 设置缓存
  * 
  * @param key
  *            键
  * @param value
  *            值
  * @param cacheSeconds
  *            超时时间,0为不超时
  * @return
  */
 public String set(String key, String value, int cacheSeconds) {
 String result = null;
 Jedis jedis = null;
 try {
 jedis = getResource();
 result = jedis.set(key, value);
 if (cacheSeconds != 0) {
 jedis.expire(key, cacheSeconds);
 }
 log.debug("set {} = {}", key, value);
 } catch (Exception e) {
 log.warn("set {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }


 /**
  * 设置缓存
  * 
  * @param key
  *            键
  * @param value
  *            值
  * @param cacheSeconds
  *            超时时间,0为不超时
  * @return
  */
 public String setObject(String key, Object value, int cacheSeconds) {
 String result = null;
 Jedis jedis = null;
 try {
 jedis = getResource();
 result = jedis.set(getBytesKey(key), toBytes(value));
 if (cacheSeconds != 0) {
 jedis.expire(key, cacheSeconds);
 }
 log.debug("setObject {} = {}", key, value);
 } catch (Exception e) {
 log.warn("setObject {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }


 /**
  * 获取List缓存
  * 
  * @param key
  *            键
  * @return 值
  */
 public List<String> getList(String key) {
 List<String> value = null;
 Jedis jedis = null;
 try {
 jedis = getResource();
 if (jedis.exists(key)) {
 value = jedis.lrange(key, 0, -1);
 log.debug("getList {} = {}", key, value);
 }
 } catch (Exception e) {
 log.warn("getList {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return value;
 }


 /**
  * 获取List缓存
  * 
  * @param key
  *            键
  * @return 值
  */
 public List<Object> getObjectList(String key) {
 List<Object> value = null;
 Jedis jedis = null;
 try {
 jedis = getResource();
 if (jedis.exists(getBytesKey(key))) {
 List<byte[]> list = jedis.lrange(getBytesKey(key), 0, -1);
 value = new ArrayList<Object>();
 for (byte[] bs : list) {
 value.add(toObject(bs));
 }
 log.debug("getObjectList {} = {}", key, value);
 }
 } catch (Exception e) {
 log.warn("getObjectList {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return value;
 }


 /**
  * 设置List缓存
  * 
  * @param key
  *            键
  * @param value
  *            值
  * @param cacheSeconds
  *            超时时间,0为不超时
  * @return
  */
 public long setList(String key, List<String> value, int cacheSeconds) {
 long result = 0;
 Jedis jedis = null;
 try {
 jedis = getResource();


 if (jedis.exists(key)) {
 jedis.del(key);
 }


 /**
  * 采用集合的toArray()方法直接把List集合转换成数组,这里需要注意,不能这样写: String[] array = (String[])
  * mlist.toArray();
  * 这样写的话,编译运行时会报类型无法转换java.lang.ClassCastException的错误,这是为何呢,这样写看起来没有问题啊
  * 因为java中的强制类型转换是针对单个对象才有效果的,而List是多对象的集合,所以将整个List强制转换是不行的 正确的写法应该是这样的
  */
 result = jedis.rpush(key, value.toArray(new String[0]));
 if (cacheSeconds != 0) {
 jedis.expire(key, cacheSeconds);
 }
 log.debug("setList {} = {}", key, value);
 } catch (Exception e) {
 log.warn("setList {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }


 /**
  * 设置List缓存
  * 
  * @param key
  *            键
  * @param value
  *            值
  * @param cacheSeconds
  *            超时时间,0为不超时
  * @return
  */
 public long setObjectList(String key, List<Object> value, int cacheSeconds) {
 long result = 0;
 Jedis jedis = null;
 try {
 jedis = getResource();


 if (jedis.exists(getBytesKey(key))) {
 jedis.del(key);
 }


 List<byte[]> list = new ArrayList<byte[]>();
 for (Object o : value) {
 list.add(toBytes(o));
 }
 /*byte[][] bytes=new byte[list.size()][];
 for(int i=0;i<list.size();i++) {
 bytes[i]=list.get(i);
 }*/
 result = jedis.rpush(getBytesKey(key),list.toArray(new byte[0][]));
 if (cacheSeconds != 0) {
 jedis.expire(key, cacheSeconds);
 }
 log.debug("setObjectList {} = {}", key, value);
 } catch (Exception e) {
 log.warn("setObjectList {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }
 /**
  * 向List缓存中添加值
  * 
  * @param key
  *            键
  * @param value
  *            值
  * @return
  */
 public long listAdd(String key, String... value) {
 long result = 0;
 Jedis jedis = null;
 try {
 jedis = getResource();
 result = jedis.rpush(key, value);
 log.debug("listAdd {} = {}", key, value);
 } catch (Exception e) {
 log.warn("listAdd {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }


 /**
  * 向List缓存中添加值
  * 
  * @param key
  *            键
  * @param value
  *            值
  * @return
  */
 public long listObjectAdd(String key, Object... value) {
 long result = 0;
 Jedis jedis = null;
 try {
 jedis = getResource();
 List<byte[]> list = new ArrayList<byte[]>();
 for (Object o : value) {
 list.add(toBytes(o));
 }
 result = jedis.rpush(getBytesKey(key), list.toArray(new byte[0][]));
 log.debug("listObjectAdd {} = {}", key, value);
 } catch (Exception e) {
 log.warn("listObjectAdd {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }


 /**
  * 获取缓存
  * 
  * @param key
  *            键
  * @return 值
  */
 public Set<String> getSet(String key) {
 Set<String> value = null;
 Jedis jedis = null;
 try {
 jedis = getResource();
 if (jedis.exists(key)) {
 value = jedis.smembers(key);
 log.debug("getSet {} = {}", key, value);
 }
 } catch (Exception e) {
 log.warn("getSet {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return value;
 }


 /**
  * 获取缓存
  * 
  * @param key
  *            键
  * @return 值
  */
 public Set<Object> getObjectSet(String key) {
 Set<Object> value = null;
 Jedis jedis = null;
 try {
 jedis = getResource();
 if (jedis.exists(getBytesKey(key))) {
 value = new HashSet<Object>();
 Set<byte[]> set = jedis.smembers(getBytesKey(key));
 for (byte[] bs : set) {
 value.add(toObject(bs));
 }
 log.debug("getObjectSet {} = {}", key, value);
 }
 } catch (Exception e) {
 log.warn("getObjectSet {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return value;
 }


 /**
  * 设置Set缓存
  * 
  * @param key
  *            键
  * @param value
  *            值
  * @param cacheSeconds
  *            超时时间,0为不超时
  * @return
  */
 public long setSet(String key, Set<String> value, int cacheSeconds) {
 long result = 0;
 Jedis jedis = null;
 try {
 jedis = getResource();
 if (jedis.exists(key)) {
 jedis.del(key);
 }
 result = jedis.sadd(key, (String[]) value.toArray());
 if (cacheSeconds != 0) {
 jedis.expire(key, cacheSeconds);
 }
 log.debug("setSet {} = {}", key, value);
 } catch (Exception e) {
 log.warn("setSet {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }


 /**
  * 设置Set缓存
  * 
  * @param key
  *            键
  * @param value
  *            值
  * @param cacheSeconds
  *            超时时间,0为不超时
  * @return
  */
 public long setObjectSet(String key, Set<Object> value, int cacheSeconds) {
 long result = 0;
 Jedis jedis = null;
 try {
 jedis = getResource();
 if (jedis.exists(getBytesKey(key))) {
 jedis.del(key);
 }
 Set<byte[]> set = new HashSet<byte[]>();
 for (Object o : value) {
 set.add(toBytes(o));
 }
 result = jedis.sadd(getBytesKey(key), (byte[][]) set.toArray());
 if (cacheSeconds != 0) {
 jedis.expire(key, cacheSeconds);
 }
 log.debug("setObjectSet {} = {}", key, value);
 } catch (Exception e) {
 log.warn("setObjectSet {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }


 /**
  * 向Set缓存中添加值
  * 
  * @param key
  *            键
  * @param value
  *            值
  * @return
  */
 public long setSetAdd(String key, String... value) {
 long result = 0;
 Jedis jedis = null;
 try {
 jedis = getResource();
 result = jedis.sadd(key, value);
 log.debug("setSetAdd {} = {}", key, value);
 } catch (Exception e) {
 log.warn("setSetAdd {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }


 /**
  * 向Set缓存中添加值
  * 
  * @param key
  *            键
  * @param value
  *            值
  * @return
  */
 public long setSetObjectAdd(String key, Object... value) {
 long result = 0;
 Jedis jedis = null;
 try {
 jedis = getResource();
 Set<byte[]> set = new HashSet<byte[]>();
 for (Object o : value) {
 set.add(toBytes(o));
 }
 result = jedis.rpush(getBytesKey(key), set.toArray(new byte[0][]));
 log.debug("setSetObjectAdd {} = {}", key, value);
 } catch (Exception e) {
 log.warn("setSetObjectAdd {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }


 /**
  * 获取Map缓存
  * 
  * @param key
  *            键
  * @return 值
  */
 public Map<String, String> getMap(String key) {
 Map<String, String> value = null;
 Jedis jedis = null;
 try {
 jedis = getResource();
 if (jedis.exists(key)) {
 value = jedis.hgetAll(key);
 log.debug("getMap {} = {}", key, value);
 }
 } catch (Exception e) {
 log.warn("getMap {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return value;
 }


 /**
  * 获取Map缓存
  * 
  * @param key
  *            键
  * @return 值
  */
 public Map<String, Object> getObjectMap(String key) {
 Map<String, Object> value = null;
 Jedis jedis = null;
 try {
 jedis = getResource();
 if (jedis.exists(getBytesKey(key))) {
 value = new HashMap<String, Object>();
 Map<byte[], byte[]> map = jedis.hgetAll(getBytesKey(key));
 for (Map.Entry<byte[], byte[]> e : map.entrySet()) {
 value.put(StringUtils.toString(e.getKey()), toObject(e.getValue()));
 }
 log.debug("getObjectMap {} = {}", key, value);
 }
 } catch (Exception e) {
 log.warn("getObjectMap {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return value;
 }


 /**
  * 设置Map缓存
  * 
  * @param key
  *            键
  * @param value
  *            值
  * @param cacheSeconds
  *            超时时间,0为不超时
  * @return
  */
 public String setMap(String key, Map<String, String> value, int cacheSeconds) {
 String result = null;
 Jedis jedis = null;
 try {
 jedis = getResource();


 if (jedis.exists(key)) {
 jedis.del(key);
 }


 result = jedis.hmset(key, value);
 if (cacheSeconds != 0) {
 jedis.expire(key, cacheSeconds);
 }
 log.debug("setMap {} = {}", key, value);
 } catch (Exception e) {
 log.warn("setMap {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }


 /**
  * 设置Map缓存
  * 
  * @param key
  *            键
  * @param value
  *            值
  * @param cacheSeconds
  *            超时时间,0为不超时
  * @return
  */
 public String setObjectMap(String key, Map<String, Object> value, int cacheSeconds) {
 String result = null;
 Jedis jedis = null;
 try {
 jedis = getResource();


 if (jedis.exists(getBytesKey(key))) {
 jedis.del(key);
 }


 Map<byte[], byte[]> map = new HashMap<byte[], byte[]>();
 for (Map.Entry<String, Object> e : value.entrySet()) {
 map.put(getBytesKey(e.getKey()), toBytes(e.getValue()));
 }
 result = jedis.hmset(getBytesKey(key), (Map<byte[], byte[]>) map);
 if (cacheSeconds != 0) {
 jedis.expire(key, cacheSeconds);
 }
 log.debug("setObjectMap {} = {}", key, value);
 } catch (Exception e) {
 log.warn("setObjectMap {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }


 /**
  * 向Map缓存中添加值
  * 
  * @param key
  *            键
  * @param value
  *            值
  * @return
  */
 public String mapPut(String key, Map<String, String> value) {
 String result = null;
 Jedis jedis = null;
 try {
 jedis = getResource();
 result = jedis.hmset(key, value);
 log.debug("mapPut {} = {}", key, value);
 } catch (Exception e) {
 log.warn("mapPut {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }


 /**
  * 向Map缓存中添加值
  * 
  * @param key
  *            键
  * @param value
  *            值
  * @return
  */
 public String mapObjectPut(String key, Map<String, Object> value) {
 String result = null;
 Jedis jedis = null;
 try {
 jedis = getResource();
 Map<byte[], byte[]> map = new HashMap<byte[], byte[]>();
 for (Map.Entry<String, Object> e : value.entrySet()) {
 map.put(getBytesKey(e.getKey()), toBytes(e.getValue()));
 }
 result = jedis.hmset(getBytesKey(key), (Map<byte[], byte[]>) map);
 log.debug("mapObjectPut {} = {}", key, value);
 } catch (Exception e) {
 log.warn("mapObjectPut {} = {}", key, value, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }


 /**
  * 移除Map缓存中的值
  * 
  * @param key
  *            键
  * @param value
  *            值
  * @return
  */
 public long mapRemove(String key, String mapKey) {
 long result = 0;
 Jedis jedis = null;
 try {
 jedis = getResource();
 result = jedis.hdel(key, mapKey);
 log.debug("mapRemove {}  {}", key, mapKey);
 } catch (Exception e) {
 log.warn("mapRemove {}  {}", key, mapKey, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }


 /**
  * 移除Map缓存中的值
  * 
  * @param key
  *            键
  * @param value
  *            值
  * @return
  */
 public long mapObjectRemove(String key, String mapKey) {
 long result = 0;
 Jedis jedis = null;
 try {
 jedis = getResource();
 result = jedis.hdel(getBytesKey(key), getBytesKey(mapKey));
 log.debug("mapObjectRemove {}  {}", key, mapKey);
 } catch (Exception e) {
 log.warn("mapObjectRemove {}  {}", key, mapKey, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }


 /**
  * 判断Map缓存中的Key是否存在
  * 
  * @param key
  *            键
  * @param value
  *            值
  * @return
  */
 public boolean mapExists(String key, String mapKey) {
 boolean result = false;
 Jedis jedis = null;
 try {
 jedis = getResource();
 result = jedis.hexists(key, mapKey);
 log.debug("mapExists {}  {}", key, mapKey);
 } catch (Exception e) {
 log.warn("mapExists {}  {}", key, mapKey, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }


 /**
  * 判断Map缓存中的Key是否存在
  * 
  * @param key
  *            键
  * @param value
  *            值
  * @return
  */
 public boolean mapObjectExists(String key, String mapKey) {
 boolean result = false;
 Jedis jedis = null;
 try {
 jedis = getResource();
 result = jedis.hexists(getBytesKey(key), getBytesKey(mapKey));
 log.debug("mapObjectExists {}  {}", key, mapKey);
 } catch (Exception e) {
 log.warn("mapObjectExists {}  {}", key, mapKey, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }


 /**
  * 删除缓存
  * 
  * @param key
  *            键
  * @return
  */
 public long del(String key) {
 long result = 0;
 Jedis jedis = null;
 try {
 jedis = getResource();
 if (jedis.exists(key)) {
 result = jedis.del(key);
 log.debug("del {}", key);
 } else {
 log.debug("del {} not exists", key);
 }
 } catch (Exception e) {
 log.warn("del {}", key, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }


 /**
  * 删除缓存
  * 
  * @param key
  *            键
  * @return
  */
 public long delObject(String key) {
 long result = 0;
 Jedis jedis = null;
 try {
 jedis = getResource();
 if (jedis.exists(getBytesKey(key))) {
 result = jedis.del(getBytesKey(key));
 log.debug("delObject {}", key);
 } else {
 log.debug("delObject {} not exists", key);
 }
 } catch (Exception e) {
 log.warn("delObject {}", key, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }


 /**
  * 缓存是否存在
  * 
  * @param key
  *            键
  * @return
  */
 public boolean exists(String key) {
 boolean result = false;
 Jedis jedis = null;
 try {
 jedis = getResource();
 result = jedis.exists(key);
 log.debug("exists {}", key);
 } catch (Exception e) {
 log.warn("exists {}", key, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }


 /**
  * 缓存是否存在
  * 
  * @param key
  *            键
  * @return
  */
 public boolean existsObject(String key) {
 boolean result = false;
 Jedis jedis = null;
 try {
 jedis = getResource();
 result = jedis.exists(getBytesKey(key));
 log.debug("existsObject {}", key);
 } catch (Exception e) {
 log.warn("existsObject {}", key, e);
 } finally {
 returnResource(jedis);
 }
 return result;
 }


 /**
  * 获取资源
  * 
  * @return
  * @throws JedisException
  */
 public Jedis getResource() throws JedisException {
 Jedis jedis = null;
 try {
 jedis = jedisPool.getResource();
 // log.debug("getResource.", jedis);
 } catch (JedisException e) {
 log.warn("getResource.", e);
 returnBrokenResource(jedis);
 throw e;
 }
 return jedis;
 }


 /**
  * 归还资源
  * 
  * @param jedis
  * @param isBroken
  */
 public void returnBrokenResource(Jedis jedis) {
 if (jedis != null) {
 // jedisPool.returnBrokenResource(jedis);
 jedis.close();
 }
 }


 /**
  * 释放资源
  * 
  * @param jedis
  * @param isBroken
  */
 public void returnResource(Jedis jedis) {
 if (jedis != null) {
 // jedisPool.returnResource(jedis);
 jedis.close();
 }
 }


 /**
  * 获取byte[]类型Key
  * 
  * @param key
  * @return
  */
 public static byte[] getBytesKey(Object object) {
 if (object instanceof String) {
 return StringUtils.getBytes((String) object);
 } else {
 return ObjectUtils.serialize(object);
 }
 }


 /**
  * Object转换byte[]类型
  * 
  * @param key
  * @return
  */
 public static byte[] toBytes(Object object) {
 return ObjectUtils.serialize(object);
 }


 /**
  * byte[]型转换Object
  * 
  * @param key
  * @return
  */
 public static Object toObject(byte[] bytes) {
 return ObjectUtils.unserialize(bytes);
 }


 /**
  * byte[]型转换T
  * 
  * @param key
  * @return
  */
 public static <T> T toT(byte[] bytes) {
 return ObjectUtils.unserializeT(bytes);
 }
}

6,controller测试

package com.dream21th.dream21thredis.controller;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.dream21th.dream21thredis.dto.Person;
import com.dream21th.dream21thredis.dto.Student;
import com.dream21th.dream21thredis.key.UserKey;
import com.dream21th.dream21thredis.redis.IJedisClient;
import com.dream21th.dream21thredis.result.Result;
import com.dream21th.dream21thredis.service.RedisService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RestController
@RequestMapping("/singleNode")
@Api(tags="单节点redis操作")
public class RedisSingleNodeController {
 @Autowired
 private IJedisClient jedisClient;
 @Autowired
 private RedisService redisService;

    @PostMapping("/mapTest/{key}")
    @ApiOperation(value = "map测试", notes = "map测试")
 public Result<Map<String,String>> mapTest(@PathVariable("key") String key,@RequestBody Map<String,String> map){
 jedisClient.setMap(key, map,0);
 return Result.success(jedisClient.getMap(key));
 }

    @PostMapping("/listTest/{key}")
 public Result<List<String>> ListTest(@PathVariable("key") String key,@RequestBody List<String> list){
 jedisClient.setList(key, list, 0);
 return Result.success(jedisClient.getList(key));
 }
    
    @PostMapping("/listTestObj/{key}")
 public Result<List<Object>> listTestObj(@PathVariable("key") String key,@RequestBody List<Object> list){
 jedisClient.setObjectList(key, list, 0);
 return Result.success(jedisClient.getObjectList(key));
 }
    
    @PostMapping("/listTestT")
 public  Result<Student> listTestT(@RequestBody Student t){
 jedisClient.set(UserKey.getById, "name",t);
 log.info("键值是否存在:{}",jedisClient.exists(UserKey.getById, "name"));
 redisService.getResult();
 return Result.success(jedisClient.get(UserKey.getById, "name",Student.class));
 }
    
    @PostMapping("/decIcrTest")
 public  Result<Long> decIcrTest(long num){
 jedisClient.set(UserKey.getById, "count",num);
 log.info("键值是否存在:{}",jedisClient.exists(UserKey.getById, "count"));
 log.info("加1后值:{}",jedisClient.incr(UserKey.getById, "count"));
 log.info("减1后值:{}",jedisClient.decr(UserKey.getById, "count"));
 return Result.success(jedisClient.get(UserKey.getById, "count",Long.class));
 }
    
    @PostMapping("/testObj")
 public  Result<Student> testObj(@RequestBody Student t){
     jedisClient.setObject("student", t, 0);
 return Result.success((Student)jedisClient.getObject("student"));
 }
    
    @PostMapping("/testT")
 public  Result<Student> testT(@RequestBody Student t){
     jedisClient.setObject("student", t, 0);
 return Result.success(jedisClient.getT("student"));
 }
    
    @PostMapping("/testT1")
 public  Result<Person> testT1(@RequestBody Person t){
     jedisClient.setT("person", t, 0);
 return Result.success(jedisClient.getT("person"));
 }
    
    @PostMapping("/testList")
 public  Result<List<Student>> testList(@RequestBody Student t){
 return Result.success(redisService.getList());
 }
    
    @PostMapping("/mapTestT")
    @ApiOperation(value = "传入对象,以map获取值", notes = "传入对象,以map获取值")
 public  Result<Map> mapTestT(@RequestBody Student t){
 jedisClient.set(UserKey.getById, "map",t);
 log.info("键值是否存在:{}",jedisClient.exists(UserKey.getById, "map"));
 redisService.getResult();
 return Result.success(jedisClient.get(UserKey.getById, "map",Map.class));
 }
}