redis 工具类

打印 上一主题 下一主题

主题 578|帖子 578|积分 1734

redis 工具类
  1. /**
  2. * Redis 工具类
  3. */
  4. @Component
  5. public class RedisUtil {
  6.     @Resource
  7.     private RedisTemplate<String, Object> redisTemplate;
  8.     public RedisUtil(RedisTemplate<String, Object> redisTemplate) {
  9.         this.redisTemplate = redisTemplate;
  10.     }
  11.     /**
  12.      * 指定缓存失效时间
  13.      *
  14.      * @param key  键
  15.      * @param time 时间(秒)
  16.      * @return
  17.      */
  18.     public boolean expire(String key, long time) {
  19.         try {
  20.             if (time > 0) {
  21.                 redisTemplate.expire(key, time, TimeUnit.SECONDS);
  22.             }
  23.             return true;
  24.         } catch (Exception e) {
  25.             e.printStackTrace();
  26.             return false;
  27.         }
  28.     }
  29.     /**
  30.      * 根据key 获取过期时间
  31.      *
  32.      * @param key 键 不能为null
  33.      * @return 时间(秒) 返回0代表为永久有效
  34.      */
  35.     public long getExpire(String key) {
  36.         return redisTemplate.getExpire(key, TimeUnit.SECONDS);
  37.     }
  38.     /**
  39.      * 判断key是否存在
  40.      *
  41.      * @param key 键
  42.      * @return true 存在 false不存在
  43.      */
  44.     public boolean hasKey(String key) {
  45.         try {
  46.             return redisTemplate.hasKey(key);
  47.         } catch (Exception e) {
  48.             e.printStackTrace();
  49.             return false;
  50.         }
  51.     }
  52.     /**
  53.      * 删除缓存
  54.      *
  55.      * @param key 可以传一个值 或多个
  56.      */
  57.     @SuppressWarnings("unchecked")
  58.     public void del(String... key) {
  59.         if (key != null && key.length > 0) {
  60.             if (key.length == 1) {
  61.                 redisTemplate.delete(key[0]);
  62.             } else {
  63.                 redisTemplate.delete((Collection<String>) CollectionUtils.arrayToList(key));
  64.             }
  65.         }
  66.     }
  67.     //============================String=============================
  68.     /**
  69.      * 普通缓存获取
  70.      *
  71.      * @param key 键
  72.      * @return 值
  73.      */
  74.     public Object get(String key) {
  75.         return key == null ? null : redisTemplate.opsForValue().get(key);
  76.     }
  77.     /**
  78.      * 普通缓存放入
  79.      *
  80.      * @param key   键
  81.      * @param value 值
  82.      * @return true成功 false失败
  83.      */
  84.     public boolean set(String key, Object value) {
  85.         try {
  86.             redisTemplate.opsForValue().set(key, value);
  87.             return true;
  88.         } catch (Exception e) {
  89.             e.printStackTrace();
  90.             return false;
  91.         }
  92.     }
  93.     /**
  94.      * 普通缓存放入并设置时间
  95.      *
  96.      * @param key   键
  97.      * @param value 值
  98.      * @param time  时间(秒) time要大于0 如果time小于等于0 将设置无限期
  99.      * @return true成功 false 失败
  100.      */
  101.     public boolean set(String key, Object value, long time) {
  102.         try {
  103.             if (time > 0) {
  104.                 redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
  105.             } else {
  106.                 set(key, value);
  107.             }
  108.             return true;
  109.         } catch (Exception e) {
  110.             e.printStackTrace();
  111.             return false;
  112.         }
  113.     }
  114.     /**
  115.      * 分布式锁
  116.      * @param key               锁住的key
  117.      * @param lockExpireMils    锁住的时长。如果超时未解锁,视为加锁线程死亡,其他线程可夺取锁
  118.      * @return
  119.      */
  120.     public boolean setNx(String key, Long lockExpireMils) {
  121.         return (boolean) redisTemplate.execute((RedisCallback) connection -> {
  122.             //获取锁
  123.             return connection.setNX(key.getBytes(), String.valueOf(System.currentTimeMillis() + lockExpireMils + 1).getBytes());
  124.         });
  125.     }
  126.     /**
  127.      * 递增
  128.      *
  129.      * @param key   键
  130.      * @param delta 要增加几(大于0)
  131.      * @return
  132.      */
  133.     public long incr(String key, long delta) {
  134.         if (delta < 0) {
  135.             throw new RuntimeException("递增因子必须大于0");
  136.         }
  137.         return redisTemplate.opsForValue().increment(key, delta);
  138.     }
  139.     /**
  140.      * 递减
  141.      *
  142.      * @param key   键
  143.      * @param delta 要减少几(小于0)
  144.      * @return
  145.      */
  146.     public long decr(String key, long delta) {
  147.         if (delta < 0) {
  148.             throw new RuntimeException("递减因子必须大于0");
  149.         }
  150.         return redisTemplate.opsForValue().increment(key, -delta);
  151.     }
  152.     //================================Map=================================
  153.     /**
  154.      * HashGet
  155.      *
  156.      * @param key  键 不能为null
  157.      * @param item 项 不能为null
  158.      * @return 值
  159.      */
  160.     public Object hget(String key, String item) {
  161.         return redisTemplate.opsForHash().get(key, item);
  162.     }
  163.     /**
  164.      * 获取hashKey对应的所有键值
  165.      *
  166.      * @param key 键
  167.      * @return 对应的多个键值
  168.      */
  169.     public Map<Object, Object> hmget(String key) {
  170.         return redisTemplate.opsForHash().entries(key);
  171.     }
  172.     /**
  173.      * HashSet
  174.      *
  175.      * @param key 键
  176.      * @param map 对应多个键值
  177.      * @return true 成功 false 失败
  178.      */
  179.     public boolean hmset(String key, Map<String, Object> map) {
  180.         try {
  181.             redisTemplate.opsForHash().putAll(key, map);
  182.             return true;
  183.         } catch (Exception e) {
  184.             e.printStackTrace();
  185.             return false;
  186.         }
  187.     }
  188.     /**
  189.      * HashSet 并设置时间
  190.      *
  191.      * @param key  键
  192.      * @param map  对应多个键值
  193.      * @param time 时间(秒)
  194.      * @return true成功 false失败
  195.      */
  196.     public boolean hmset(String key, Map<String, Object> map, long time) {
  197.         try {
  198.             redisTemplate.opsForHash().putAll(key, map);
  199.             if (time > 0) {
  200.                 expire(key, time);
  201.             }
  202.             return true;
  203.         } catch (Exception e) {
  204.             e.printStackTrace();
  205.             return false;
  206.         }
  207.     }
  208.     /**
  209.      * 向一张hash表中放入数据,如果不存在将创建
  210.      *
  211.      * @param key   键
  212.      * @param item  项
  213.      * @param value 值
  214.      * @return true 成功 false失败
  215.      */
  216.     public boolean hset(String key, String item, Object value) {
  217.         try {
  218.             redisTemplate.opsForHash().put(key, item, value);
  219.             return true;
  220.         } catch (Exception e) {
  221.             e.printStackTrace();
  222.             return false;
  223.         }
  224.     }
  225.     /**
  226.      * 向一张hash表中放入数据,如果不存在将创建
  227.      *
  228.      * @param key   键
  229.      * @param item  项
  230.      * @param value 值
  231.      * @param time  时间(秒)  注意:如果已存在的hash表有时间,这里将会替换原有的时间
  232.      * @return true 成功 false失败
  233.      */
  234.     public boolean hset(String key, String item, Object value, long time) {
  235.         try {
  236.             redisTemplate.opsForHash().put(key, item, value);
  237.             if (time > 0) {
  238.                 expire(key, time);
  239.             }
  240.             return true;
  241.         } catch (Exception e) {
  242.             e.printStackTrace();
  243.             return false;
  244.         }
  245.     }
  246.     /**
  247.      * 删除hash表中的值
  248.      *
  249.      * @param key  键 不能为null
  250.      * @param item 项 可以使多个 不能为null
  251.      */
  252.     public void hdel(String key, Object... item) {
  253.         redisTemplate.opsForHash().delete(key, item);
  254.     }
  255.     /**
  256.      * 判断hash表中是否有该项的值
  257.      *
  258.      * @param key  键 不能为null
  259.      * @param item 项 不能为null
  260.      * @return true 存在 false不存在
  261.      */
  262.     public boolean hHasKey(String key, String item) {
  263.         return redisTemplate.opsForHash().hasKey(key, item);
  264.     }
  265.     /**
  266.      * hash递增 如果不存在,就会创建一个 并把新增后的值返回
  267.      *
  268.      * @param key  键
  269.      * @param item 项
  270.      * @param by   要增加几(大于0)
  271.      * @return
  272.      */
  273.     public double hincr(String key, String item, double by) {
  274.         return redisTemplate.opsForHash().increment(key, item, by);
  275.     }
  276.     /**
  277.      * hash递减
  278.      *
  279.      * @param key  键
  280.      * @param item 项
  281.      * @param by   要减少记(小于0)
  282.      * @return
  283.      */
  284.     public double hdecr(String key, String item, double by) {
  285.         return redisTemplate.opsForHash().increment(key, item, -by);
  286.     }
  287.     //============================set=============================
  288.     /**
  289.      * 根据key获取Set中的所有值
  290.      *
  291.      * @param key 键
  292.      * @return
  293.      */
  294.     public Set<Object> sGet(String key) {
  295.         try {
  296.             return redisTemplate.opsForSet().members(key);
  297.         } catch (Exception e) {
  298.             e.printStackTrace();
  299.             return null;
  300.         }
  301.     }
  302.     /**
  303.      * 根据value从一个set中查询,是否存在
  304.      *
  305.      * @param key   键
  306.      * @param value 值
  307.      * @return true 存在 false不存在
  308.      */
  309.     public boolean sHasKey(String key, Object value) {
  310.         try {
  311.             return redisTemplate.opsForSet().isMember(key, value);
  312.         } catch (Exception e) {
  313.             e.printStackTrace();
  314.             return false;
  315.         }
  316.     }
  317.     /**
  318.      * 将数据放入set缓存
  319.      *
  320.      * @param key    键
  321.      * @param values 值 可以是多个
  322.      * @return 成功个数
  323.      */
  324.     public long sSet(String key, Object... values) {
  325.         try {
  326.             return redisTemplate.opsForSet().add(key, values);
  327.         } catch (Exception e) {
  328.             e.printStackTrace();
  329.             return 0;
  330.         }
  331.     }
  332.     /**
  333.      * 将set数据放入缓存
  334.      *
  335.      * @param key    键
  336.      * @param time   时间(秒)
  337.      * @param values 值 可以是多个
  338.      * @return 成功个数
  339.      */
  340.     public long sSetAndTime(String key, long time, Object... values) {
  341.         try {
  342.             Long count = redisTemplate.opsForSet().add(key, values);
  343.             if (time > 0) {
  344.                 expire(key, time);
  345.             }
  346.             return count;
  347.         } catch (Exception e) {
  348.             e.printStackTrace();
  349.             return 0;
  350.         }
  351.     }
  352.     /**
  353.      * 获取set缓存的长度
  354.      *
  355.      * @param key 键
  356.      * @return
  357.      */
  358.     public long sGetSetSize(String key) {
  359.         try {
  360.             return redisTemplate.opsForSet().size(key);
  361.         } catch (Exception e) {
  362.             e.printStackTrace();
  363.             return 0;
  364.         }
  365.     }
  366.     /**
  367.      * 移除值为value的
  368.      *
  369.      * @param key    键
  370.      * @param values 值 可以是多个
  371.      * @return 移除的个数
  372.      */
  373.     public long setRemove(String key, Object... values) {
  374.         try {
  375.             Long count = redisTemplate.opsForSet().remove(key, values);
  376.             return count;
  377.         } catch (Exception e) {
  378.             e.printStackTrace();
  379.             return 0;
  380.         }
  381.     }
  382.     //===============================list=================================
  383.     /**
  384.      * 获取list缓存的内容
  385.      *
  386.      * @param key   键
  387.      * @param start 开始
  388.      * @param end   结束  0 到 -1代表所有值
  389.      * @return
  390.      */
  391.     public List<Object> lGet(String key, long start, long end) {
  392.         try {
  393.             return redisTemplate.opsForList().range(key, start, end);
  394.         } catch (Exception e) {
  395.             e.printStackTrace();
  396.             return null;
  397.         }
  398.     }
  399.     /**
  400.      * 获取list缓存的长度
  401.      *
  402.      * @param key 键
  403.      * @return
  404.      */
  405.     public long lGetListSize(String key) {
  406.         try {
  407.             return redisTemplate.opsForList().size(key);
  408.         } catch (Exception e) {
  409.             e.printStackTrace();
  410.             return 0;
  411.         }
  412.     }
  413.     /**
  414.      * 通过索引 获取list中的值
  415.      *
  416.      * @param key   键
  417.      * @param index 索引  index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推
  418.      * @return
  419.      */
  420.     public Object lGetIndex(String key, long index) {
  421.         try {
  422.             return redisTemplate.opsForList().index(key, index);
  423.         } catch (Exception e) {
  424.             e.printStackTrace();
  425.             return null;
  426.         }
  427.     }
  428.     /**
  429.      * 将list放入缓存
  430.      *
  431.      * @param key   键
  432.      * @param value 值
  433.      * @return
  434.      */
  435.     public boolean lSet(String key, Object value) {
  436.         try {
  437.             redisTemplate.opsForList().rightPush(key, value);
  438.             return true;
  439.         } catch (Exception e) {
  440.             e.printStackTrace();
  441.             return false;
  442.         }
  443.     }
  444.     /**
  445.      * 将list放入缓存
  446.      *
  447.      * @param key   键
  448.      * @param value 值
  449.      * @param time  时间(秒)
  450.      * @return
  451.      */
  452.     public boolean lSet(String key, Object value, long time) {
  453.         try {
  454.             redisTemplate.opsForList().rightPush(key, value);
  455.             if (time > 0) {
  456.                 expire(key, time);
  457.             }
  458.             return true;
  459.         } catch (Exception e) {
  460.             e.printStackTrace();
  461.             return false;
  462.         }
  463.     }
  464.     /**
  465.      * 将list放入缓存
  466.      *
  467.      * @param key   键
  468.      * @param value 值
  469.      * @return
  470.      */
  471.     public boolean lSet(String key, List<Object> value) {
  472.         try {
  473.             redisTemplate.opsForList().rightPushAll(key, value);
  474.             return true;
  475.         } catch (Exception e) {
  476.             e.printStackTrace();
  477.             return false;
  478.         }
  479.     }
  480.     /**
  481.      * 将list放入缓存
  482.      *
  483.      * @param key   键
  484.      * @param value 值
  485.      * @param time  时间(秒)
  486.      * @return
  487.      */
  488.     public boolean lSet(String key, List<Object> value, long time) {
  489.         try {
  490.             redisTemplate.opsForList().rightPushAll(key, value);
  491.             if (time > 0) {
  492.                 expire(key, time);
  493.             }
  494.             return true;
  495.         } catch (Exception e) {
  496.             e.printStackTrace();
  497.             return false;
  498.         }
  499.     }
  500.     /**
  501.      * 根据索引修改list中的某条数据
  502.      *
  503.      * @param key   键
  504.      * @param index 索引
  505.      * @param value 值
  506.      * @return
  507.      */
  508.     public boolean lUpdateIndex(String key, long index, Object value) {
  509.         try {
  510.             redisTemplate.opsForList().set(key, index, value);
  511.             return true;
  512.         } catch (Exception e) {
  513.             e.printStackTrace();
  514.             return false;
  515.         }
  516.     }
  517.     /**
  518.      * 移除N个值为value
  519.      *
  520.      * @param key   键
  521.      * @param count 移除多少个
  522.      * @param value 值
  523.      * @return 移除的个数
  524.      */
  525.     public long lRemove(String key, long count, Object value) {
  526.         try {
  527.             Long remove = redisTemplate.opsForList().remove(key, count, value);
  528.             return remove;
  529.         } catch (Exception e) {
  530.             e.printStackTrace();
  531.             return 0;
  532.         }
  533.     }
  534.     /**
  535.      * 模糊查询获取key值
  536.      *
  537.      * @param pattern
  538.      * @return
  539.      */
  540.     public Set keys(String pattern) {
  541.         return redisTemplate.keys(pattern);
  542.     }
  543.     /**
  544.      * 使用Redis的消息队列
  545.      *
  546.      * @param channel
  547.      * @param message 消息内容
  548.      */
  549.     public void convertAndSend(String channel, Object message) {
  550.         redisTemplate.convertAndSend(channel, message);
  551.     }
  552.     //=========BoundListOperations 用法 start============
  553.     /**
  554.      * 将数据添加到Redis的list中(从右边添加)
  555.      *
  556.      * @param listKey
  557.      * @param timeout 有效时间
  558.      * @param unit    时间类型
  559.      * @param values  待添加的数据
  560.      */
  561.     public void addToListRight(String listKey, long timeout, TimeUnit unit, Object... values) {
  562.         //绑定操作
  563.         BoundListOperations<String, Object> boundValueOperations = redisTemplate.boundListOps(listKey);
  564.         //插入数据
  565.         boundValueOperations.rightPushAll(values);
  566.         //设置过期时间
  567.         boundValueOperations.expire(timeout, unit);
  568.     }
  569.     /**
  570.      * 根据起始结束序号遍历Redis中的list
  571.      *
  572.      * @param listKey
  573.      * @param start   起始序号
  574.      * @param end     结束序号
  575.      * @return
  576.      */
  577.     public List<Object> rangeList(String listKey, long start, long end) {
  578.         //绑定操作
  579.         BoundListOperations<String, Object> boundValueOperations = redisTemplate.boundListOps(listKey);
  580.         //查询数据
  581.         return boundValueOperations.range(start, end);
  582.     }
  583.     /**
  584.      * 弹出右边的值 --- 并且移除这个值
  585.      *
  586.      * @param listKey
  587.      */
  588.     public Object rightPop(String listKey) {
  589.         //绑定操作
  590.         BoundListOperations<String, Object> boundValueOperations = redisTemplate.boundListOps(listKey);
  591.         return boundValueOperations.rightPop();
  592.     }
  593.     //=========BoundListOperations 用法 End============
  594. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

勿忘初心做自己

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表