目录(springboot使用redis)

  • mac 安装redis,用homebrew 安装
    • homebrew常用命令
    • 搜索查看
    • 安装 3.2版本
    • 安装后根据提示操作
  • 启动redis
    • 启动server
    • 启动客户端
  • springboot中配置 yml文件
  • 新建redis配置类
  • JedisUtil 类
  • 测试类

mac 安装redis,用homebrew 安装

homebrew常用命令

brew search **  //查找某个软件包
brew list  //列出已经安装的软件的包
brew install ** //安装某个软件包,默认安装的是稳定版本
brew uninstall **//卸载某个软件的包
brew upgrade ** //更新某个软件包
brew info ** //查看指定软件包的说明
brew cache clean //清理缓存

搜索查看

 brew search redis //出现如下==> Searching local taps...
hiredis         redis           redis-leveldb   redis@2.8       redis@3.2
==> Searching taps on GitHub...
homebrew/cask/redis-app
==> Searching blacklisted, migrated and deleted formulae...

安装 3.2版本

     brew install redis@3.2

安装后根据提示操作

/usr/local/etc 下修改redis.config找到
daemonize no改成yes 以守护进程的方式启动
配置环境变量echo ‘export PATH="/usr/local/opt/redis@3.2/bin:$PATH"’ >> ~/.zshrc

将redis配到环境变量里 /usr/local/opt/redis@3.2/bin 配好 ~/.bash_profile中

启动redis

启动server

redis-server /usr/local/etc/redis.conf
查看进程
ps axu | grep redis

启动客户端

redis-cli -h 127.0.0.1 -p 6379
关闭:redis-cli shutdown
杀死: sudo pkill redis-server

springboot中配置 yml文件

redis:database: 10host: 127.0.0.1port: 6379timeout: 43200000jedis:pool:max-idle: 500min-idle: 50max-active: 2000max-wait: 1000block-when-exhausted: true

新建redis配置类

import lombok.extern.slf4j.Slf4j;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;/*** Created on 2019/12/18** @Author: Sean*/@Configuration@Slf4jpublic class RedisConfig {@Value("${spring.redis.host}")private String host;@Value("${spring.redis.port}")private int port;@Value("${spring.redis.timeout}")private int timeout;@Value("${spring.redis.jedis.pool.max-idle}")private int maxIdle;@Value("${spring.redis.jedis.pool.max-wait}")private long maxWaitMillis;//    @Value("${spring.redis.password}")//    private String password;@Value("${spring.redis.block-when-exhausted}")private boolean blockWhenExhausted;@Beanpublic JedisPool redisPoolFactory() throws Exception {log.info("JedisPool注入成功!!");log.info("redis地址:" + host + ":" + port);JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();jedisPoolConfig.setMaxIdle(maxIdle);jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);// 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认truejedisPoolConfig.setBlockWhenExhausted(blockWhenExhausted);// 是否启用pool的jmx管理功能, 默认truejedisPoolConfig.setJmxEnabled(true);JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);return jedisPool;}}

JedisUtil 类

package citic.cph.zdw.util;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;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import redis.clients.jedis.BinaryClient.LIST_POSITION;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.SortingParams;/*** Created on 2019/12/18** @Author: Sean*/@Component
@Slf4j
public class JedisUtil{@Autowiredprivate JedisPool jedisPool;/*** 通过key获取储存在redis中的value* 并释放连接* @param key* @param indexdb 选择redis库 0-15* @return 成功返回value 失败返回null*/public String get(String key,int indexdb) {Jedis jedis = null;String value = null;try {jedis = jedisPool.getResource();jedis.select(indexdb);value = jedis.get(key);log.info(value);} catch (Exception e) {log.error(e.getMessage());} finally {returnResource(jedisPool, jedis);}return value;}/*** 通过key获取储存在redis中的value* 并释放连接* @param key* @param indexdb 选择redis库 0-15* @return 成功返回value 失败返回null*/public byte[] get(byte[] key,int indexdb) {Jedis jedis = null;byte[] value = null;try {jedis = jedisPool.getResource();jedis.select(indexdb);value = jedis.get(key);} catch (Exception e) {log.error(e.getMessage());} finally {returnResource(jedisPool, jedis);}return value;}/*** 向redis存入key和value,并释放连接资源* 如果key已经存在 则覆盖* @param key* @param value* @param indexdb 选择redis库 0-15* @return 成功 返回OK 失败返回 0*/public String set(String key, String value,int indexdb) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.select(indexdb);return jedis.set(key, value);} catch (Exception e) {log.error(e.getMessage(),e);return "0";} finally {returnResource(jedisPool, jedis);}}/*** 向redis存入key和value,并释放连接资源* 如果key已经存在 则覆盖* @param key* @param value* @param indexdb 选择redis库 0-15* @return 成功 返回OK 失败返回 0*/public String set(byte[] key, byte[] value,int indexdb) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.select(indexdb);return jedis.set(key, value);} catch (Exception e) {log.error(e.getMessage());return "0";} finally {returnResource(jedisPool, 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(e.getMessage());return 0L;} finally {returnResource(jedisPool, jedis);}}/*** 删除指定的key,也可以传入一个包含key的数组* @param indexdb 选择redis库 0-15* @param keys 一个key 也可以使 string 数组* @return 返回删除成功的个数*/public Long del(int indexdb,String... keys) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.select(indexdb);return jedis.del(keys);} catch (Exception e) {log.error(e.getMessage());return 0L;} finally {returnResource(jedisPool, jedis);}}/*** 删除指定的key,也可以传入一个包含key的数组* @param indexdb 选择redis库 0-15* @param keys 一个key 也可以使 string 数组* @return 返回删除成功的个数*/public Long del(int indexdb,byte[]... keys) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.select(indexdb);return jedis.del(keys);} catch (Exception e) {log.error(e.getMessage());return 0L;} finally {returnResource(jedisPool, 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(e.getMessage());return 0L;} finally {returnResource(jedisPool, 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(e.getMessage());return false;} finally {returnResource(jedisPool, 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(jedisPool, jedis);}return null;}/*** 为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。* @param key* @param value*            过期时间,单位:秒* @return 成功返回1 如果存在 和 发生异常 返回 0*/public Long expire(String key, int value, int indexdb) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.select(indexdb);return jedis.expire(key, value);} catch (Exception e) {log.error(e.getMessage());return 0L;} finally {returnResource(jedisPool, jedis);}}/*** <p>* 以秒为单位,返回给定 key 的剩余生存时间* </p>** @param key* @return 当 key 不存在时,返回 -2 。当 key 存在但没有设置剩余生存时间时,返回 -1 。否则,以秒为单位,返回 key*         的剩余生存时间。 发生异常 返回 0*/public Long ttl(String key,int indexdb) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.select(indexdb);return jedis.ttl(key);} catch (Exception e) {log.error(e.getMessage());return 0L;} finally {returnResource(jedisPool, jedis);}}/*** <p>* 移除给定 key 的生存时间,将这个 key 从『易失的』(带生存时间 key )转换成『持久的』(一个不带生存时间、永不过期的 key )* </p>** @param key* @return 当生存时间移除成功时,返回 1 .如果 key 不存在或 key 没有设置生存时间,返回 0 , 发生异常 返回 -1*/public Long persist(String key) {Jedis jedis = null;try {jedis = jedisPool.getResource();return jedis.persist(key);} catch (Exception e) {log.error(e.getMessage());return -1L;} finally {returnResource(jedisPool, jedis);}}/*** <p>* 新增key,并将 key 的生存时间 (以秒为单位)* </p>** @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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, jedis);}return res;}/*** <p>* 通过key在list指定的位置之前或者之后 添加字符串元素* </p>** @param key* @param where*            LIST_POSITION枚举类型* @param pivot*            list里面的value* @param value*            添加的value* @return*/public Long linsert(String key, LIST_POSITION where, String pivot,String value) {Jedis jedis = null;Long res = null;try {jedis = jedisPool.getResource();res = jedis.linsert(key, where, pivot, value);} catch (Exception e) {log.error(e.getMessage());} finally {returnResource(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, jedis);}return null;}/*** <p>* 返回给定排序后的结果* </p>** @param key* @param sortingParameters* @return 返回列表形式的排序结果*/public List<String> sort(String key, SortingParams sortingParameters) {Jedis jedis = null;try {jedis = jedisPool.getResource();return jedis.sort(key, sortingParameters);} catch (Exception e) {log.error(e.getMessage());} finally {returnResource(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, 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(jedisPool, jedis);}return res;}/*** 通过key判断值得类型* @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(jedisPool, 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 jedisPool* @param jedis*/public static void returnResource(JedisPool jedisPool, Jedis jedis) {if (jedis != null) {jedisPool.returnResource(jedis);}}}

测试类

package citic.cph.zdw.controller.zdw;/*** Created on 2019/12/18** @Author: Sean*/import citic.cph.zdw.util.JedisUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;@Slf4j
@RestController
@RequestMapping(value="/redis")
public class RedisController  {@AutowiredJedisUtil redisUtil;@RequestMapping(value = "getRedis",method = RequestMethod.POST)@ResponseBodypublic String getRedis(){//        redisUtil.expire("REDIS_ZDW_TOKEN",180,0);redisUtil.set("Sean","哈哈哈哈哈哈", 0);String res = redisUtil.get("2012", 0);return res;}}

redis工具 :springboot使用redis相关推荐

  1. 不要再找了,Java操作Redis、Spring整合Redis及SpringBoot整合Redis这里都有

    文章开始之前先抛出一个问题:Jedis.Lettuce.Redisson以及RedisTemplate几者之间有什么区别,又有什么联系? 如果你心中已经很清晰的有了答案,那么本文你可以很轻松的阅读过去 ...

  2. Linux中部署Redis及SpringBoot整合Redis

    一.Linux下安装Redis 1.官网下载安装包 redis-6.2.0.tar.gz 2.程序一般放在/opt目录下,将安装包移动到/opt目录下 mv redis-6.2.0.tar.gz /o ...

  3. redis笔记——springboot集成redis

    Sprigboot整合 springboot整合数据操作一般会通过官方的一个项目springdata来进行整合,它可以操作很多市面上流行的数据库,并且为java程序提供一套完整的统一的api调用.在s ...

  4. SpringBoot整合Redis+mybatis,封装RedisUtils工具类等实战(附源码)

    点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 关注公众号后台回复pay或mall获取实战项目资料+视频 作者:陈彦斌 cnblogs.com/chenyanbin/ ...

  5. SpringBoot整合redis(一)

    SpringBoot+redis 准备工作: 1.服务器配置redis 链接:https://blog.csdn.net/SuchASilly/article/details/106064224 2. ...

  6. 8分钟带你学会SpringBoot整合Redis来实现缓存技术

    1.概述 随着互联网技术的发展,对技术要求也越来越高,所以在当期情况下项目的开发中对数据访问的效率也有了很高的要求,所以在项目开发中缓存技术使用的也越来越多,因为它可以极大的提高系统的访问速度,关于缓 ...

  7. springboot使用redis

    springboot使用redis redis-service.exe : 服务端,启动后不要关闭 redis-cli.exe : 客户端,访问redis中的数据 redisclient-win32. ...

  8. springboot使用redisTemplate 报错:APP FAILED TO START Field template in required a single bean redis工具类

    springboot使用redisTemplate 报错: template in com.j.ssm.tool.RedisUtil required a single bean, but 2 wer ...

  9. 基于Redis GEO(地理位置) 实现附近的人,商家等相关功能实现 使用SpringBoot Redis工具类

    Redis GEO 1.基本介绍 1.Redis GEO 2.基础语法 GEOADD GEOPOS GEODIST GEORADIUS GEOHASH 2.可用于实现的功能 3.SpringBoot实 ...

  10. SpringBoot Redis工具类封装

    SpringBoot整合Redis的博客很多,但是很多都不是我想要的结果.因为我只需要整合完成后,可以操作Redis就可以了,并不需要配合缓存相关的注解使用(如@Cacheable).看了很多博客后, ...

最新文章

  1. windows系统下jenkins环境搭建与基本使用
  2. Windows Server2003 sp2重装IIS后无法浏览asp.net网页解决方法
  3. 递推DP UVA 1366 Martian Mining
  4. html span 字体位置,html – 如何强制span在CSS中使用父字体系列
  5. SecureCRT连接Linux显示Mysql记录中文乱码
  6. 面试之js 数组插入删除
  7. HDU 6330--Visual Cube(构造,计算)
  8. python理财基金数据分析可视化系统
  9. lack名词形式_lack是什么意思_lack在线翻译_英语_读音_用法_例句_海词词典
  10. FineCMS-v5.0.1漏洞审计
  11. 老七苏-37:明日之星 苏-37是在苏-35的基础上改进而成的。
  12. ThinkPHP5.0+PHPMailer 实现qq邮箱验证码
  13. 关于微信小程序webview的使用
  14. InnoDB: MySQL and InnoDB data dictionaries are out of sync + InnoDB: AUTOINC next value generation
  15. HBase配置AES加密
  16. HashMap1.7中的线程安全问题
  17. 自制NixieDisplay辉光数码管显示时钟
  18. 一篇文章让你了解大数据
  19. 火狐控制台的html,Firefox outerHTML实现代码
  20. lenovo L480 进入bios_B20A-BTC主板魔BIOS安装I5 94OOF CPU教程

热门文章

  1. 使用IDEA快速画类图
  2. 自动驾驶打响新一轮“金元战”
  3. iframe 无刷新图片上传图片
  4. 设置WINRE的硬盘启动
  5. 与领导喝酒的18个应紧记的诀窍
  6. 戴尔笔记本怎么安装统信uos系统?戴尔笔记本安装统信uos+win双系统
  7. IP地址的规划和设计方法(二)
  8. 崩溃,我带的实习生把图片直接存到了服务器上
  9. R语言并行计算RC~bray-curtis~距离
  10. 微信公众平台官方接口