springboot2.x整合redis的单机模式

Dear 丶 2022-10-10 06:05 22阅读 0赞

springboot2.x整合redis的单机模式

maven依赖

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <parent>
  5. <groupId>org.springframework.boot</groupId>
  6. <artifactId>spring-boot-starter-parent</artifactId>
  7. <version>2.1.6.RELEASE</version>
  8. <relativePath/> <!-- lookup parent from repository -->
  9. </parent>
  10. <groupId>com.ls</groupId>
  11. <artifactId>demo-redis</artifactId>
  12. <version>0.0.1-SNAPSHOT</version>
  13. <name>demo-redis</name>
  14. <description>Demo project for Spring Boot</description>
  15. <properties>
  16. <java.version>1.8</java.version>
  17. <jackson.version>2.9.8</jackson.version>
  18. </properties>
  19. <dependencies>
  20. <!--redis-->
  21. <dependency>
  22. <groupId>org.springframework.boot</groupId>
  23. <artifactId>spring-boot-starter-data-redis</artifactId>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.apache.commons</groupId>
  27. <artifactId>commons-pool2</artifactId>
  28. </dependency>
  29. <dependency>
  30. <groupId>redis.clients</groupId>
  31. <artifactId>jedis</artifactId>
  32. </dependency>
  33. <!--jackson序列化-->
  34. <dependency>
  35. <groupId>com.fasterxml.jackson.core</groupId>
  36. <artifactId>jackson-core</artifactId>
  37. <version>${jackson.version}</version>
  38. </dependency>
  39. <dependency>
  40. <groupId>com.fasterxml.jackson.core</groupId>
  41. <artifactId>jackson-databind</artifactId>
  42. <version>${jackson.version}</version>
  43. </dependency>
  44. <dependency>
  45. <groupId>org.springframework.boot</groupId>
  46. <artifactId>spring-boot-starter-web</artifactId>
  47. </dependency>
  48. <dependency>
  49. <groupId>org.springframework.boot</groupId>
  50. <artifactId>spring-boot-starter-test</artifactId>
  51. <scope>test</scope>
  52. </dependency>
  53. </dependencies>
  54. <build>
  55. <plugins>
  56. <plugin>
  57. <groupId>org.springframework.boot</groupId>
  58. <artifactId>spring-boot-maven-plugin</artifactId>
  59. </plugin>
  60. </plugins>
  61. </build>
  62. </project>

配置文件:application.properties

  1. #配置Redis
  2. spring.redis.database=0
  3. spring.redis.host=192.168.221.138
  4. spring.redis.port=7000
  5. #连接超时时间(毫秒)
  6. spring.redis.timeout=10000

RedisCacheConfig配置

包含发布订阅模式的配置

  1. package com.ls.config;
  2. import com.fasterxml.jackson.annotation.JsonAutoDetect;
  3. import com.fasterxml.jackson.annotation.PropertyAccessor;
  4. import com.fasterxml.jackson.databind.ObjectMapper;
  5. import com.ls.constant.MessageConstant;
  6. import com.ls.listen.MessageReceiverSupport;
  7. import java.time.Duration;
  8. import org.springframework.beans.factory.annotation.Value;
  9. import org.springframework.context.annotation.Bean;
  10. import org.springframework.context.annotation.Configuration;
  11. import org.springframework.data.redis.connection.RedisConnectionFactory;
  12. import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
  13. import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
  14. import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
  15. import org.springframework.data.redis.core.RedisTemplate;
  16. import org.springframework.data.redis.listener.PatternTopic;
  17. import org.springframework.data.redis.listener.RedisMessageListenerContainer;
  18. import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
  19. import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
  20. import org.springframework.data.redis.serializer.StringRedisSerializer;
  21. /** * Created by ls on 2021/6/26. * * @desc: */
  22. @Configuration
  23. public class RedisCacheConfig {
  24. @Value("${spring.redis.host}")
  25. private String host;
  26. @Value("${spring.redis.port}")
  27. private int port;
  28. @Value("${spring.redis.timeout}")
  29. private int timeout ;
  30. /** 配置JedisConnectionFactory*/
  31. @Bean
  32. public RedisConnectionFactory redisConnectionFactory(){
  33. RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(host,port);
  34. JedisClientConfiguration.JedisClientConfigurationBuilder jedisClientConfiguration = JedisClientConfiguration.builder();
  35. jedisClientConfiguration.connectTimeout(Duration.ofMillis(timeout));// connection timeout
  36. RedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory(redisStandaloneConfiguration,
  37. jedisClientConfiguration.build());
  38. return redisConnectionFactory;
  39. }
  40. /** SpringBoot自定义配置RedisTemplate*/
  41. @Bean
  42. public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
  43. RedisTemplate<String, Object> template=new RedisTemplate<>();
  44. template.setConnectionFactory(redisConnectionFactory);
  45. // 使用Jackson2JsonRedisSerialize 替换默认序列化
  46. Jackson2JsonRedisSerializer jackson2JsonRedisSerializer=new Jackson2JsonRedisSerializer(Object.class);
  47. ObjectMapper mapper=new ObjectMapper();
  48. mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
  49. mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
  50. jackson2JsonRedisSerializer.setObjectMapper(mapper);
  51. // 设置value的序列化规则和 key的序列化规则
  52. template.setValueSerializer(jackson2JsonRedisSerializer);
  53. template.setKeySerializer(new StringRedisSerializer());
  54. template.setHashKeySerializer(new StringRedisSerializer());
  55. template.afterPropertiesSet();
  56. return template;
  57. }
  58. /** * Redis消息监听器容器 * 这个容器加载了RedisConnectionFactory和消息监听器 * 可以添加多个监听不同话题的redis监听器,只需要把消息监听器和相应的消息订阅处理器绑定,该消息监听器 * 通过反射技术调用消息订阅处理器的相关方法进行一些业务处理 * @param redisConnectionFactory 链接工厂 * @param adapter 适配器 * @return redis消息监听容器 */
  59. @Bean
  60. public RedisMessageListenerContainer container(RedisConnectionFactory redisConnectionFactory,
  61. MessageListenerAdapter adapter) {
  62. RedisMessageListenerContainer container = new RedisMessageListenerContainer();
  63. container.setConnectionFactory(redisConnectionFactory);
  64. //可以添加多个 messageListener
  65. container.addMessageListener(adapter, new PatternTopic(MessageConstant.AUDIT_LOG_CHANNEL));
  66. return container;
  67. }
  68. /** * 消息监听器适配器,绑定消息处理器,利用反射技术调用消息处理器的业务方法 * 将MessageReceiver注册为一个消息监听器,可以自定义消息接收的方法(handleMessage) * 如果不指定消息接收的方法,消息监听器会默认的寻找MessageReceiver中的onMessage这个方法作为消息接收的方法 * @param messageReceiver 消息接受 * @return 适配器 */
  69. @Bean
  70. public MessageListenerAdapter adapter(MessageReceiverSupport messageReceiver) {
  71. return new MessageListenerAdapter(messageReceiver, "onMessage");
  72. }
  73. }

发表评论

表情:
评论列表 (有 0 条评论,22人围观)

还没有评论,来说两句吧...

相关阅读

    相关 springboot2.X整合redis

    趁着今天休息就学习了一下redis,刚开始配置的时候遇到一些坑,现在写下来记一下,首先springboot使用的版本是2.X(我使用的是2.1.6)我的是在本地配置的,环境是w