JedisUtil.java 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. package com.usky.utils.jwt;
  2. import com.usky.constant.Constant;
  3. import com.usky.exception.CustomException;
  4. import com.usky.utils.jwt.common.SerializableUtil;
  5. import com.usky.utils.jwt.common.StringUtil;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Component;
  8. import redis.clients.jedis.Jedis;
  9. import redis.clients.jedis.JedisPool;
  10. import java.util.Set;
  11. /**
  12. * JedisUtil(推荐存Byte数组,存Json字符串效率更慢)
  13. * @author laowo
  14. * @date 2020/9/4 15:45
  15. */
  16. @Component
  17. public class JedisUtil {
  18. /**
  19. * 静态注入JedisPool连接池
  20. * 本来是正常注入JedisUtil,可以在Controller和Service层使用,但是重写Shiro的CustomCache无法注入JedisUtil
  21. * 现在改为静态注入JedisPool连接池,JedisUtil直接调用静态方法即可
  22. * https://blog.csdn.net/W_Z_W_888/article/details/79979103
  23. */
  24. private static JedisPool jedisPool;
  25. @Autowired
  26. public void setJedisPool(JedisPool jedisPool) {
  27. JedisUtil.jedisPool = jedisPool;
  28. }
  29. /**
  30. * 获取Jedis实例
  31. * @param
  32. * @return redis.clients.jedis.Jedis
  33. * @author laowo
  34. * @date 2020/9/4 15:47
  35. */
  36. public static synchronized Jedis getJedis() {
  37. try {
  38. if (jedisPool != null) {
  39. return jedisPool.getResource();
  40. } else {
  41. return null;
  42. }
  43. } catch (Exception e) {
  44. throw new CustomException("获取Jedis资源异常:" + e.getMessage());
  45. }
  46. }
  47. /**
  48. * 释放Jedis资源
  49. * @param
  50. * @return void
  51. * @author laowo
  52. * @date 2020/9/5 9:16
  53. */
  54. public static void closePool() {
  55. try {
  56. jedisPool.close();
  57. } catch (Exception e) {
  58. throw new CustomException("释放Jedis资源异常:" + e.getMessage());
  59. }
  60. }
  61. /**
  62. * 获取redis键值-object
  63. * @param key
  64. * @return java.lang.Object
  65. * @author laowo
  66. * @date 2020/9/4 15:47
  67. */
  68. public static Object getObject(String key) {
  69. try (Jedis jedis = jedisPool.getResource()) {
  70. byte[] bytes = jedis.get(key.getBytes());
  71. if (StringUtil.isNotNull(bytes)) {
  72. return SerializableUtil.unserializable(bytes);
  73. }
  74. } catch (Exception e) {
  75. throw new CustomException("获取Redis键值getObject方法异常:key=" + key + " cause=" + e.getMessage());
  76. }
  77. return null;
  78. }
  79. /**
  80. * 设置redis键值-object
  81. * @param key
  82. * @param value
  83. * @return java.lang.String
  84. * @author laowo
  85. * @date 2020/9/4 15:49
  86. */
  87. public static String setObject(String key, Object value) {
  88. try (Jedis jedis = jedisPool.getResource()) {
  89. return jedis.set(key.getBytes(), SerializableUtil.serializable(value));
  90. } catch (Exception e) {
  91. throw new CustomException("设置Redis键值setObject方法异常:key=" + key + " value=" + value + " cause=" + e.getMessage());
  92. }
  93. }
  94. /**
  95. * 设置redis键值-object-expiretime
  96. * @param key
  97. * @param value
  98. * @param expiretime
  99. * @return java.lang.String
  100. * @author laowo
  101. * @date 2020/9/4 15:50
  102. */
  103. public static String setObject(String key, Object value, int expiretime) {
  104. String result;
  105. try (Jedis jedis = jedisPool.getResource()) {
  106. result = jedis.set(key.getBytes(), SerializableUtil.serializable(value));
  107. if (Constant.OK.equals(result)) {
  108. jedis.expire(key.getBytes(), expiretime);
  109. }
  110. return result;
  111. } catch (Exception e) {
  112. throw new CustomException("设置Redis键值setObject方法异常:key=" + key + " value=" + value + " cause=" + e.getMessage());
  113. }
  114. }
  115. /**
  116. * 获取redis键值-Json
  117. * @param key
  118. * @return java.lang.Object
  119. * @author laowo
  120. * @date 2020/9/4 15:47
  121. */
  122. public static String getJson(String key) {
  123. try (Jedis jedis = jedisPool.getResource()) {
  124. return jedis.get(key);
  125. } catch (Exception e) {
  126. throw new CustomException("获取Redis键值getJson方法异常:key=" + key + " cause=" + e.getMessage());
  127. }
  128. }
  129. /**
  130. * 设置redis键值-Json
  131. * @param key
  132. * @param value
  133. * @return java.lang.String
  134. * @author Wang926454
  135. * @date 2020/9/4 15:49
  136. */
  137. public static String setJson(String key, String value) {
  138. try (Jedis jedis = jedisPool.getResource()) {
  139. return jedis.set(key, value);
  140. } catch (Exception e) {
  141. throw new CustomException("设置Redis键值setJson方法异常:key=" + key + " value=" + value + " cause=" + e.getMessage());
  142. }
  143. }
  144. /**
  145. * 设置redis键值-Json-expiretime
  146. * @param key
  147. * @param value
  148. * @param expiretime
  149. * @return java.lang.String
  150. * @author Wang926454
  151. * @date 2020/9/4 15:50
  152. */
  153. public static String setJson(String key, String value, int expiretime) {
  154. String result;
  155. try (Jedis jedis = jedisPool.getResource()) {
  156. result = jedis.set(key, value);
  157. if (Constant.OK.equals(result)) {
  158. jedis.expire(key, expiretime);
  159. }
  160. return result;
  161. } catch (Exception e) {
  162. throw new CustomException("设置Redis键值setJson方法异常:key=" + key + " value=" + value + " cause=" + e.getMessage());
  163. }
  164. }
  165. /**
  166. * 删除key
  167. * @param key
  168. * @return java.lang.Long
  169. * @author Wang926454
  170. * @date 2020/9/4 15:50
  171. */
  172. public static Long delKey(String key) {
  173. try (Jedis jedis = jedisPool.getResource()) {
  174. return jedis.del(key.getBytes());
  175. } catch (Exception e) {
  176. throw new CustomException("删除Redis的键delKey方法异常:key=" + key + " cause=" + e.getMessage());
  177. }
  178. }
  179. /**
  180. * key是否存在
  181. * @param key
  182. * @return java.lang.Boolean
  183. * @author Wang926454
  184. * @date 2020/9/4 15:51
  185. */
  186. public static Boolean exists(String key) {
  187. try (Jedis jedis = jedisPool.getResource()) {
  188. return jedis.exists(key.getBytes());
  189. } catch (Exception e) {
  190. throw new CustomException("查询Redis的键是否存在exists方法异常:key=" + key + " cause=" + e.getMessage());
  191. }
  192. }
  193. /**
  194. * 模糊查询获取key集合(keys的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,生产不推荐使用)
  195. * @param key
  196. * @return java.util.Set<java.lang.String>
  197. * @author Wang926454
  198. * @date 2020/9/6 9:43
  199. */
  200. public static Set<String> keysS(String key) {
  201. try (Jedis jedis = jedisPool.getResource()) {
  202. return jedis.keys(key);
  203. } catch (Exception e) {
  204. throw new CustomException("模糊查询Redis的键集合keysS方法异常:key=" + key + " cause=" + e.getMessage());
  205. }
  206. }
  207. /**
  208. * 模糊查询获取key集合(keys的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,生产不推荐使用)
  209. * @param key
  210. * @return java.util.Set<java.lang.String>
  211. * @author Wang926454
  212. * @date 2020/9/6 9:43
  213. */
  214. public static Set<byte[]> keysB(String key) {
  215. try (Jedis jedis = jedisPool.getResource()) {
  216. return jedis.keys(key.getBytes());
  217. } catch (Exception e) {
  218. throw new CustomException("模糊查询Redis的键集合keysB方法异常:key=" + key + " cause=" + e.getMessage());
  219. }
  220. }
  221. /**
  222. * 获取过期剩余时间
  223. * @param key
  224. * @return java.lang.String
  225. * @author Wang926454
  226. * @date 2020/9/11 16:26
  227. */
  228. public static Long ttl(String key) {
  229. Long result = -2L;
  230. try (Jedis jedis = jedisPool.getResource()) {
  231. result = jedis.ttl(key);
  232. return result;
  233. } catch (Exception e) {
  234. throw new CustomException("获取Redis键过期剩余时间ttl方法异常:key=" + key + " cause=" + e.getMessage());
  235. }
  236. }
  237. }