在springboot中可以通过其提供的RedisTemplate对象使用redis。其包装了对redis的一系列操作。
为了方便使用,再次包装为工具类:RedisUtil。代码见下文。
通过RedisUtil.set方法可以直接存入对象,使用RedisUtil.get获取对象,不需要进行任何转换。

测试:直接从数据库查询并做业务处理,耗时366毫秒。从redis中读取存入的数据,耗时188毫秒。
image.png

RedisUtil

  1. /**
  2. * Copyright (C) 2018-2020
  3. * All rights reserved, Designed By www.yixiang.co
  4. * 注意:
  5. * 本软件为www.yixiang.co开发研制
  6. */
  7. package co.yixiang.utils;
  8. import org.springframework.data.redis.core.RedisTemplate;
  9. import org.springframework.util.CollectionUtils;
  10. import java.util.Collection;
  11. import java.util.concurrent.TimeUnit;
  12. public class RedisUtil {
  13. private static RedisTemplate<String, Object> redisTemplate = SpringContextUtils
  14. .getBean("redisTemplate", RedisTemplate.class);
  15. /**
  16. * 指定缓存失效时间
  17. * @param key 键
  18. * @param time 时间(秒)
  19. * @return
  20. */
  21. public static boolean expire(String key, long time) {
  22. try {
  23. if (time > 0) {
  24. redisTemplate.expire(key, time, TimeUnit.SECONDS);
  25. }
  26. return true;
  27. } catch (Exception e) {
  28. e.printStackTrace();
  29. return false;
  30. }
  31. }
  32. /**
  33. * 根据key 获取过期时间
  34. * @param key 键 不能为null
  35. * @return 时间(秒) 返回0代表为永久有效 失效时间为负数,说明该主键未设置失效时间(失效时间默认为-1)
  36. */
  37. public static long getExpire(String key) {
  38. return redisTemplate.getExpire(key, TimeUnit.SECONDS);
  39. }
  40. /**
  41. * 判断key是否存在
  42. * @param key 键
  43. * @return true 存在 false 不存在
  44. */
  45. public static boolean hasKey(String key) {
  46. try {
  47. return redisTemplate.hasKey(key);
  48. } catch (Exception e) {
  49. e.printStackTrace();
  50. return false;
  51. }
  52. }
  53. /**
  54. * 删除缓存
  55. * @param key 可以传一个值 或多个
  56. */
  57. @SuppressWarnings("unchecked")
  58. public static 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. /**
  68. * 普通缓存获取
  69. * @param key 键
  70. * @return 值
  71. */
  72. @SuppressWarnings("unchecked")
  73. public static <T> T get(String key) {
  74. return key == null ? null : (T) redisTemplate.opsForValue().get(key);
  75. }
  76. /**
  77. * 普通缓存放入
  78. * @param key 键
  79. * @param value 值
  80. * @return true成功 false失败
  81. */
  82. public static boolean set(String key, Object value) {
  83. try {
  84. redisTemplate.opsForValue().set(key, value);
  85. return true;
  86. } catch (Exception e) {
  87. e.printStackTrace();
  88. return false;
  89. }
  90. }
  91. /**
  92. * 普通缓存放入并设置时间
  93. * @param key 键
  94. * @param value 值
  95. * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期
  96. * @return true成功 false 失败
  97. */
  98. public static boolean set(String key, Object value, long time) {
  99. try {
  100. if (time > 0) {
  101. redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
  102. } else {
  103. set(key, value);
  104. }
  105. return true;
  106. } catch (Exception e) {
  107. e.printStackTrace();
  108. return false;
  109. }
  110. }
  111. /**
  112. * 递增 此时value值必须为int类型 否则报错
  113. * @param key 键
  114. * @param delta 要增加几(大于0)
  115. * @return
  116. */
  117. public static long incr(String key, long delta) {
  118. if (delta < 0) {
  119. throw new RuntimeException("递增因子必须大于0");
  120. }
  121. return redisTemplate.opsForValue().increment(key, delta);
  122. }
  123. /**
  124. * 递减
  125. * @param key 键
  126. * @param delta 要减少几(小于0)
  127. * @return
  128. */
  129. public static long decr(String key, long delta) {
  130. if (delta < 0) {
  131. throw new RuntimeException("递减因子必须大于0");
  132. }
  133. return redisTemplate.opsForValue().increment(key, -delta);
  134. }
  135. }