国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Redis實(shí)現(xiàn)消息的發(fā)布和訂閱

這篇具有很好參考價(jià)值的文章主要介紹了Redis實(shí)現(xiàn)消息的發(fā)布和訂閱。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Redis實(shí)現(xiàn)消息的發(fā)布和訂閱

1、在springboot項(xiàng)目的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.5</version>
        <relativePath/>
    </parent>

    <groupId>com.example</groupId>
    <artifactId>spring-boot-redis-message</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot-redis-message</name>
    <description>spring-boot-redis-message</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2、在application.properties中配置redis參數(shù)

# Redis數(shù)據(jù)庫(kù)索引(默認(rèn)為0)
spring.redis.database=0
# Redis服務(wù)器地址
spring.redis.host=127.0.0.1
# Redis服務(wù)器連接端口
spring.redis.port=6379
# Redis服務(wù)器連接密碼(默認(rèn)為空)
spring.redis.password=
# 連接池最大連接數(shù)(使用負(fù)值表示沒(méi)有限制)
spring.redis.jedis.pool.max-active=10
# 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒(méi)有限制)
spring.redis.jedis.pool.max-wait=-1ms
# 連接池中的最大空閑連接
spring.redis.jedis.pool.max-idle=10
# 連接池中的最小空閑連接
spring.redis.jedis.pool.min-idle=0
# 連接超時(shí)時(shí)間(毫秒)
spring.redis.timeout=1000ms

3、redis的配置類(lèi)

package com.example.springbootredismessage.config;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.net.UnknownHostException;

/**
 * @author zhangshixing
 * @date 2021年11月06日 9:44
 * redis 配置類(lèi)
 */
@Configuration
public class RedisConfig {

    @Bean
    @ConditionalOnMissingBean(name = "redisTemplate")
    public RedisTemplate<String, Object> redisTemplate(
            RedisConnectionFactory redisConnectionFactory)
            throws UnknownHostException {
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        template.setConnectionFactory(redisConnectionFactory);
        StringRedisSerializer stringSerial = new StringRedisSerializer();
        // redis key 序列化方式使用stringSerial
        template.setKeySerializer(stringSerial);
        // redis value 序列化方式使用jackson
        template.setValueSerializer(jackson2JsonRedisSerializer);
        // redis hash key 序列化方式使用stringSerial
        template.setHashKeySerializer(stringSerial);
        // redis hash value 序列化方式使用jackson
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }
}

4、redis消息發(fā)布和監(jiān)聽(tīng)

4.1 發(fā)送消息

package com.example.springbootredismessage.controller;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * @author zhangshixing
 * @date 2021年11月07日 11:18
 */
@RestController
@RequestMapping(value = "rest/redis")
public class RedisSendMessageController {

    @Resource
    private RedisTemplate redisTemplate;

    @RequestMapping(value = "send/message", method = RequestMethod.GET)
    public void testPush(@RequestParam("body") String body) {
        /**
         * 使用redisTemplate的convertAndSend()函數(shù),
         * String channel, Object message
         * channel代表管道,
         * message代表發(fā)送的信息
         */
        redisTemplate.convertAndSend("test_topic", body);
        System.out.println("發(fā)送消息成功,channel:test_topic , messgae:" + body);
    }
}

4.2 接收消息

package com.example.springbootredismessage.config;

import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.stereotype.Component;

import java.io.UnsupportedEncodingException;

/**
 * @author zhangshixing
 * @date 2021年11月07日 11:22
 * redis訂閱方:接收消息
 * 為了接收 Redis 渠道發(fā)送過(guò)來(lái)的消息,我們先定義一個(gè)消息監(jiān)聽(tīng)器( MessageListener )
 */
@Component
public class MyRedisSubscribeListener implements MessageListener {
    /**
     * 這里的 onMessage 方法是得到消息后的處理方法, 其中 message 參數(shù)代表 Redis 發(fā)送過(guò)來(lái)的消息,
     * pattern是渠道名稱(chēng),onMessage方法里打印了它們的內(nèi)容。這里因?yàn)闃?biāo)注了@Component注解,所以
     * 在Spring Boot掃描后,會(huì)把它自動(dòng)裝配到IoC容器中 ,監(jiān)聽(tīng)著對(duì)象RedisMessageListener會(huì)自動(dòng)
     * 將消息進(jìn)行轉(zhuǎn)換。
     *
     * @param message
     * @param bytes
     */
    @Override
    public void onMessage(Message message, byte[] bytes) {
        System.out.println("接收消息!");
        //消息體
        String body = null;
        try {
            //解決string亂碼
            body = new String(message.getBody(), "utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        //渠道名稱(chēng)
        String topic = new String(bytes);
        System.out.println("消息體:" + body);
        System.out.println("渠道名稱(chēng):" + topic);
    }
}

5、啟動(dòng)類(lèi)

package com.example.springbootredismessage;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootRedisMessageApplication {

	public static void main(String[] args) {

		SpringApplication.run(SpringBootRedisMessageApplication.class, args);
	}

}

6、測(cè)試

http://localhost:8080/rest/redis/send/message?body=helloworld

文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-649185.html

到了這里,關(guān)于Redis實(shí)現(xiàn)消息的發(fā)布和訂閱的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Redis 消息隊(duì)列和發(fā)布訂閱

    Redis 消息隊(duì)列和發(fā)布訂閱

    采用redis 三種方案: ● 生產(chǎn)者消費(fèi)者:一個(gè)消息只能有一個(gè)消費(fèi)者 ● 發(fā)布者訂閱者:一個(gè)消息可以被多個(gè)消費(fèi)者收到 ● stream模式:實(shí)現(xiàn)隊(duì)列和廣播模式 Producer調(diào)用redis的lpush往特定key里放消息,Consumer調(diào)用brpop去不斷監(jiān)聽(tīng)key。 1、利用redis的鏈表,存儲(chǔ)數(shù)據(jù),實(shí)現(xiàn)隊(duì)列模式

    2024年01月18日
    瀏覽(22)
  • Redis消息傳遞:發(fā)布訂閱模式詳解

    Redis消息傳遞:發(fā)布訂閱模式詳解

    目錄 1.Redis發(fā)布訂閱簡(jiǎn)介 2.發(fā)布/訂閱使用 ? ?2.1?基于頻道(Channel)的發(fā)布/訂閱 ? ?2.2?基于模式(pattern)的發(fā)布/訂閱 3.深入理解Redis的訂閱發(fā)布機(jī)制 ? ?3.1?基于頻道(Channel)的發(fā)布/訂閱如何實(shí)現(xiàn)的? ? ?3.2?基于模式(Pattern)的發(fā)布/訂閱如何實(shí)現(xiàn)的? ? ?3.3?SpringBoot結(jié)合Redis發(fā)布

    2024年02月12日
    瀏覽(19)
  • Spring Boot 整合Redis實(shí)現(xiàn)消息隊(duì)列

    ??本篇文章主要來(lái)講Spring Boot 整合Redis實(shí)現(xiàn)消息隊(duì)列,實(shí)現(xiàn)redis用作消息隊(duì)列有多種方式,比如: 基于 List 的 rpush+lpop 或 lpush+rpop 基于 List 的 rpush+blpop 或 lpush+brpop (阻塞式獲取消息) 基于 Sorted Set 的優(yōu)先級(jí)隊(duì)列 Redis Stream (Redis5.0版本開(kāi)始) Pub/Sub 機(jī)制 ??不過(guò)這里講的是

    2024年02月13日
    瀏覽(34)
  • 【PHP面試題80】Redis消息發(fā)布與訂閱功能怎么用的?

    【PHP面試題80】Redis消息發(fā)布與訂閱功能怎么用的?

    本文已收錄于PHP全棧系列專(zhuān)欄:PHP面試專(zhuān)區(qū)。做全網(wǎng)最全最有營(yíng)養(yǎng)的PHP面試大全。 計(jì)劃將全覆蓋PHP開(kāi)發(fā)領(lǐng)域所有的面試題, 對(duì)標(biāo)資深工程師/架構(gòu)師序列 ,歡迎大家提前關(guān)注鎖定。 Redis消息發(fā)布與訂閱是Redis提供的一種消息傳遞機(jī)制,它允許一個(gè)或多個(gè)生產(chǎn)者通過(guò)發(fā)布消息的

    2024年02月16日
    瀏覽(19)
  • Redis(發(fā)布訂閱、事務(wù)、redis整合springboot、集成 Spring Cache)

    Redis(發(fā)布訂閱、事務(wù)、redis整合springboot、集成 Spring Cache)

    目錄 一.redis的發(fā)布訂閱 1、什么 是發(fā)布和訂閱 2、Redis的發(fā)布和訂閱 3、發(fā)布訂閱的代碼實(shí)現(xiàn) 二.Redis事務(wù) 1.事務(wù)簡(jiǎn)介 1、在事務(wù)執(zhí)行之前 如果監(jiān)聽(tīng)的key的值有變化就不能執(zhí)行 2、在事務(wù)執(zhí)行之前 如果監(jiān)聽(tīng)的key的值沒(méi)有變化就能執(zhí)行 3、Exec之前就出現(xiàn)錯(cuò)誤 4、Exec之后出現(xiàn)的錯(cuò)誤

    2024年01月24日
    瀏覽(18)
  • JAVA 實(shí)現(xiàn) Redis 發(fā)布訂閱

    JAVA 實(shí)現(xiàn) Redis 發(fā)布訂閱

    發(fā)布訂閱: 消息發(fā)布者發(fā)布消息 和 消息訂閱者接收消息 ,兩者之間通過(guò)某種媒介聯(lián)系起來(lái) 例如訂雜志,當(dāng)自己訂閱了愛(ài)格雜志,每個(gè)月會(huì)發(fā)刊一本。到發(fā)布的時(shí)候派送員將雜志送到自己手上就能看到雜志內(nèi)容。只有我們訂閱了該雜志才會(huì)派送給我們 Redis 發(fā)布訂閱(pub/su

    2024年02月14日
    瀏覽(19)
  • 【Spring Boot】集成Kafka實(shí)現(xiàn)消息發(fā)送和訂閱

    【Spring Boot】集成Kafka實(shí)現(xiàn)消息發(fā)送和訂閱

    最近忙著搞低代碼開(kāi)發(fā),好久沒(méi)新建spring項(xiàng)目了,結(jié)果今天心血來(lái)潮準(zhǔn)備建個(gè)springboot項(xiàng)目 注意Type選Maven,java選8,其他默認(rèn) 點(diǎn)下一步后完成就新建了一個(gè)spring boot項(xiàng)目,配置下Maven環(huán)境,主要是settings.xml文件,里面要包含阿里云倉(cāng)庫(kù),不然可能依賴(lài)下載不下來(lái) 在maven配置沒(méi)問(wèn)

    2024年02月09日
    瀏覽(32)
  • 使用Spring Boot和Kafka實(shí)現(xiàn)消息訂閱和發(fā)送

    使用Spring Boot和Kafka實(shí)現(xiàn)消息訂閱和發(fā)送

    最近忙著搞低代碼開(kāi)發(fā),好久沒(méi)新建spring項(xiàng)目了,結(jié)果今天心血來(lái)潮準(zhǔn)備建個(gè)springboot項(xiàng)目 注意Type選Maven,java選8,其他默認(rèn) 點(diǎn)下一步后完成就新建了一個(gè)spring boot項(xiàng)目,配置下Maven環(huán)境,主要是settings.xml文件,里面要包含阿里云倉(cāng)庫(kù),不然可能依賴(lài)下載不下來(lái) 在maven配置沒(méi)問(wèn)

    2024年02月11日
    瀏覽(25)
  • 使用Spring Boot和Kafka實(shí)現(xiàn)消息發(fā)送和訂閱

    使用Spring Boot和Kafka實(shí)現(xiàn)消息發(fā)送和訂閱

    最近忙著搞低代碼開(kāi)發(fā),好久沒(méi)新建spring項(xiàng)目了,結(jié)果今天心血來(lái)潮準(zhǔn)備建個(gè)springboot項(xiàng)目 注意Type選Maven,java選8,其他默認(rèn) 點(diǎn)下一步后完成就新建了一個(gè)spring boot項(xiàng)目,配置下Maven環(huán)境,主要是settings.xml文件,里面要包含阿里云倉(cāng)庫(kù),不然可能依賴(lài)下載不下來(lái) 在maven配置沒(méi)問(wèn)

    2024年02月11日
    瀏覽(32)
  • Redis的內(nèi)存淘汰策略有哪些?Redis的發(fā)布訂閱功能是如何實(shí)現(xiàn)的?如何監(jiān)控Redis的性能?Redis的并發(fā)競(jìng)爭(zhēng)問(wèn)題如何解決?

    Redis的內(nèi)存淘汰策略有以下幾種: noeviction :不進(jìn)行任何內(nèi)存淘汰,當(dāng)內(nèi)存用完時(shí),新的寫(xiě)操作將會(huì)返回錯(cuò)誤。 volatile-lru :在所有已設(shè)置過(guò)期時(shí)間的鍵中,使用近似LRU算法刪除最長(zhǎng)時(shí)間未使用的鍵,直到騰出足夠的內(nèi)存空間為止。 volatile-ttl :在所有已設(shè)置過(guò)期時(shí)間的鍵中,

    2024年02月12日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包