最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot2.4.2下使用Redis配置Lettuce的示例

 更新時間:2022年01月13日 15:42:06   作者:linkanyway  
這篇文章主要介紹了SpringBoot2.4.2下使用Redis配置Lettuce,Springboot2.4.2下默認(rèn)使用的就是Lettuce而不是Jedis因此無需在依賴進行排除Jedis,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

1. Springboot2.4.2下對Redis的基礎(chǔ)集成

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下默認(rèn)使用的就是Lettuce而不是Jedis因此無需在依賴進行排除Jedis

1.2 添加Redis配置文件

首先Redis需要準(zhǔn)備一個配置文件,本文設(shè)定一個單獨的文件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進行發(fā)布訂閱

2.1 添加一個發(fā)布者的接口

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 添加一個發(fā)布者的實現(xiàn)類

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 添加一個消息監(jiān)聽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. 監(jiān)聽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需要開啟事件

到此這篇關(guān)于SpringBoot2.4.2下使用Redis配置Lettuce的文章就介紹到這了,更多相關(guān)SpringBoot配置Lettuce內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring boot實現(xiàn)過濾器和攔截器demo

    spring boot實現(xiàn)過濾器和攔截器demo

    本篇文章主要介紹了spring boot實現(xiàn)過濾器和攔截器demo ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Java IO和NIO的基本概念和API詳解

    Java IO和NIO的基本概念和API詳解

    JavaIO是基于流的阻塞式I/O,適用于低并發(fā)場景;JavaNIO是基于通道和緩沖區(qū)的非阻塞式I/O,適用于高并發(fā)場景
    2025-03-03
  • idea創(chuàng)建Springboot多模塊項目(聚合項目)

    idea創(chuàng)建Springboot多模塊項目(聚合項目)

    文章詳細(xì)介紹了如何在idea創(chuàng)建Springboot多模塊項目(聚合項目),包括創(chuàng)建父工程和子工程、編輯pom.xml文件、編寫代碼和測試,還介紹了如何處理Maven視圖中的層級關(guān)系,并展示了如何同時啟動多個子項目
    2024-11-11
  • 使用Maven將springboot工程打包成docker鏡像

    使用Maven將springboot工程打包成docker鏡像

    這篇文章主要介紹了使用Maven將springboot工程打包成docker鏡像,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java項目依賴包選擇具體實現(xiàn)類示例介紹

    java項目依賴包選擇具體實現(xiàn)類示例介紹

    這篇文章主要為大家介紹了java項目依賴包選擇具體實現(xiàn)類示例介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • 淺談spring-boot-rabbitmq動態(tài)管理的方法

    淺談spring-boot-rabbitmq動態(tài)管理的方法

    這篇文章主要介紹了淺談spring-boot-rabbitmq動態(tài)管理的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • 詳解Java創(chuàng)建線程的五種常見方式

    詳解Java創(chuàng)建線程的五種常見方式

    Java中如何進行多線程編程,如何使用多線程?不要擔(dān)心,本文將為你詳細(xì)介紹一下Java實現(xiàn)線程創(chuàng)建的五種常見方式,感興趣的可以跟隨小編學(xué)習(xí)一下
    2022-01-01
  • Spring Boot Redis客戶端遠(yuǎn)程操作實現(xiàn)過程解析

    Spring Boot Redis客戶端遠(yuǎn)程操作實現(xiàn)過程解析

    這篇文章主要介紹了Spring Boot Redis客戶端遠(yuǎn)程操作實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Springboot之如何統(tǒng)計代碼執(zhí)行耗時時間

    Springboot之如何統(tǒng)計代碼執(zhí)行耗時時間

    這篇文章主要介紹了Springboot之如何統(tǒng)計代碼執(zhí)行耗時時間問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • IDEA中的clean,清除項目緩存圖文教程

    IDEA中的clean,清除項目緩存圖文教程

    這篇文章主要介紹了IDEA中的clean,清除項目緩存圖文教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評論

城固县| 达州市| 兰考县| 上犹县| 宜川县| 来凤县| 临夏县| 阜阳市| 贵阳市| 财经| 武城县| 衡东县| 廊坊市| 高密市| 古蔺县| 清苑县| 景宁| 宁乡县| 南澳县| 宁南县| 依兰县| 张家口市| 马鞍山市| 遂川县| 莆田市| 同心县| 桐梓县| 奉新县| 锡林郭勒盟| 肇东市| 册亨县| 临邑县| 霸州市| 平邑县| 班戈县| 清丰县| 苏尼特左旗| 梁河县| 枣庄市| 温泉县| 鞍山市|