RedisConfig.java 3.7 KB

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