1. 将jedis的依赖放进Maven
        <dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.7.1</version>
</dependency>
  1. 将application.properties 改名为 application.yaml (个人感觉yaml更为直观一点)

    然后写入如下配置:
spring:
application:
name: springboot-jedis
server:
port: 8080
redis:
database: 0
host: 0.0.0.0
port: 6379
password: ************
connect-timeout: 30000
jedis:
pool:
min-idle: 0
max-active: 8
max-idle: 8
max-wait: -1
test-on-borrow: true
  1. 创建config package,将redis配置类写入
package com.tao.springbootjedis.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig; /**
* @ClassName JedisConfig
* @Description TODO
* @Author admin
* @Version 1.0
*/
@Configuration
public class JedisConfig { private Logger logger = LoggerFactory.getLogger(JedisConfig.class); @Value("${spring.redis.host}")
private String host; @Value("${spring.redis.port}")
private int port; @Value("${spring.redis.password}")
private String password;
@Value("${spring.redis.connect-timeout}")
private int timeout; @Value("${spring.redis.jedis.pool.max-active}")
private int maxActive; @Value("${spring.redis.jedis.pool.max-idle}")
private int maxIdle; @Value("${spring.redis.jedis.pool.min-idle}")
private int minIdle; @Bean
public JedisPool jedisPool() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMinIdle(minIdle);
jedisPoolConfig.setMaxTotal(maxActive);
JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, password);
logger.info("JedisPool连接成功:" + host + "\t" + port);
return jedisPool;
}
}
  1. 常见Utils package,将redis工具类放入
package com.tao.springbootjedis.utils;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.List;
import java.util.Map;
import java.util.Set; /**
* redis
*/
@Component
@Slf4j
public class RedisUtil { @Autowired
JedisPool jedisPool; /**
* 通过key获取储存在redis中的value
*
* @param key
* @return 成功返回value 失败返回null
*/
public String get(String key) {
Jedis jedis = null;
String value = null;
try {
jedis = jedisPool.getResource();
value = jedis.get(key);
} catch (Exception e) {
log.error("redis get", e);
} finally {
returnResource(jedis);
}
return value;
} /**
* 向redis存入key和value,并释放连接资源
*
* @param key
* @param value
* @return 成功 返回OK 失败返回 0
*/
public String set(String key, String value) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.set(key, value);
} catch (Exception e) {
log.error("redis set", e);
return null;
} finally {
returnResource(jedis);
}
} /**
* 删除指定的key,也可以传入一个包含key的数组
*
* @param keys 一个key 也可以使 string 数组
* @return 返回删除成功的个数
*/
public Long del(String... keys) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.del(keys);
} catch (Exception e) {
log.error("redis del", e);
return 0L;
} finally {
returnResource(jedis);
}
} /**
* 通过key向指定的value值追加值
*
* @param key
* @param str
* @return 成功返回 添加后value的长度 失败 返回 添加的 value 的长度 异常返回0L
*/
public Long append(String key, String str) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.append(key, str);
} catch (Exception e) {
log.error("redis append", e);
return 0L;
} finally {
returnResource(jedis);
}
return res;
} /**
* 判断key是否存在
*
* @param key
* @return true OR false
*/
public Boolean exists(String key) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.exists(key);
} catch (Exception e) {
log.error("redis exists", e);
return false;
} finally {
returnResource(jedis);
}
} /**
* 清空当前数据库中的所有 key,此命令从不失败。
*
* @return 总是返回 OK
*/
public String flushDB() {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.flushDB();
} catch (Exception e) {
log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return null;
} /**
* 为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。
*
* @param key
* @param value 过期时间,单位:秒
* @return 成功返回1 如果存在 和 发生异常 返回 0
*/
public Long expire(String key, int value) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.expire(key, value);
} catch (Exception e) {
log.error(e.getMessage());
return 0L;
} finally {
returnResource(jedis);
}
} /**
* 以秒为单位,返回给定 key 的剩余生存时间
*
* @param key
* @return 当 key 不存在时,返回 -2 。当 key 存在但没有设置剩余生存时间时,返回 -1 。否则,以秒为单位,返回 key
* 的剩余生存时间。 发生异常 返回 0
*/
public Long ttl(String key) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.ttl(key);
} catch (Exception e) {
log.error(e.getMessage());
return 0L;
} finally {
returnResource(jedis);
}
} /**
* 新增key,并将 key 的生存时间 (以秒为单位)
*
* @param key
* @param seconds 生存时间 单位:秒
* @param value
* @return 设置成功时返回 OK 。当 seconds 参数不合法时,返回一个错误。
*/
public String setex(String key, int seconds, String value) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.setex(key, seconds, value);
} catch (Exception e) {
log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return null;
} /**
* <p>
* 设置key value,如果key已经存在则返回0,nx==> not exist
* </p>
*
* @param key
* @param value
* @return 成功返回1 如果存在 和 发生异常 返回 0
*/
public Long setnx(String key, String value) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.setnx(key, value);
} catch (Exception e) {
log.error(e.getMessage());
return 0L;
} finally {
returnResource(jedis);
}
} /**
* <p>
* 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
* </p>
* <p>
* 当 key 存在但不是字符串类型时,返回一个错误。
* </p>
*
* @param key
* @param value
* @return 返回给定 key 的旧值。当 key 没有旧值时,也即是, key 不存在时,返回 nil
*/
public String getSet(String key, String value) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.getSet(key, value);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return null;
} /**
* <p>
* 设置key value并制定这个键值的有效期
* </p>
*
* @param key
* @param value
* @param seconds 单位:秒
* @return 成功返回OK 失败和异常返回null
*/
public String setex(String key, String value, int seconds) {
Jedis jedis = null;
String res = null;
try {
jedis = jedisPool.getResource();
res = jedis.setex(key, seconds, value);
} catch (Exception e) {
log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key 和offset 从指定的位置开始将原先value替换
* </p>
* <p>
* 下标从0开始,offset表示从offset下标开始替换
* </p>
* <p>
* 如果替换的字符串长度过小则会这样
* </p>
* <p>
* example:
* </p>
* <p>
* value : bigsea@zto.cn
* </p>
* <p>
* str : abc
* </p>
* <P>
* 从下标7开始替换 则结果为
* </p>
* <p>
* RES : bigsea.abc.cn
* </p>
*
* @param key
* @param str
* @param offset 下标位置
* @return 返回替换后 value 的长度
*/
public Long setrange(String key, String str, int offset) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.setrange(key, offset, str);
} catch (Exception e) { log.error(e.getMessage());
return 0L;
} finally {
returnResource(jedis);
}
} /**
* <p>
* 通过批量的key获取批量的value
* </p>
*
* @param keys string数组 也可以是一个key
* @return 成功返回value的集合, 失败返回null的集合 ,异常返回空
*/
public List<String> mget(String... keys) {
Jedis jedis = null;
List<String> values = null;
try {
jedis = jedisPool.getResource();
values = jedis.mget(keys);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return values;
} /**
* <p>
* 批量的设置key:value,可以一个
* </p>
* <p>
* example:
* </p>
* <p>
* obj.mset(new String[]{"key2","value1","key2","value2"})
* </p>
*
* @param keysvalues
* @return 成功返回OK 失败 异常 返回 null
*/
public String mset(String... keysvalues) {
Jedis jedis = null;
String res = null;
try {
jedis = jedisPool.getResource();
res = jedis.mset(keysvalues);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 批量的设置key:value,可以一个,如果key已经存在则会失败,操作会回滚
* </p>
* <p>
* example:
* </p>
* <p>
* obj.msetnx(new String[]{"key2","value1","key2","value2"})
* </p>
*
* @param keysvalues
* @return 成功返回1 失败返回0
*/
public Long msetnx(String... keysvalues) {
Jedis jedis = null;
Long res = 0L;
try {
jedis = jedisPool.getResource();
res = jedis.msetnx(keysvalues);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 设置key的值,并返回一个旧值
* </p>
*
* @param key
* @param value
* @return 旧值 如果key不存在 则返回null
*/
public String getset(String key, String value) {
Jedis jedis = null;
String res = null;
try {
jedis = jedisPool.getResource();
res = jedis.getSet(key, value);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过下标 和key 获取指定下标位置的 value
* </p>
*
* @param key
* @param startOffset 开始位置 从0 开始 负数表示从右边开始截取
* @param endOffset
* @return 如果没有返回null
*/
public String getrange(String key, int startOffset, int endOffset) {
Jedis jedis = null;
String res = null;
try {
jedis = jedisPool.getResource();
res = jedis.getrange(key, startOffset, endOffset);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key 对value进行加值+1操作,当value不是int类型时会返回错误,当key不存在是则value为1
* </p>
*
* @param key
* @return 加值后的结果
*/
public Long incr(String key) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.incr(key);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key给指定的value加值,如果key不存在,则这是value为该值
* </p>
*
* @param key
* @param integer
* @return
*/
public Long incrBy(String key, Long integer) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.incrBy(key, integer);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 对key的值做减减操作,如果key不存在,则设置key为-1
* </p>
*
* @param key
* @return
*/
public Long decr(String key) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.decr(key);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 减去指定的值
* </p>
*
* @param key
* @param integer
* @return
*/
public Long decrBy(String key, Long integer) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.decrBy(key, integer);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key获取value值的长度
* </p>
*
* @param key
* @return 失败返回null
*/
public Long serlen(String key) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.strlen(key);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key给field设置指定的值,如果key不存在,则先创建
* </p>
*
* @param key
* @param field 字段
* @param value
* @return 如果存在返回0 异常返回null
*/
public Long hset(String key, String field, String value) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.hset(key, field, value);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key给field设置指定的值,如果key不存在则先创建,如果field已经存在,返回0
* </p>
*
* @param key
* @param field
* @param value
* @return
*/
public Long hsetnx(String key, String field, String value) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.hsetnx(key, field, value);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key同时设置 hash的多个field
* </p>
*
* @param key
* @param hash
* @return 返回OK 异常返回null
*/
public String hmset(String key, Map<String, String> hash, int indexdb) {
Jedis jedis = null;
String res = null;
try {
jedis = jedisPool.getResource();
jedis.select(indexdb);
res = jedis.hmset(key, hash);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key 和 field 获取指定的 value
* </p>
*
* @param key
* @param field
* @return 没有返回null
*/
public String hget(String key, String field) {
Jedis jedis = null;
String res = null;
try {
jedis = jedisPool.getResource();
res = jedis.hget(key, field);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key 和 fields 获取指定的value 如果没有对应的value则返回null
* </p>
*
* @param key
* @param fields 可以使 一个String 也可以是 String数组
* @return
*/
public List<String> hmget(String key, int indexdb, String... fields) {
Jedis jedis = null;
List<String> res = null;
try {
jedis = jedisPool.getResource();
jedis.select(indexdb);
res = jedis.hmget(key, fields);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key给指定的field的value加上给定的值
* </p>
*
* @param key
* @param field
* @param value
* @return
*/
public Long hincrby(String key, String field, Long value) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.hincrBy(key, field, value);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key和field判断是否有指定的value存在
* </p>
*
* @param key
* @param field
* @return
*/
public Boolean hexists(String key, String field) {
Jedis jedis = null;
Boolean res = false;
try {
jedis = jedisPool.getResource();
res = jedis.hexists(key, field);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key返回field的数量
* </p>
*
* @param key
* @return
*/
public Long hlen(String key) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.hlen(key);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res; } /**
* <p>
* 通过key 删除指定的 field
* </p>
*
* @param key
* @param fields 可以是 一个 field 也可以是 一个数组
* @return
*/
public Long hdel(String key, String... fields) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.hdel(key, fields);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key返回所有的field
* </p>
*
* @param key
* @return
*/
public Set<String> hkeys(String key) {
Jedis jedis = null;
Set<String> res = null;
try {
jedis = jedisPool.getResource();
res = jedis.hkeys(key);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key返回所有和key有关的value
* </p>
*
* @param key
* @return
*/
public List<String> hvals(String key) {
Jedis jedis = null;
List<String> res = null;
try {
jedis = jedisPool.getResource();
res = jedis.hvals(key);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key获取所有的field和value
* </p>
*
* @param key
* @return
*/
public Map<String, String> hgetall(String key, int indexdb) {
Jedis jedis = null;
Map<String, String> res = null;
try {
jedis = jedisPool.getResource();
jedis.select(indexdb);
res = jedis.hgetAll(key);
} catch (Exception e) {
log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key向list头部添加字符串
* </p>
*
* @param key
* @param strs 可以使一个string 也可以使string数组
* @return 返回list的value个数
*/
public Long lpush(int indexdb, String key, String... strs) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
jedis.select(indexdb);
res = jedis.lpush(key, strs);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key向list尾部添加字符串
* </p>
*
* @param key
* @param strs 可以使一个string 也可以使string数组
* @return 返回list的value个数
*/
public Long rpush(String key, String... strs) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.rpush(key, strs);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key设置list指定下标位置的value
* </p>
* <p>
* 如果下标超过list里面value的个数则报错
* </p>
*
* @param key
* @param index 从0开始
* @param value
* @return 成功返回OK
*/
public String lset(String key, Long index, String value) {
Jedis jedis = null;
String res = null;
try {
jedis = jedisPool.getResource();
res = jedis.lset(key, index, value);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key从对应的list中删除指定的count个 和 value相同的元素
* </p>
*
* @param key
* @param count 当count为0时删除全部
* @param value
* @return 返回被删除的个数
*/
public Long lrem(String key, long count, String value) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.lrem(key, count, value);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key保留list中从strat下标开始到end下标结束的value值
* </p>
*
* @param key
* @param start
* @param end
* @return 成功返回OK
*/
public String ltrim(String key, long start, long end) {
Jedis jedis = null;
String res = null;
try {
jedis = jedisPool.getResource();
res = jedis.ltrim(key, start, end);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key从list的头部删除一个value,并返回该value
* </p>
*
* @param key
* @return
*/
synchronized public String lpop(String key) {
Jedis jedis = null;
String res = null;
try {
jedis = jedisPool.getResource();
res = jedis.lpop(key);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key从list尾部删除一个value,并返回该元素
* </p>
*
* @param key
* @return
*/
synchronized public String rpop(String key, int indexdb) {
Jedis jedis = null;
String res = null;
try {
jedis = jedisPool.getResource();
jedis.select(indexdb);
res = jedis.rpop(key);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key从一个list的尾部删除一个value并添加到另一个list的头部,并返回该value
* </p>
* <p>
* 如果第一个list为空或者不存在则返回null
* </p>
*
* @param srckey
* @param dstkey
* @return
*/
public String rpoplpush(String srckey, String dstkey, int indexdb) {
Jedis jedis = null;
String res = null;
try {
jedis = jedisPool.getResource();
jedis.select(indexdb);
res = jedis.rpoplpush(srckey, dstkey);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key获取list中指定下标位置的value
* </p>
*
* @param key
* @param index
* @return 如果没有返回null
*/
public String lindex(String key, long index) {
Jedis jedis = null;
String res = null;
try {
jedis = jedisPool.getResource();
res = jedis.lindex(key, index);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key返回list的长度
* </p>
*
* @param key
* @return
*/
public Long llen(String key) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.llen(key);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key获取list指定下标位置的value
* </p>
* <p>
* 如果start 为 0 end 为 -1 则返回全部的list中的value
* </p>
*
* @param key
* @param start
* @param end
* @return
*/
public List<String> lrange(String key, long start, long end, int indexdb) {
Jedis jedis = null;
List<String> res = null;
try {
jedis = jedisPool.getResource();
jedis.select(indexdb);
res = jedis.lrange(key, start, end);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 将列表 key 下标为 index 的元素的值设置为 value
* </p>
*
* @param key
* @param index
* @param value
* @return 操作成功返回 ok ,否则返回错误信息
*/
public String lset(String key, long index, String value) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.lset(key, index, value);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return null;
} /**
* <p>
* 返回排序后的结果,排序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较。
* </p>
*
* @param key
* @return 返回列表形式的排序结果
*/
public List<String> sort(String key) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.sort(key);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return null;
} /**
* <p>
* 通过key向指定的set中添加value
* </p>
*
* @param key
* @param members 可以是一个String 也可以是一个String数组
* @return 添加成功的个数
*/
public Long sadd(String key, String... members) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.sadd(key, members);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key删除set中对应的value值
* </p>
*
* @param key
* @param members 可以是一个String 也可以是一个String数组
* @return 删除的个数
*/
public Long srem(String key, String... members) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.srem(key, members);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key随机删除一个set中的value并返回该值
* </p>
*
* @param key
* @return
*/
public String spop(String key) {
Jedis jedis = null;
String res = null;
try {
jedis = jedisPool.getResource();
res = jedis.spop(key);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key获取set中的差集
* </p>
* <p>
* 以第一个set为标准
* </p>
*
* @param keys 可以使一个string 则返回set中所有的value 也可以是string数组
* @return
*/
public Set<String> sdiff(String... keys) {
Jedis jedis = null;
Set<String> res = null;
try {
jedis = jedisPool.getResource();
res = jedis.sdiff(keys);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key获取set中的差集并存入到另一个key中
* </p>
* <p>
* 以第一个set为标准
* </p>
*
* @param dstkey 差集存入的key
* @param keys 可以使一个string 则返回set中所有的value 也可以是string数组
* @return
*/
public Long sdiffstore(String dstkey, String... keys) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.sdiffstore(dstkey, keys);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key获取指定set中的交集
* </p>
*
* @param keys 可以使一个string 也可以是一个string数组
* @return
*/
public Set<String> sinter(String... keys) {
Jedis jedis = null;
Set<String> res = null;
try {
jedis = jedisPool.getResource();
res = jedis.sinter(keys);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key获取指定set中的交集 并将结果存入新的set中
* </p>
*
* @param dstkey
* @param keys 可以使一个string 也可以是一个string数组
* @return
*/
public Long sinterstore(String dstkey, String... keys) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.sinterstore(dstkey, keys);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key返回所有set的并集
* </p>
*
* @param keys 可以使一个string 也可以是一个string数组
* @return
*/
public Set<String> sunion(String... keys) {
Jedis jedis = null;
Set<String> res = null;
try {
jedis = jedisPool.getResource();
res = jedis.sunion(keys);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key返回所有set的并集,并存入到新的set中
* </p>
*
* @param dstkey
* @param keys 可以使一个string 也可以是一个string数组
* @return
*/
public Long sunionstore(String dstkey, String... keys) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.sunionstore(dstkey, keys);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key将set中的value移除并添加到第二个set中
* </p>
*
* @param srckey 需要移除的
* @param dstkey 添加的
* @param member set中的value
* @return
*/
public Long smove(String srckey, String dstkey, String member) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.smove(srckey, dstkey, member);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key获取set中value的个数
* </p>
*
* @param key
* @return
*/
public Long scard(String key) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.scard(key);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key判断value是否是set中的元素
* </p>
*
* @param key
* @param member
* @return
*/
public Boolean sismember(String key, String member) {
Jedis jedis = null;
Boolean res = null;
try {
jedis = jedisPool.getResource();
res = jedis.sismember(key, member);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key获取set中随机的value,不删除元素
* </p>
*
* @param key
* @return
*/
public String srandmember(String key) {
Jedis jedis = null;
String res = null;
try {
jedis = jedisPool.getResource();
res = jedis.srandmember(key);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key获取set中所有的value
* </p>
*
* @param key
* @return
*/
public Set<String> smembers(String key) {
Jedis jedis = null;
Set<String> res = null;
try {
jedis = jedisPool.getResource();
res = jedis.smembers(key);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key向zset中添加value,score,其中score就是用来排序的
* </p>
* <p>
* 如果该value已经存在则根据score更新元素
* </p>
*
* @param key
* @param score
* @param member
* @return
*/
public Long zadd(String key, double score, String member) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.zadd(key, score, member);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 返回有序集 key 中,指定区间内的成员。min=0,max=-1代表所有元素
* </p>
*
* @param key
* @param min
* @param max
* @return 指定区间内的有序集成员的列表。
*/
public Set<String> zrange(String key, long min, long max) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.zrange(key, min, max);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return null;
} /**
* <p>
* 统计有序集 key 中,值在 min 和 max 之间的成员的数量
* </p>
*
* @param key
* @param min
* @param max
* @return 值在 min 和 max 之间的成员的数量。异常返回0
*/
public Long zcount(String key, double min, double max) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.zcount(key, min, max);
} catch (Exception e) { log.error(e.getMessage());
return 0L;
} finally {
returnResource(jedis);
} } /**
* <p>
* 为哈希表 key 中的域 field 的值加上增量 increment 。增量也可以为负数,相当于对给定域进行减法操作。 如果 key
* 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。如果域 field 不存在,那么在执行命令前,域的值被初始化为 0 。
* 对一个储存字符串值的域 field 执行 HINCRBY 命令将造成一个错误。本操作的值被限制在 64 位(bit)有符号数字表示之内。
* </p>
* <p>
* 将名称为key的hash中field的value增加integer
* </p>
*
* @param key
* @param value
* @param increment
* @return 执行 HINCRBY 命令之后,哈希表 key 中域 field的值。异常返回0
*/
public Long hincrBy(String key, String value, long increment) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.hincrBy(key, value, increment);
} catch (Exception e) {
log.error(e.getMessage());
return 0L;
} finally {
returnResource(jedis);
} } /**
* <p>
* 通过key删除在zset中指定的value
* </p>
*
* @param key
* @param members 可以使一个string 也可以是一个string数组
* @return
*/
public Long zrem(String key, String... members) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.zrem(key, members);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key增加该zset中value的score的值
* </p>
*
* @param key
* @param score
* @param member
* @return
*/
public Double zincrby(String key, double score, String member) {
Jedis jedis = null;
Double res = null;
try {
jedis = jedisPool.getResource();
res = jedis.zincrby(key, score, member);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key返回zset中value的排名
* </p>
* <p>
* 下标从小到大排序
* </p>
*
* @param key
* @param member
* @return
*/
public Long zrank(String key, String member) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.zrank(key, member);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key返回zset中value的排名
* </p>
* <p>
* 下标从大到小排序
* </p>
*
* @param key
* @param member
* @return
*/
public Long zrevrank(String key, String member) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.zrevrank(key, member);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key将获取score从start到end中zset的value
* </p>
* <p>
* socre从大到小排序
* </p>
* <p>
* 当start为0 end为-1时返回全部
* </p>
*
* @param key
* @param start
* @param end
* @return
*/
public Set<String> zrevrange(String key, long start, long end) {
Jedis jedis = null;
Set<String> res = null;
try {
jedis = jedisPool.getResource();
res = jedis.zrevrange(key, start, end);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key返回指定score内zset中的value
* </p>
*
* @param key
* @param max
* @param min
* @return
*/
public Set<String> zrangebyscore(String key, String max, String min) {
Jedis jedis = null;
Set<String> res = null;
try {
jedis = jedisPool.getResource();
res = jedis.zrevrangeByScore(key, max, min);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key返回指定score内zset中的value
* </p>
*
* @param key
* @param max
* @param min
* @return
*/
public Set<String> zrangeByScore(String key, double max, double min) {
Jedis jedis = null;
Set<String> res = null;
try {
jedis = jedisPool.getResource();
res = jedis.zrevrangeByScore(key, max, min);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 返回指定区间内zset中value的数量
* </p>
*
* @param key
* @param min
* @param max
* @return
*/
public Long zcount(String key, String min, String max) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.zcount(key, min, max);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key返回zset中的value个数
* </p>
*
* @param key
* @return
*/
public Long zcard(String key) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.zcard(key);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key获取zset中value的score值
* </p>
*
* @param key
* @param member
* @return
*/
public Double zscore(String key, String member) {
Jedis jedis = null;
Double res = null;
try {
jedis = jedisPool.getResource();
res = jedis.zscore(key, member);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key删除给定区间内的元素
* </p>
*
* @param key
* @param start
* @param end
* @return
*/
public Long zremrangeByRank(String key, long start, long end) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.zremrangeByRank(key, start, end);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key删除指定score内的元素
* </p>
*
* @param key
* @param start
* @param end
* @return
*/
public Long zremrangeByScore(String key, double start, double end) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
res = jedis.zremrangeByScore(key, start, end);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 返回满足pattern表达式的所有key
* </p>
* <p>
* keys(*)
* </p>
* <p>
* 返回所有的key
* </p>
*
* @param pattern
* @return
*/
public Set<String> keys(String pattern) {
Jedis jedis = null;
Set<String> res = null;
try {
jedis = jedisPool.getResource();
res = jedis.keys(pattern);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} public Set<String> keysBySelect(String pattern, int database) {
Jedis jedis = null;
Set<String> res = null;
try {
jedis = jedisPool.getResource();
jedis.select(database);
res = jedis.keys(pattern);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* <p>
* 通过key判断值得类型
* </p>
*
* @param key
* @return
*/
public String type(String key) {
Jedis jedis = null;
String res = null;
try {
jedis = jedisPool.getResource();
res = jedis.type(key);
} catch (Exception e) { log.error(e.getMessage());
} finally {
returnResource(jedis);
}
return res;
} /**
* 序列化对象
*
* @param obj
* @return 对象需实现Serializable接口
*/
public static byte[] ObjTOSerialize(Object obj) {
ObjectOutputStream oos = null;
ByteArrayOutputStream byteOut = null;
try {
byteOut = new ByteArrayOutputStream();
oos = new ObjectOutputStream(byteOut);
oos.writeObject(obj);
byte[] bytes = byteOut.toByteArray();
return bytes;
} catch (Exception e) {
}
return null;
} /**
* 反序列化对象
*
* @param bytes
* @return 对象需实现Serializable接口
*/
public static Object unserialize(byte[] bytes) {
ByteArrayInputStream bais = null;
try {
//反序列化
bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
return ois.readObject();
} catch (Exception e) {
}
return null;
} /**
* 返还到连接池
*
* @param jedis
*/
public static void returnResource(Jedis jedis) {
if (jedis != null) {
jedis.close();
}
} }
  1. 创建controller进行测试
package com.tao.springbootjedis.controller;

import com.tao.springbootjedis.utils.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
@RequestMapping("/basic")
public class StringTest { @Autowired
RedisUtil redisUtil; @RequestMapping("/cache")
String cache() {
redisUtil.set("name","tao");
return redisUtil.get("name");
} }

1

2

【集成-Jedis】SpringBoot集成Jedis的更多相关文章

  1. SpringBoot集成MyBatis的分页插件 PageHelper

    首先说说MyBatis框架的PageHelper插件吧,它是一个非常好用的分页插件,通常我们的项目中如果集成了MyBatis的话,几乎都会用到它,因为分页的业务逻辑说复杂也不复杂,但是有插件我们何乐而 ...

  2. 0120 springboot集成Mybatis和代码生成器

    在日常开发中,数据持久技术使用的架子使用频率最高的有3个,即spring-jdbc , spring-jpa, spring-mybatis.详情可以看我之前的一篇文章spring操作数据库的3个架子 ...

  3. SpringBoot 集成Swagger2自动生成文档和导出成静态文件

    目录 1. 简介 2. 集成Swagger2 2.1 导入Swagger库 2.2 配置Swagger基本信息 2.3 使用Swagger注解 2.4 文档效果图 3. 常用注解介绍 4. Swagg ...

  4. SpringBoot 集成SpringSecurity JWT

    目录 1. 简介 1.1 SpringSecurity 1.2 OAuth2 1.3 JWT 2. SpringBoot 集成 SpringSecurity 2.1 导入Spring Security ...

  5. SpringBoot 集成Jedis操作set

    题外话: Redis是个有趣的东西,相信搞java的或多或少都会用到,面试时也总离不开问Redis,之前觉得redis只是用做缓存,飞快!也因为最初在封装底层的时候,使用Redisson,所以大部分都 ...

  6. jedis spring集成

    jedis spring集成把jedis的核心对象交给spring管理.jedis核心对象:配置文件.连接池配置对象.连接池.集成方式有两种:spring-data-redis:自己封装 前提:要有一 ...

  7. Windows环境下springboot集成redis的安装与使用

    一,redis安装 首先我们需要下载Windows版本的redis压缩包地址如下: https://github.com/MicrosoftArchive/redis/releases 连接打开后如下 ...

  8. 基于Springboot集成security、oauth2实现认证鉴权、资源管理

    1.Oauth2简介 OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAu ...

  9. springBoot集成redisCluster

    本文主要内容:springBoot简介,在SpringBoot中如何集成Redis,可配置Redis集群. 关于SpringBoot 你想要的,这里都有:https://spring.io/proje ...

  10. springBoot集成Redis遇到的坑(择库)源码分析为什么择库失败

    提示: springboot提供了一套链接redis的api,也就是个jar包,用到的连接类叫做LettuceConnectionConfiguration,所以我们引入pom时是这样的 <de ...

随机推荐

  1. OData – 大杂烩

    前言 本篇记入一些 OData 的小东西. Query string too long OData 使用 GET 请求,然后搭配 query string $filter, $select, $exp ...

  2. C++ 指针动态内存分配

    动态内存分配 动态内存分配:即由程序员手动的进行内存空间的分配.内存空间的释放的内存管理操作 C++代码中,变量.数组等对象的创建,是由C++自动分配内存的,称之为(自动)静态内存分配 (自动)静态内 ...

  3. 三大硬核方式揭秘:Java如何与底层硬件和工业设备轻松通信!

    大家好,我是V哥,程序员聊天真是三句不到离不开技术啊,这不前两天跟一个哥们吃饭,他是我好多年前的学员了,一直保持着联系,现在都李总了,在做工业互联网相关的项目,真是只要 Java 学得好,能干一辈子, ...

  4. 精彩回顾|【ACDU 中国行·杭州站】数据库主题交流活动成功举办!

    8月19日下午,[ACDU 中国行·杭州站]在杭州西溪万怡酒店圆满落下帷幕.本次活动由中国数据库联盟(ACDU)联合墨天轮社区主办,蚂蚁集团 OceanBase 及亚信科技 AntDB 赞助支持.六位 ...

  5. 数据库周刊57丨Oracle 2021年度安全警报;MySQL 8.0.23发布;MySQL索引优化导致的死锁案例;巨杉数据库跨引擎事务实践;MongoDB企业级能力解析;OceanBase OBCP 实验指导手册……

    摘要:墨天轮数据库周刊第57期发布啦,每周1次推送本周数据库相关热门资讯.精选文章.干货文档. 热门资讯 1.Oracle 2021年度安全警报: Critical Patch Update 发布8个 ...

  6. 2022年4月中国数据库排行榜:华为GaussDB 挺进前四,榜单前八得分扶摇直上

    四月暖阳至,行业春风来.2022年4月的 墨天轮中国数据库流行度排行榜 已在墨天轮发布,本月共有205个数据库参与排名,相比上月新增六个数据库.本月整体排名变动不大,但排行榜上数据库整体得分涨幅较大. ...

  7. 简述 JavaScript脚本的执行原理?

    js 是一种动态 . 弱类型 . 基于原型的语言 ,通过浏览器可以直接执行: 当浏览器遇到 <script></script>标记时 , 会执行标记之间的js 代码:然后js ...

  8. kotlin更多语言结构——>This表达式

    This表达式 为了表示当前的 接收者 我们使用 this 表达式: - 在类的成员中,this指的是该类的当前对象. - 在扩展函数或者带有接收者的函数字面值中,this 表示在点左侧传递的 接收者 ...

  9. python 打包 py 文件 为exe

    使用 pyinstaller 来进行打包 pip install pyinstaller 可能需要全局 科学 代理上网 或者 修改 下载源地址 执行命令 图标path:C:\desktop\icon ...

  10. 背靠AI,让AI当牛马,解决程序员的烦恼

    开篇问题? 作为程序员的你,写代码累吗?累!苦嘛?苦,想哭嘛?哭不出来. 还在为工作中繁重的编码任务.复杂的调试过程以及不断更新的技术栈而苦恼吗?这些挑战不仅消耗大量的时间和精力,还时常让人陷入思维的 ...