yml配置文件

  1. spring:
  2. redis:
  3. database: 0 # Redis数据库索引(默认为0)
  4. host: 124.223.204.195 # Redis服务器地址
  5. port: 6379 #Redis服务器连接端口
  6. password: LCXlcx0726 #Redis服务器连接密码(默认为空)
  7. lettuce:
  8. pool:
  9. max-active: 8 #连接池最大连接数(使用负值表示没有限制) 默认 8
  10. max-wait: -1 #连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
  11. max-idle: 8 #连接池中的最大空闲连接 默认 8
  12. min-idle: 0 #连接池中的最小空闲连接 默认 0
  13. timeout: 30000 #连接超时时间(毫秒)

RedisConfig Redis配置类

  1. import com.fasterxml.jackson.annotation.JsonAutoDetect;
  2. import com.fasterxml.jackson.annotation.PropertyAccessor;
  3. import com.fasterxml.jackson.databind.ObjectMapper;
  4. import org.springframework.cache.annotation.CachingConfigurerSupport;
  5. import org.springframework.cache.annotation.EnableCaching;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8. import org.springframework.data.redis.connection.RedisConnectionFactory;
  9. import org.springframework.data.redis.core.*;
  10. import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
  11. import org.springframework.data.redis.serializer.StringRedisSerializer;
  12. /**
  13. * redis配置类
  14. */
  15. @Configuration
  16. @EnableCaching //开启注解
  17. public class RedisConfig extends CachingConfigurerSupport {
  18. /**
  19. * retemplate相关配置
  20. */
  21. @Bean
  22. public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
  23. RedisTemplate<String, Object> template = new RedisTemplate<>();
  24. // 配置连接工厂
  25. template.setConnectionFactory(factory);
  26. //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
  27. Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);
  28. ObjectMapper om = new ObjectMapper();
  29. // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
  30. om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
  31. // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常
  32. om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
  33. jacksonSeial.setObjectMapper(om);
  34. // 值采用json序列化
  35. template.setValueSerializer(jacksonSeial);
  36. //使用StringRedisSerializer来序列化和反序列化redis的key值
  37. template.setKeySerializer(new StringRedisSerializer());
  38. // 设置hash key 和value序列化模式
  39. template.setHashKeySerializer(new StringRedisSerializer());
  40. template.setHashValueSerializer(jacksonSeial);
  41. template.afterPropertiesSet();
  42. return template;
  43. }
  44. /**
  45. * 对hash类型的数据操作
  46. */
  47. @Bean
  48. public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {
  49. return redisTemplate.opsForHash();
  50. }
  51. /**
  52. * 对redis字符串类型数据操作
  53. */
  54. @Bean
  55. public ValueOperations<String, Object> valueOperations(RedisTemplate<String, Object> redisTemplate) {
  56. return redisTemplate.opsForValue();
  57. }
  58. /**
  59. * 对链表类型的数据操作
  60. */
  61. @Bean
  62. public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {
  63. return redisTemplate.opsForList();
  64. }
  65. /**
  66. * 对无序集合类型的数据操作
  67. */
  68. @Bean
  69. public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {
  70. return redisTemplate.opsForSet();
  71. }
  72. /**
  73. * 对有序集合类型的数据操作
  74. */
  75. @Bean
  76. public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {
  77. return redisTemplate.opsForZSet();
  78. }
  79. }

RedisCache 工具类

  1. import org.springframework.beans.factory.annotation.Autowired;
  2. import org.springframework.data.redis.core.BoundSetOperations;
  3. import org.springframework.data.redis.core.HashOperations;
  4. import org.springframework.data.redis.core.RedisTemplate;
  5. import org.springframework.data.redis.core.ValueOperations;
  6. import org.springframework.stereotype.Component;
  7. import java.util.*;
  8. import java.util.concurrent.TimeUnit;
  9. @SuppressWarnings(value = { "unchecked", "rawtypes" })
  10. @Component
  11. public class RedisCache
  12. {
  13. @Autowired
  14. public RedisTemplate redisTemplate;
  15. /**
  16. * 缓存基本的对象,Integer、String、实体类等
  17. *
  18. * @param key 缓存的键值
  19. * @param value 缓存的值
  20. */
  21. public <T> void setCacheObject(final String key, final T value)
  22. {
  23. redisTemplate.opsForValue().set(key, value);
  24. }
  25. /**
  26. * 缓存基本的对象,Integer、String、实体类等
  27. *
  28. * @param key 缓存的键值
  29. * @param value 缓存的值
  30. * @param timeout 时间
  31. * @param timeUnit 时间颗粒度
  32. */
  33. public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit)
  34. {
  35. redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
  36. }
  37. /**
  38. * 设置有效时间
  39. *
  40. * @param key Redis键
  41. * @param timeout 超时时间
  42. * @return true=设置成功;false=设置失败
  43. */
  44. public boolean expire(final String key, final long timeout)
  45. {
  46. return expire(key, timeout, TimeUnit.SECONDS);
  47. }
  48. /**
  49. * 设置有效时间
  50. *
  51. * @param key Redis键
  52. * @param timeout 超时时间
  53. * @param unit 时间单位
  54. * @return true=设置成功;false=设置失败
  55. */
  56. public boolean expire(final String key, final long timeout, final TimeUnit unit)
  57. {
  58. return redisTemplate.expire(key, timeout, unit);
  59. }
  60. /**
  61. * 获得缓存的基本对象。
  62. *
  63. * @param key 缓存键值
  64. * @return 缓存键值对应的数据
  65. */
  66. public <T> T getCacheObject(final String key)
  67. {
  68. ValueOperations<String, T> operation = redisTemplate.opsForValue();
  69. return operation.get(key);
  70. }
  71. /**
  72. * 删除单个对象
  73. *
  74. * @param key
  75. */
  76. public boolean deleteObject(final String key)
  77. {
  78. return redisTemplate.delete(key);
  79. }
  80. /**
  81. * 删除集合对象
  82. *
  83. * @param collection 多个对象
  84. * @return
  85. */
  86. public long deleteObject(final Collection collection)
  87. {
  88. return redisTemplate.delete(collection);
  89. }
  90. /**
  91. * 缓存List数据
  92. *
  93. * @param key 缓存的键值
  94. * @param dataList 待缓存的List数据
  95. * @return 缓存的对象
  96. */
  97. public <T> long setCacheList(final String key, final List<T> dataList)
  98. {
  99. Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
  100. return count == null ? 0 : count;
  101. }
  102. /**
  103. * 获得缓存的list对象
  104. *
  105. * @param key 缓存的键值
  106. * @return 缓存键值对应的数据
  107. */
  108. public <T> List<T> getCacheList(final String key)
  109. {
  110. return redisTemplate.opsForList().range(key, 0, -1);
  111. }
  112. /**
  113. * 缓存Set
  114. *
  115. * @param key 缓存键值
  116. * @param dataSet 缓存的数据
  117. * @return 缓存数据的对象
  118. */
  119. public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet)
  120. {
  121. BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);
  122. Iterator<T> it = dataSet.iterator();
  123. while (it.hasNext())
  124. {
  125. setOperation.add(it.next());
  126. }
  127. return setOperation;
  128. }
  129. /**
  130. * 获得缓存的set
  131. *
  132. * @param key
  133. * @return
  134. */
  135. public <T> Set<T> getCacheSet(final String key)
  136. {
  137. return redisTemplate.opsForSet().members(key);
  138. }
  139. /**
  140. * 缓存Map
  141. *
  142. * @param key
  143. * @param dataMap
  144. */
  145. public <T> void setCacheMap(final String key, final Map<String, T> dataMap)
  146. {
  147. if (dataMap != null) {
  148. redisTemplate.opsForHash().putAll(key, dataMap);
  149. }
  150. }
  151. /**
  152. * 获得缓存的Map
  153. *
  154. * @param key
  155. * @return
  156. */
  157. public <T> Map<String, T> getCacheMap(final String key)
  158. {
  159. return redisTemplate.opsForHash().entries(key);
  160. }
  161. /**
  162. * 往Hash中存入数据
  163. *
  164. * @param key Redis键
  165. * @param hKey Hash键
  166. * @param value 值
  167. */
  168. public <T> void setCacheMapValue(final String key, final String hKey, final T value)
  169. {
  170. redisTemplate.opsForHash().put(key, hKey, value);
  171. }
  172. /**
  173. * 获取Hash中的数据
  174. *
  175. * @param key Redis键
  176. * @param hKey Hash键
  177. * @return Hash中的对象
  178. */
  179. public <T> T getCacheMapValue(final String key, final String hKey)
  180. {
  181. HashOperations<String, String, T> opsForHash = redisTemplate.opsForHash();
  182. return opsForHash.get(key, hKey);
  183. }
  184. /**
  185. * 删除Hash中的数据
  186. *
  187. * @param key
  188. * @param hkey
  189. */
  190. public void delCacheMapValue(final String key, final String hkey)
  191. {
  192. HashOperations hashOperations = redisTemplate.opsForHash();
  193. hashOperations.delete(key, hkey);
  194. }
  195. /**
  196. * 获取多个Hash中的数据
  197. *
  198. * @param key Redis键
  199. * @param hKeys Hash键集合
  200. * @return Hash对象集合
  201. */
  202. public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys)
  203. {
  204. return redisTemplate.opsForHash().multiGet(key, hKeys);
  205. }
  206. /**
  207. * 获得缓存的基本对象列表
  208. *
  209. * @param pattern 字符串前缀
  210. * @return 对象列表
  211. */
  212. public Collection<String> keys(final String pattern)
  213. {
  214. return redisTemplate.keys(pattern);
  215. }
  216. }