• 一、Redis的Java客户端


    模糊的目标,要不断去解释它们,把他们转化成一个更具体的内容,这样才能够找到途径。

    常用客户端介绍

    Jedis客户端

    基本使用(直连)
    1. 引入对应依赖

    <dependency>
    <groupId>redis.clientsgroupId>
    <artifactId>jedisartifactId>
    <version>version>
    dependency>
    1. 建立与Redis服务器的连接

    private Jedis jedis;
    // 建立连接
    jedis =  new Jedis("ip", port);
    // 设置密码
    jedis.auth("");
    // 选择库
    jedis.select(0);
    1. 业务操作

    jedis.set("name", "张三");
    String name = jedis.get("name");
    1. 关闭连接

    if (jedis != null) {
    jedis.close();
    }
    Jedis连接池

    Jedis本身是不安全的,并且频繁的创建和销毁连接会有性能损耗。因此,使用Jedis连接池代替Jedis直连。

    public class JedisConnectionFactory {
    private static final JedisPool jedisPool;

    static {
    JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    // 最大连接数
    jedisPoolConfig.setMaxTotal(8);
    // 最大空闲连接
    jedisPoolConfig.setMaxIdle(8);
    // 最小空闲连接
    jedisPoolConfig.setMinIdle(0);
    // 最长等待时间,ms
    jedisPoolConfig.setMaxWaitMillis(1000);
    jedisPool = new JedisPool(jedisPoolConfig, "ip", port, 1000, "password");
    }

    // 获取jedis对象
    public static Jedis getJedis() {
    return jedisPool.getResource();
    }
    }

    SpringDataRedis

    springData是Spring中数据操作的模块,包含对各种数据库的集成,其中Redis的集成模块就叫做SpringDataRedis。

    • 提供了对不同Redis客户端的整合(Lettuce和Jedis)

    • 提供了RedisTemplate统一API来操作Redis

    • 支持Redis的发布订阅模型

    • 支持Redis哨兵和Redis集群

    • 支持基于Lettuce的响应式编程

    • 支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化

    • 支持基于Redis的JDKCollection实现

    RedisTemplate工具类

    SpringBoot整合Redis

    1. 引入对应依赖


    <dependency>
    <groupId>com.alibabagroupId>
    <artifactId>fastjsonartifactId>
    <version>1.2.83version>
    dependency>


    <dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-data-redisartifactId>







    dependency>




    默认情况下使用lettuce,你也可以手动排除,使用Jedis客户端。

    1. Redis配置类编写

    package com.example.wvpdisassembly.conf;

    import com.alibaba.fastjson.parser.ParserConfig;
    import com.example.wvpdisassembly.utils.redis.FastJsonRedisSerializer;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.cache.annotation.CachingConfigurerSupport;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.connection.RedisConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.serializer.StringRedisSerializer;

    /**
    * @Description redis配置类
    * @Author LH
    * @Date 2022/11/14 11:11
    **/
    @Configuration
    public class RedisConfig extends CachingConfigurerSupport {

       @Bean
       public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
           RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
           // 使用fastJson序列化,自定义实现
           FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class);
           // value值的序列化采用fastJsonRedisSerializer
           redisTemplate.setValueSerializer(fastJsonRedisSerializer);
           redisTemplate.setHashValueSerializer(fastJsonRedisSerializer);
           // 全局开启AutoType,不建议使用
           ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
           // key的序列化采用StringRedisSerializer
           redisTemplate.setKeySerializer(new StringRedisSerializer());
           redisTemplate.setHashKeySerializer(new StringRedisSerializer());
           redisTemplate.setConnectionFactory(redisConnectionFactory);
           return redisTemplate;
      }

    }
    自定义序列化类
    package com.example.wvpdisassembly.utils.redis;

    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.serializer.SerializerFeature;
    import org.springframework.data.redis.serializer.RedisSerializer;
    import org.springframework.data.redis.serializer.SerializationException;

    import java.nio.charset.Charset;

    /**
    * @Description 使用fastjson实现redis的序列化
    * @Author LH
    * @Date 2022/11/14 13:59
    **/
    public class FastJsonRedisSerializer<T> implements RedisSerializer<T> {

       public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");

       private Class<T> clazz;

       public FastJsonRedisSerializer(Class<T> clazz) {
           super();
           this.clazz = clazz;
      }

       @Override
       public byte[] serialize(T t) throws SerializationException {
           if (t == null) {
               return new byte[0];
          }
           return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
      }

       @Override
       public T deserialize(byte[] bytes) throws SerializationException {
           if (bytes == null || bytes.length <= 0) {
               return null;
          }
           String str = new String(bytes, DEFAULT_CHARSET);
           return (T) JSON.parseObject(str, clazz);
      }
    }
    Redis工具类
    package com.example.wvpdisassembly.utils.redis;

    import com.alibaba.fastjson.JSONObject;
    import com.example.wvpdisassembly.utils.SpringBeanUtil;
    import org.springframework.data.redis.core.*;
    import org.springframework.util.CollectionUtils;

    import java.util.*;
    import java.util.concurrent.TimeUnit;

    /**
    * @Description Redis工具类
    * @Author LH
    * @Date 2022/11/14 14:00
    **/
    @SuppressWarnings(value = {"rawtypes", "unchecked"})
    public class RedisUtil {

       private static RedisTemplate redisTemplate;

       static {
           redisTemplate = SpringBeanUtil.getBean("redisTemplate");
      }

       /**
        * 指定缓存失效时间
        *
        * @param key 键
        * @param time 时间(秒)
        * @return true / false
        */
       public static boolean expire(String key, long time) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               if (time > 0) {
                   redisTemplate.expire(key, time, TimeUnit.SECONDS);
              }
               return true;
          } catch (Exception e) {
               e.printStackTrace();
               return false;
          }
      }

       /**
        * 根据 key 获取过期时间
        *
        * @param key 键
        */
       public static long getExpire(String key) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           return redisTemplate.getExpire(key, TimeUnit.SECONDS);
      }

       /**
        * 判断 key 是否存在
        *
        * @param key 键
        * @return true / false
        */
       public static boolean hasKey(String key) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               return redisTemplate.hasKey(key);
          } catch (Exception e) {
               e.printStackTrace();
               return false;
          }
      }

       /**
        * 删除缓存
        *
        * @param key 键(一个或者多个)
        * @SuppressWarnings("unchecked") 忽略类型转换警告
        */
       public static boolean del(String... key) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               if (key != null && key.length > 0) {
                   if (key.length == 1) {
                       redisTemplate.delete(key[0]);
                  } else {
    //                   传入一个 Collection 集合
                       redisTemplate.delete(CollectionUtils.arrayToList(key));
                  }
              }
               return true;
          } catch (Exception e) {
               e.printStackTrace();
               return false;
          }
      }

    //   ============================== String ==============================

       /**
        * 普通缓存获取
        *
        * @param key 键
        * @return 值
        */
       public static Object get(String key) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           return key == null ? null : redisTemplate.opsForValue().get(key);
      }

       /**
        * 普通缓存放入
        *
        * @param key   键
        * @param value 值
        * @return true / false
        */
       public static boolean set(String key, Object value) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               redisTemplate.opsForValue().set(key, value);
               return true;
          } catch (Exception e) {
               e.printStackTrace();
               return false;
          }
      }

       /**
        * 普通缓存放入并设置时间
        *
        * @param key   键
        * @param value 值
        * @param time 时间(秒),如果 time < 0 则设置无限时间
        * @return true / false
        */
       public static boolean set(String key, Object value, long time) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               if (time > 0) {
                   redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
              } else {
                   set(key, value);
              }
               return true;
          } catch (Exception e) {
               e.printStackTrace();
               return false;
          }
      }

       /**
        * 递增
        *
        * @param key   键
        * @param delta 递增大小
        * @return
        */
       public static long incr(String key, long delta) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           if (delta < 0) {
               throw new RuntimeException("递增因子必须大于 0");
          }
           return redisTemplate.opsForValue().increment(key, delta);
      }

       /**
        * 递减
        *
        * @param key   键
        * @param delta 递减大小
        * @return
        */
       public static long decr(String key, long delta) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           if (delta < 0) {
               throw new RuntimeException("递减因子必须大于 0");
          }
           return redisTemplate.opsForValue().increment(key, delta);
      }

    //   ============================== Map ==============================

       /**
        * HashGet
        *
        * @param key 键(no null)
        * @param item 项(no null)
        * @return 值
        */
       public static Object hget(String key, String item) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           return redisTemplate.opsForHash().get(key, item);
      }

       /**
        * 获取 key 对应的 map
        *
        * @param key 键(no null)
        * @return 对应的多个键值
        */
       public static Map<Object, Object> hmget(String key) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           return redisTemplate.opsForHash().entries(key);
      }

       /**
        * HashSet
        *
        * @param key 键
        * @param map 值
        * @return true / false
        */
       public static boolean hmset(String key, Map<Object, Object> map) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               redisTemplate.opsForHash().putAll(key, map);
               return true;
          } catch (Exception e) {
               e.printStackTrace();
               return false;
          }
      }

       /**
        * HashSet 并设置时间
        *
        * @param key 键
        * @param map 值
        * @param time 时间
        * @return true / false
        */
       public static boolean hmset(String key, Map<Object, Object> map, long time) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               redisTemplate.opsForHash().putAll(key, map);
               if (time > 0) {
                   expire(key, time);
              }
               return true;
          } catch (Exception e) {
               e.printStackTrace();
               return false;
          }
      }

       /**
        * 向一张 Hash表 中放入数据,如不存在则创建
        *
        * @param key   键
        * @param item 项
        * @param value 值
        * @return true / false
        */
       public static boolean hset(String key, String item, Object value) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               redisTemplate.opsForHash().put(key, item, value);
               return true;
          } catch (Exception e) {
               e.printStackTrace();
               return false;
          }
      }

       /**
        * 向一张 Hash表 中放入数据,并设置时间,如不存在则创建
        *
        * @param key   键
        * @param item 项
        * @param value 值
        * @param time 时间(如果原来的 Hash表 设置了时间,这里会覆盖)
        * @return true / false
        */
       public static boolean hset(String key, String item, Object value, long time) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               redisTemplate.opsForHash().put(key, item, value);
               if (time > 0) {
                   expire(key, time);
              }
               return true;
          } catch (Exception e) {
               e.printStackTrace();
               return false;
          }
      }

       /**
        * 删除 Hash表 中的值
        *
        * @param key 键
        * @param item 项(可以多个,no null)
        */
       public static void hdel(String key, Object... item) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           redisTemplate.opsForHash().delete(key, item);
      }

       /**
        * 判断 Hash表 中是否有该键的值
        *
        * @param key 键(no null)
        * @param item 值(no null)
        * @return true / false
        */
       public static boolean hHasKey(String key, String item) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           return redisTemplate.opsForHash().hasKey(key, item);
      }

       /**
        * Hash递增,如果不存在则创建一个,并把新增的值返回
        *
        * @param key 键
        * @param item 项
        * @param by   递增大小 > 0
        * @return
        */
       public static Double hincr(String key, String item, Double by) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           return redisTemplate.opsForHash().increment(key, item, by);
      }

       /**
        * Hash递减
        *
        * @param key 键
        * @param item 项
        * @param by   递减大小
        * @return
        */
       public static Double hdecr(String key, String item, Double by) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           return redisTemplate.opsForHash().increment(key, item, -by);
      }

    //   ============================== Set ==============================

       /**
        * 根据 key 获取 set 中的所有值
        *
        * @param key 键
        * @return 值
        */
       public static Set<Object> sGet(String key) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               return redisTemplate.opsForSet().members(key);
          } catch (Exception e) {
               e.printStackTrace();
               return null;
          }
      }

       /**
        * 从键为 key 的 set 中,根据 value 查询是否存在
        *
        * @param key   键
        * @param value 值
        * @return true / false
        */
       public static boolean sHasKey(String key, Object value) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               return redisTemplate.opsForSet().isMember(key, value);
          } catch (Exception e) {
               e.printStackTrace();
               return false;
          }
      }

       /**
        * 将数据放入 set缓存
        *
        * @param key   键值
        * @param values 值(可以多个)
        * @return 成功个数
        */
       public static long sSet(String key, Object... values) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               return redisTemplate.opsForSet().add(key, values);
          } catch (Exception e) {
               e.printStackTrace();
               return 0;
          }
      }

       /**
        * 将数据放入 set缓存,并设置时间
        *
        * @param key   键
        * @param time   时间
        * @param values 值(可以多个)
        * @return 成功放入个数
        */
       public static long sSet(String key, long time, Object... values) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               long count = redisTemplate.opsForSet().add(key, values);
               if (time > 0) {
                   expire(key, time);
              }
               return count;
          } catch (Exception e) {
               e.printStackTrace();
               return 0;
          }
      }

       /**
        * 获取 set缓存的长度
        *
        * @param key 键
        * @return 长度
        */
       public static long sGetSetSize(String key) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               return redisTemplate.opsForSet().size(key);
          } catch (Exception e) {
               e.printStackTrace();
               return 0;
          }
      }

       /**
        * 移除 set缓存中,值为 value 的
        *
        * @param key   键
        * @param values 值
        * @return 成功移除个数
        */
       public static long setRemove(String key, Object... values) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               return redisTemplate.opsForSet().remove(key, values);
          } catch (Exception e) {
               e.printStackTrace();
               return 0;
          }
      }
    //   ============================== ZSet ==============================

       /**
        * 添加一个元素, zset与set最大的区别就是每个元素都有一个score,因此有个排序的辅助功能; zadd
        *
        * @param key
        * @param value
        * @param score
        */
       public static void zAdd(Object key, Object value, double score) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           redisTemplate.opsForZSet().add(key, value, score);
      }

       /**
        * 删除元素 zrem
        *
        * @param key
        * @param value
        */
       public static void zRemove(Object key, Object value) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           redisTemplate.opsForZSet().remove(key, value);
      }

       /**
        * score的增加or减少 zincrby
        *
        * @param key
        * @param value
        * @param delta -1 表示减 1 表示加1
        */
       public static Double zIncrScore(Object key, Object value, double delta) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           return redisTemplate.opsForZSet().incrementScore(key, value, delta);
      }

       /**
        * 查询value对应的score   zscore
        *
        * @param key
        * @param value
        * @return
        */
       public static Double zScore(Object key, Object value) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           return redisTemplate.opsForZSet().score(key, value);
      }

       /**
        * 判断value在zset中的排名 zrank
        *
        * @param key
        * @param value
        * @return
        */
       public static Long zRank(Object key, Object value) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           return redisTemplate.opsForZSet().rank(key, value);
      }

       /**
        * 返回集合的长度
        *
        * @param key
        * @return
        */
       public static Long zSize(Object key) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           return redisTemplate.opsForZSet().zCard(key);
      }

       /**
        * 查询集合中指定顺序的值, 0 -1 表示获取全部的集合内容 zrange
        *


        * 返回有序的集合,score小的在前面
        *
        * @param key
        * @param start
        * @param end
        * @return
        */
       public static Set<Object> zRange(Object key, int start, int end) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           return redisTemplate.opsForZSet().range(key, start, end);
      }

       /**
        * 查询集合中指定顺序的值和score,0, -1 表示获取全部的集合内容
        *
        * @param key
        * @param start
        * @param end
        * @return
        */
       public static Set<ZSetOperations.TypedTuple<String>> zRangeWithScore(Object key, int start, int end) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           return redisTemplate.opsForZSet().rangeWithScores(key, start, end);
      }

       /**
        * 查询集合中指定顺序的值 zrevrange
        *


        * 返回有序的集合中,score大的在前面
        *
        * @param key
        * @param start
        * @param end
        * @return
        */
       public static Set<String> zRevRange(Object key, int start, int end) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           return redisTemplate.opsForZSet().reverseRange(key, start, end);
      }

       /**
        * 根据score的值,来获取满足条件的集合 zrangebyscore
        *
        * @param key
        * @param min
        * @param max
        * @return
        */
       public static Set<String> zSortRange(Object key, int min, int max) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           return redisTemplate.opsForZSet().rangeByScore(key, min, max);
      }


    //   ============================== List ==============================

       /**
        * 获取 list缓存的内容
        *
        * @param key   键
        * @param start 开始
        * @param end   结束(0 到 -1 代表所有值)
        * @return
        */
       public static List<Object> lGet(String key, long start, long end) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               return redisTemplate.opsForList().range(key, start, end);
          } catch (Exception e) {
               e.printStackTrace();
               return null;
          }
      }

       /**
        * 获取 list缓存的长度
        *
        * @param key 键
        * @return 长度
        */
       public static long lGetListSize(String key) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               return redisTemplate.opsForList().size(key);
          } catch (Exception e) {
               e.printStackTrace();
               return 0;
          }
      }

       /**
        * 根据索引 index 获取键为 key 的 list 中的元素
        *
        * @param key   键
        * @param index 索引
        *             当 index >= 0 时 {0:表头, 1:第二个元素}
        *             当 index < 0 时 {-1:表尾, -2:倒数第二个元素}
        * @return 值
        */
       public static Object lGetIndex(String key, long index) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               return redisTemplate.opsForList().index(key, index);
          } catch (Exception e) {
               e.printStackTrace();
               return null;
          }
      }

       /**
        * 将值 value 插入键为 key 的 list 中,如果 list 不存在则创建空 list
        *
        * @param key   键
        * @param value 值
        * @return true / false
        */
       public static boolean lSet(String key, Object value) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               redisTemplate.opsForList().rightPush(key, value);
               return true;
          } catch (Exception e) {
               e.printStackTrace();
               return false;
          }
      }

       /**
        * 将值 value 插入键为 key 的 list 中,并设置时间
        *
        * @param key   键
        * @param value 值
        * @param time 时间
        * @return true / false
        */
       public static boolean lSet(String key, Object value, long time) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               redisTemplate.opsForList().rightPush(key, value);
               if (time > 0) {
                   expire(key, time);
              }
               return true;
          } catch (Exception e) {
               e.printStackTrace();
               return false;
          }
      }

       /**
        * 将 values 插入键为 key 的 list 中
        *
        * @param key   键
        * @param values 值
        * @return true / false
        */
       public static boolean lSetList(String key, List<Object> values) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               redisTemplate.opsForList().rightPushAll(key, values);
               return true;
          } catch (Exception e) {
               e.printStackTrace();
               return false;
          }
      }

       /**
        * 将 values 插入键为 key 的 list 中,并设置时间
        *
        * @param key   键
        * @param values 值
        * @param time   时间
        * @return true / false
        */
       public static boolean lSetList(String key, List<Object> values, long time) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               redisTemplate.opsForList().rightPushAll(key, values);
               if (time > 0) {
                   expire(key, time);
              }
               return true;
          } catch (Exception e) {
               e.printStackTrace();
               return false;
          }
      }

       /**
        * 根据索引 index 修改键为 key 的值
        *
        * @param key   键
        * @param index 索引
        * @param value 值
        * @return true / false
        */
       public static boolean lUpdateIndex(String key, long index, Object value) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               redisTemplate.opsForList().set(key, index, value);
               return true;
          } catch (Exception e) {
               e.printStackTrace();
               return false;
          }
      }

       /**
        * 在键为 key 的 list 中删除值为 value 的元素
        *
        * @param key   键
        * @param count 如果 count == 0 则删除 list 中所有值为 value 的元素
        *             如果 count > 0 则删除 list 中最左边那个值为 value 的元素
        *             如果 count < 0 则删除 list 中最右边那个值为 value 的元素
        * @param value
        * @return
        */
       public static long lRemove(String key, long count, Object value) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               return redisTemplate.opsForList().remove(key, count, value);
          } catch (Exception e) {
               e.printStackTrace();
               return 0;
          }
      }

       /**
        * 在键为 key 的 list中移除第一个元素
        *
        * @param key 键
        * @return
        */
       public static Object lLeftPop(String key) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           return redisTemplate.opsForList().leftPop(key);
      }

       /**
        * 在键为 key 的 list中移除、最后一个元素
        *
        * @param key 键
        * @return
        */
       public static Object lrightPop(String key) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           return redisTemplate.opsForList().rightPop(key);
      }

       /**
        * 模糊查询
        *
        * @param key 键
        * @return true / false
        */
       public static List<Object> keys(String key) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           try {
               Set<String> set = redisTemplate.keys(key);
               return new ArrayList<>(set);
          } catch (Exception e) {
               e.printStackTrace();
               return null;
          }
      }


       /**
        * 模糊查询
        * @param query 查询参数
        * @return
        */
    //   public static List scan(String query) {
    //       List result = new ArrayList<>();
    //       try {
    //           Cursor> cursor = redisTemplate.opsForHash().scan("field",
    //                   ScanOptions.scanOptions().match(query).count(1000).build());
    //           while (cursor.hasNext()) {
    //               Map.Entry entry = cursor.next();
    //               result.add(entry.getKey());
    //               Object key = entry.getKey();
    //               Object valueSet = entry.getValue();
    //           }
    //           //关闭cursor
    //           cursor.close();
    //       } catch (Exception e) {
    //           e.printStackTrace();
    //       }
    //       return result;
    //   }

       /**
        * 模糊查询
        *
        * @param query 查询参数
        * @return
        */
       public static List<Object> scan(String query) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           Set<String> resultKeys = (Set<String>) redisTemplate.execute((RedisCallback<Set<String>>) connection -> {
               ScanOptions scanOptions = ScanOptions.scanOptions().match("*" + query + "*").count(1000).build();
               Cursor<byte[]> scan = connection.scan(scanOptions);
               Set<String> keys = new HashSet<>();
               while (scan.hasNext()) {
                   byte[] next = scan.next();
                   keys.add(new String(next));
              }
               return keys;
          });

           return new ArrayList<>(resultKeys);
      }

       //   ============================== 消息发送与订阅 ==============================
       public static void convertAndSend(String channel, JSONObject msg) {
           if (redisTemplate == null) {
               redisTemplate = SpringBeanUtil.getBean("redisTemplate");
          }
           redisTemplate.convertAndSend(channel, msg);
      }

    }

    为了节省Redis空间,手动进行序列化。


    __EOF__

  • 本文作者: 你比从前快乐
  • 本文链接: https://www.cnblogs.com/l12138h/p/16890813.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    数据库算法175. 组合两个表 176. 第二高的薪水 177. 第N高的薪水
    java计算机毕业设计上虞烟草物流配送系统源码+系统+数据库+lw文档+mybatis+运行部署
    【C++】模板初阶
    【接口自动化测试】HTTP协议详解
    你想知道的ArrayList知识都在这
    html 学习 之 文本标签
    矿大数据结构实验四 折半查找 二叉搜索树 最短路径 排序
    如何写砸一本小说
    vben admin 当中使用 mock 模拟数据以及对响应数据进行处理
    Docker极简入门:使用Docker-Compose 运行网站浏览量统计Demo
  • 原文地址:https://www.cnblogs.com/l12138h/p/16890813.html