RedisUtils.java 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. package com.ruoyi.common.utils;
  2. import com.google.common.collect.Lists;
  3. import com.ruoyi.common.utils.spring.SpringUtils;
  4. import lombok.AccessLevel;
  5. import lombok.NoArgsConstructor;
  6. import org.redisson.api.RBatch;
  7. import org.redisson.api.RBucket;
  8. import org.redisson.api.RList;
  9. import org.redisson.api.RMap;
  10. import org.redisson.api.RSet;
  11. import org.redisson.api.RTopic;
  12. import org.redisson.api.RedissonClient;
  13. import java.util.Collection;
  14. import java.util.List;
  15. import java.util.Map;
  16. import java.util.Set;
  17. import java.util.concurrent.TimeUnit;
  18. import java.util.function.Consumer;
  19. /**
  20. * redis 工具类
  21. *
  22. * @author Lion Li
  23. * @version 3.1.0 新增
  24. */
  25. @NoArgsConstructor(access = AccessLevel.PRIVATE)
  26. @SuppressWarnings(value = {"unchecked", "rawtypes"})
  27. public class RedisUtils {
  28. private static RedissonClient client = SpringUtils.getBean(RedissonClient.class);
  29. /**
  30. * 发布通道消息
  31. *
  32. * @param channelKey 通道key
  33. * @param msg 发送数据
  34. * @param consumer 自定义处理
  35. */
  36. public static <T> void publish(String channelKey, T msg, Consumer<T> consumer) {
  37. RTopic topic = client.getTopic(channelKey);
  38. topic.publish(msg);
  39. consumer.accept(msg);
  40. }
  41. public static <T> void publish(String channelKey, T msg) {
  42. RTopic topic = client.getTopic(channelKey);
  43. topic.publish(msg);
  44. }
  45. /**
  46. * 订阅通道接收消息
  47. *
  48. * @param channelKey 通道key
  49. * @param clazz 消息类型
  50. * @param consumer 自定义处理
  51. */
  52. public static <T> void subscribe(String channelKey, Class<T> clazz, Consumer<T> consumer) {
  53. RTopic topic = client.getTopic(channelKey);
  54. topic.addListener(clazz, (channel, msg) -> consumer.accept(msg));
  55. }
  56. /**
  57. * 缓存基本的对象,Integer、String、实体类等
  58. *
  59. * @param key 缓存的键值
  60. * @param value 缓存的值
  61. */
  62. public static <T> void setCacheObject(final String key, final T value) {
  63. client.getBucket(key).set(value);
  64. }
  65. /**
  66. * 缓存基本的对象,Integer、String、实体类等
  67. *
  68. * @param key 缓存的键值
  69. * @param value 缓存的值
  70. * @param timeout 时间
  71. * @param timeUnit 时间颗粒度
  72. */
  73. public static <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) {
  74. RBucket<T> result = client.getBucket(key);
  75. result.set(value);
  76. result.expire(timeout, timeUnit);
  77. }
  78. /**
  79. * 设置有效时间
  80. *
  81. * @param key Redis键
  82. * @param timeout 超时时间
  83. * @return true=设置成功;false=设置失败
  84. */
  85. public static boolean expire(final String key, final long timeout) {
  86. return expire(key, timeout, TimeUnit.SECONDS);
  87. }
  88. /**
  89. * 设置有效时间
  90. *
  91. * @param key Redis键
  92. * @param timeout 超时时间
  93. * @param unit 时间单位
  94. * @return true=设置成功;false=设置失败
  95. */
  96. public static boolean expire(final String key, final long timeout, final TimeUnit unit) {
  97. RBucket rBucket = client.getBucket(key);
  98. return rBucket.expire(timeout, unit);
  99. }
  100. /**
  101. * 获取是否存在某个key
  102. *
  103. * @param key
  104. * @return
  105. */
  106. public static boolean exist(final String key) {
  107. RBucket rBucket = client.getBucket(key);
  108. return rBucket.isExists();
  109. }
  110. /**
  111. * 获取过期时间
  112. *
  113. * @param key
  114. * @return
  115. */
  116. public static long getTtl(final String key) {
  117. RBucket rBucket = client.getBucket(key);
  118. return rBucket.remainTimeToLive();
  119. }
  120. /**
  121. * 获得缓存的基本对象。
  122. *
  123. * @param key 缓存键值
  124. * @return 缓存键值对应的数据
  125. */
  126. public static <T> T getCacheObject(final String key) {
  127. RBucket<T> rBucket = client.getBucket(key);
  128. return rBucket.get();
  129. }
  130. /**
  131. * 删除单个对象
  132. *
  133. * @param key
  134. */
  135. public static boolean deleteObject(final String key) {
  136. return client.getBucket(key).delete();
  137. }
  138. /* */
  139. /**
  140. * 删除集合对象
  141. *
  142. * @param collection 多个对象
  143. * @return
  144. */
  145. public static void deleteObject(final Collection collection) {
  146. RBatch batch = client.createBatch();
  147. collection.forEach(t -> {
  148. batch.getBucket(t.toString()).deleteAsync();
  149. });
  150. batch.execute();
  151. }
  152. /**
  153. * 缓存List数据
  154. *
  155. * @param key 缓存的键值
  156. * @param dataList 待缓存的List数据
  157. * @return 缓存的对象
  158. */
  159. public static <T> boolean setCacheList(final String key, final List<T> dataList) {
  160. RList<T> rList = client.getList(key);
  161. return rList.addAll(dataList);
  162. }
  163. /**
  164. * 获得缓存的list对象
  165. *
  166. * @param key 缓存的键值
  167. * @return 缓存键值对应的数据
  168. */
  169. public static <T> List<T> getCacheList(final String key) {
  170. RList<T> rList = client.getList(key);
  171. return rList.readAll();
  172. }
  173. /**
  174. * 缓存Set
  175. *
  176. * @param key 缓存键值
  177. * @param dataSet 缓存的数据
  178. * @return 缓存数据的对象
  179. */
  180. public static <T> boolean setCacheSet(final String key, final Set<T> dataSet) {
  181. RSet<T> rSet = client.getSet(key);
  182. return rSet.addAll(dataSet);
  183. }
  184. /**
  185. * 获得缓存的set
  186. *
  187. * @param key
  188. * @return
  189. */
  190. public static <T> Set<T> getCacheSet(final String key) {
  191. RSet<T> rSet = client.getSet(key);
  192. return rSet.readAll();
  193. }
  194. /**
  195. * 缓存Map
  196. *
  197. * @param key
  198. * @param dataMap
  199. */
  200. public static <T> void setCacheMap(final String key, final Map<String, T> dataMap) {
  201. if (dataMap != null) {
  202. RMap<String, T> rMap = client.getMap(key);
  203. rMap.putAll(dataMap);
  204. }
  205. }
  206. /**
  207. * 获得缓存的Map
  208. *
  209. * @param key
  210. * @return
  211. */
  212. public static <T> Map<String, T> getCacheMap(final String key) {
  213. RMap<String, T> rMap = client.getMap(key);
  214. return rMap.getAll(rMap.keySet());
  215. }
  216. /**
  217. * 往Hash中存入数据
  218. *
  219. * @param key Redis键
  220. * @param hKey Hash键
  221. * @param value 值
  222. */
  223. public static <T> void setCacheMapValue(final String key, final String hKey, final T value) {
  224. RMap<String, T> rMap = client.getMap(key);
  225. rMap.put(hKey, value);
  226. }
  227. /**
  228. * 获取Hash中的数据
  229. *
  230. * @param key Redis键
  231. * @param hKey Hash键
  232. * @return Hash中的对象
  233. */
  234. public static <T> T getCacheMapValue(final String key, final String hKey) {
  235. RMap<String, T> rMap = client.getMap(key);
  236. return rMap.get(hKey);
  237. }
  238. /**
  239. * 获取多个Hash中的数据
  240. *
  241. * @param key Redis键
  242. * @param hKeys Hash键集合
  243. * @return Hash对象集合
  244. */
  245. public static <K, V> Map<K, V> getMultiCacheMapValue(final String key, final Set<K> hKeys) {
  246. RMap<K, V> rMap = client.getMap(key);
  247. return rMap.getAll(hKeys);
  248. }
  249. /**
  250. * 获得缓存的基本对象列表
  251. *
  252. * @param pattern 字符串前缀
  253. * @return 对象列表
  254. */
  255. public static Collection<String> keys(final String pattern) {
  256. Iterable<String> iterable = client.getKeys().getKeysByPattern(pattern);
  257. return Lists.newArrayList(iterable);
  258. }
  259. }