You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
3.5 KiB

  1. package com.xujie.sys.config;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import org.springframework.context.annotation.Primary;
  7. import org.springframework.data.redis.cache.CacheKeyPrefix;
  8. import org.springframework.data.redis.connection.RedisConnectionFactory;
  9. import org.springframework.data.redis.core.*;
  10. import org.springframework.data.redis.listener.ChannelTopic;
  11. import org.springframework.data.redis.listener.RedisMessageListenerContainer;
  12. import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
  13. import org.springframework.data.redis.serializer.StringRedisSerializer;
  14. /**
  15. * Redis配置
  16. *
  17. *
  18. */
  19. @Configuration
  20. @Slf4j
  21. public class RedisConfig {
  22. @Bean
  23. public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
  24. Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
  25. RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
  26. redisTemplate.setConnectionFactory(redisConnectionFactory);
  27. redisTemplate.setKeySerializer(new StringRedisSerializer());
  28. redisTemplate.setHashKeySerializer(new StringRedisSerializer());
  29. redisTemplate.setHashValueSerializer(new StringRedisSerializer());
  30. redisTemplate.setValueSerializer(new StringRedisSerializer());
  31. // value序列化方式采用jackson
  32. redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
  33. return redisTemplate;
  34. }
  35. /**
  36. * spring redis 默认生成key方式,包含::
  37. *
  38. * @param prefix the prefix
  39. * @param key the key
  40. * @return string
  41. */
  42. public String simpleKeyGenerator(String prefix, String key) {
  43. return CacheKeyPrefix.simple().compute(prefix) + key;
  44. }
  45. /**
  46. * 创建Redis消息监听器
  47. *
  48. * @param connectionFactory
  49. * @return
  50. */
  51. @Bean
  52. @Primary
  53. public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
  54. RedisMessageListenerContainer container = new RedisMessageListenerContainer();
  55. container.setConnectionFactory(connectionFactory);
  56. return container;
  57. }
  58. /**
  59. * 监听指定的库
  60. * 这个地方我当初设置的是库是 1我链接的库是 4
  61. * 但是最后Listener还是能收到其他库key过期的消息不知道为啥
  62. * 建议大家改成 * 直接监听所有库哈不过这样消息会变多哈
  63. */
  64. @Bean
  65. public ChannelTopic expiredTopic() {
  66. return new ChannelTopic("__keyevent@*__:expired");
  67. }
  68. @Bean
  69. public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {
  70. return redisTemplate.opsForHash();
  71. }
  72. @Bean
  73. public ValueOperations<String, String> valueOperations(RedisTemplate<String, String> redisTemplate) {
  74. return redisTemplate.opsForValue();
  75. }
  76. @Bean
  77. public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {
  78. return redisTemplate.opsForList();
  79. }
  80. @Bean
  81. public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {
  82. return redisTemplate.opsForSet();
  83. }
  84. @Bean
  85. public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {
  86. return redisTemplate.opsForZSet();
  87. }
  88. }