导读


由于项目需要,这里需要设置一个关于RedisTemplate使用的工具类。

使用


导入依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-redis</artifactId>
  4. </dependency>

工具类

工具类是从网上找的,也可以自己根据需求封装一个。

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

具体使用

  1. @RequestMapping("/info")
  2. public void getRedis() {
  3. RedisUtil redisUtil = new RedisUtil();
  4. //字符串处理
  5. redisUtil.set("sss", "hhhhhhh");
  6. String str = (String) redisUtil.get("sss");
  7. System.out.println(str);
  8. //对象处理
  9. User mUser = new User();
  10. mUser.setAge(10);
  11. mUser.setName("小明");
  12. redisUtil.set("props", mUser, 2000);
  13. redisUtil.set("user", mUser);
  14. User user = (User) redisUtil.get("user");
  15. System.out.println(user);
  16. //集合处理
  17. List list = new ArrayList();
  18. list.add(mUser);
  19. redisUtil.lSet("sj", list);
  20. }


END


搞定~