中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot2.4.2下怎么使用Redis配置Lettuce

發布時間:2022-01-13 16:48:43 來源:億速云 閱讀:197 作者:iii 欄目:開發技術

這篇文章主要講解了“SpringBoot2.4.2下怎么使用Redis配置Lettuce”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“SpringBoot2.4.2下怎么使用Redis配置Lettuce”吧!

    1. Springboot2.4.2下對Redis的基礎集成

    1.1 maven添加依賴

     <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
                 <version>2.4.2</version>
            </dependency>

    注:Springboot2.4.2下默認使用的就是Lettuce而不是Jedis因此無需在依賴進行排除Jedis

    1.2 添加Redis配置文件

    首先Redis需要準備一個配置文件,本文設定一個單獨的文件redis.properties 放在resource文件夾下

    redis.properties

    hostName = localhost
      port = 6379
      password = password
      pool.maxIdle = 10000
      pool.minIdle = 1000
      pool.maxWaitMillis = 5000
      pool.maxTotal = 2
      database = 10

    1.3 注冊RedisTemplate和StringRedisTemplate的Bean

    LettuceRedisConfig.java

    package com.xxx.demo.redis;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.PropertySource;
    import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
    import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
    import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.core.StringRedisTemplate;
    import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    import java.io.Serializable;
    import java.time.Duration;
    /**
     * @author linkanyway
     * @version 1.0
     * @name LettuceRedisConfig
     * @description TODO
     * @date 2022/01/11 22:44
     */
    @Configuration
    @PropertySource("classpath:redis.properties")
    public class LettuceRedisConfig {
        @Value("${hostName}")
        private String hostName;
        @Value("${password}")
        private String password;
        @Value("${port}")
        private int port;
        @Value("${database}")
        private int database;
        @Value("${pool.maxIdle}")
        private int maxIdle;
        @Value("${pool.minIdle}")
        private int minIdle;
        @Value("${pool.maxWaitMillis}")
        private int maxWaitMillis;
        @Value("${pool.maxTotal}")
        private int maxTotal;
        /**
         * LettuceConnectionFactory
         *
         * @return
         */
        @Bean
        public LettuceConnectionFactory redisConnectionFactory() {
            RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration ();
            redisStandaloneConfiguration.setHostName (hostName);
            redisStandaloneConfiguration.setPort (port);
            redisStandaloneConfiguration.setPassword (password);
            redisStandaloneConfiguration.setDatabase (database);
            GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig ();
            poolConfig.setMaxIdle (maxIdle);
            poolConfig.setMinIdle (minIdle);
            poolConfig.setMaxWaitMillis (maxWaitMillis);
            poolConfig.setMaxTotal (maxTotal);
            LettucePoolingClientConfiguration lettucePoolingClientConfiguration =
                    LettucePoolingClientConfiguration.builder ().commandTimeout (Duration.ofSeconds (10)).shutdownTimeout (Duration.ZERO).poolConfig (poolConfig).build ();
            LettuceConnectionFactory lettuceConnectionFactory =
                    new LettuceConnectionFactory (redisStandaloneConfiguration, lettucePoolingClientConfiguration);
            lettuceConnectionFactory.setShareNativeConnection (false);
            return lettuceConnectionFactory;
        }
        /**
         * RedisTemplate
         *
         * @param connectionFactory
         * @return
         */
        @Bean
        public RedisTemplate<String, Serializable> redisTemplate(LettuceConnectionFactory connectionFactory) {
            RedisTemplate<String, Serializable> redisTemplate = new RedisTemplate<> ();
            redisTemplate.setKeySerializer (new StringRedisSerializer ());
            redisTemplate.setValueSerializer (new GenericJackson2JsonRedisSerializer ());
            redisTemplate.setConnectionFactory (connectionFactory);
            return redisTemplate;
        }
        /**
         * @param factory
         * @return
         */
        @Bean
        public StringRedisTemplate configStringRedisTemplate(@Autowired LettuceConnectionFactory factory) {
            StringRedisTemplate template = new StringRedisTemplate (factory);
            template.setEnableTransactionSupport (true);
            ObjectMapper mapper;
            GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer ();
            template.setValueSerializer (new StringRedisSerializer ());
            template.setKeySerializer (new StringRedisSerializer ());
            template.setHashKeySerializer (new StringRedisSerializer ());
            template.setHashValueSerializer (new StringRedisSerializer ());
            template.afterPropertiesSet ();
            return template;
        }
    }

    1.4 編寫一個控制器示例進行redis操作

    package com.xx.demo.controller;
    import com.xxx.demo.redis.MessagePublisher;
    import org.springframework.data.redis.core.StringRedisTemplate;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    /**
     * @author linkanyway
     * @version 1.0
     * @name RedisController
     * @description TODO
     * @date 2022/01/11 22:37
     */
    @RestController
    @RequestMapping("redis")
    public class RedisController {
        final
        StringRedisTemplate redisTemplate;
        public RedisController(StringRedisTemplate redisTemplate) {
            this.redisTemplate = redisTemplate;
       
        }
        @GetMapping("add")
        public String add() {
            redisTemplate.opsForValue ().set ("a", "1");
            return "hi";
        }
    }

    2. 使用redis進行發布訂閱

    2.1 添加一個發布者的接口

    package com.xxx.demo.redis;
    
    /**
     * @author linkanyway
     * @version 1.0
     * @name MessagePublisher
     * @description TODO
     * @date 2022/01/11 23:45
     */
    public interface MessagePublisher {
        void publish(final String message);
    }

    2.2 添加一個發布者的實現類

    RedisMessagePublisher.java

    package com.xxx.demo.redis;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.listener.ChannelTopic;
    import java.io.Serializable;
    /**
     * @author linkanyway
     * @version 1.0
     * @name RedisMessagePublisher
     * @description TODO
     * @date 2022/01/11 23:46
     */
    public class RedisMessagePublisher implements MessagePublisher {
        @Autowired
        private RedisTemplate<String, Serializable> redisTemplate;
        @Autowired
        private ChannelTopic topic;
        public RedisMessagePublisher() {
        }
        public RedisMessagePublisher(final RedisTemplate<String, Serializable> redisTemplate, final ChannelTopic topic) {
            this.redisTemplate = redisTemplate;
            this.topic = topic;
        }
        @Override
        public void publish(final String message) {
            redisTemplate.convertAndSend (topic.getTopic (), message);
        }
    }

    2.3 添加一個消息監聽bean

    RedisMessageSubscriber.java

    package com.xxx.demo.redis;
    import org.springframework.data.redis.connection.Message;
    import org.springframework.data.redis.connection.MessageListener;
    import org.springframework.scheduling.annotation.Async;
    /**
     * @author linkanyway
     * @version 1.0
     * @name RedisMessageSubscriber
     * @description TODO
     * @date 2022/01/11 23:47
     */
    public class RedisMessageSubscriber implements MessageListener {
        @Override
        @Async
        public void onMessage(Message message, byte[] pattern) {
            System.out.println ("Message received: " + new String (message.getBody ()));
        }
    }

    2.4 添加bean注冊

    RedisMessageConfig.java

    package com.xxx.demo.redis;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.listener.ChannelTopic;
    import org.springframework.data.redis.listener.RedisMessageListenerContainer;
    import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
    import java.io.Serializable;
    /**
     * @author linkanyway
     * @version 1.0
     * @name RedisMessageConfig
     * @description TODO
     * @date 2022/01/11 23:44
     */
    @Configuration
    public class RedisMessageConfig {
        @Bean
        MessageListenerAdapter messageListener() {
            return new MessageListenerAdapter (new RedisMessageSubscriber ());
        }
        @Bean
        RedisMessageListenerContainer redisContainer(LettuceConnectionFactory factory) {
            final RedisMessageListenerContainer container = new RedisMessageListenerContainer ();
            container.setConnectionFactory (factory);
            container.addMessageListener (messageListener (), topic ());
            return container;
        }
        @Bean
        MessagePublisher redisPublisher(@Autowired RedisTemplate<String, Serializable> redisTemplate) {
            return new RedisMessagePublisher (redisTemplate, topic ());
        }
        @Bean
        ChannelTopic topic() {
            return new ChannelTopic ("pubsub:queue");
        }
    }

    2.5 改寫之前的控制器如下

    package com.xxx.demo.controller;
    import com.kreakin.demo.redis.MessagePublisher;
    import org.springframework.data.redis.core.StringRedisTemplate;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    /**
     * @author linkanyway
     * @version 1.0
     * @name RedisController
     * @description TODO
     * @date 2022/01/11 22:37
     */
    @RestController
    @RequestMapping("redis")
    public class RedisController {
        final
        StringRedisTemplate redisTemplate;
        final
        MessagePublisher publisher;
        public RedisController(StringRedisTemplate redisTemplate, MessagePublisher publisher) {
            this.redisTemplate = redisTemplate;
            this.publisher = publisher;
        }
        @GetMapping("hi")
        public String hi() {
            redisTemplate.opsForValue ().set ("a", "1");
            return "hi";
        }
        @GetMapping("pub")
        public String pub() {
            publisher.publish ("sdfsf");
            return "ok";
        }
    }

    3. 監聽key的過期事件

    RedisKeyExpireSubscriber.java

    package com.xxx.demo.redis;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.data.redis.connection.Message;
    import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
    import org.springframework.data.redis.listener.RedisMessageListenerContainer;
    import org.springframework.stereotype.Component;
    /**
     * @author linkanyway
     * @version 1.0
     * @name RedisKeyExpireSubscriber
     * @description TODO
     * @date 2022/01/12 00:00
     */
    @Slf4j
    @Component
    public class RedisKeyExpireSubscriber extends KeyExpirationEventMessageListener {
        /**
         * Creates new {@link } for {@code __keyevent@*__:expired} messages.
         *
         * @param listenerContainer must not be {@literal null}.
         */
        public RedisKeyExpireSubscriber(RedisMessageListenerContainer listenerContainer) {
            super (listenerContainer);
        }
        @Override
        public void onMessage(Message message, byte[] pattern) {
            log.error (message.toString ());
        }
    }

    注意: Redis需要開啟事件

    感謝各位的閱讀,以上就是“SpringBoot2.4.2下怎么使用Redis配置Lettuce”的內容了,經過本文的學習后,相信大家對SpringBoot2.4.2下怎么使用Redis配置Lettuce這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    大城县| 津南区| 灵川县| 海南省| 海阳市| 湖州市| 伊吾县| 谢通门县| 万载县| 广灵县| 永城市| 白玉县| 繁峙县| 富阳市| 宁远县| 仁化县| 九寨沟县| 华阴市| 桑日县| 北川| 综艺| 吐鲁番市| 中卫市| 南漳县| 宜章县| 余姚市| 万全县| 洱源县| 安溪县| 河间市| 墨脱县| 福鼎市| 平昌县| 新干县| 资中县| 北辰区| 江西省| 那坡县| 于田县| 肥西县| 新兴县|