博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Springboot21 整合redis、利用redis实现消息队列
阅读量:4924 次
发布时间:2019-06-11

本文共 7227 字,大约阅读时间需要 24 分钟。

 

1 前提准备

  1.1 创建一个springboot项目

    技巧01:本博文基于springboot2.0创建

  1.2 安装redis

    1.2.1 linux版本

      

    1.2.2 windows版本

      到redis官网下载windows版本的后,解压即可

  1.3 redis使用

    本博文以window版本为例子,

    1.3.1 开启服务端

      》进入到解压后的redis根目录

        》执行 redis-server.exe

    1.3.2 开启客户端

      进入到redis解压目录 -> 执行 redis-cli.exe

    1.3.3 测试redis服务端和客户端的通信

       在redis客户端执行 ping,如果返回了 PONG 就表明redis前后端通信正常

    1.3.4 关闭

      客户端和服务端都用 Ctrl + C 就可以关闭了

 

2 SpringBoot 集成 Redis

  2.1 创建一个SpringBoot项目

    技巧01:创建时引入 spring-boot-starter-web 和 spring-boot-starter-data-redis

4.0.0
cn.xiangxu
redis_pub_sub
0.0.1-SNAPSHOT
jar
redis_pub_sub
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
2.0.3.RELEASE
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-starter-data-redis
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-devtools
true
org.projectlombok
lombok
1.18.0
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
true
pom.xml

  2.2 配置redis服务器

    技巧01:springboot的启动包已经给我们配置好了redis相关的配置类,所以我们只需要在配置文件中对redis服务器进行相关的配置即可

  2.3 使用redis服务器

    坑01:外部的redis客户端在连接redis服务器时需要关闭redis服务器的守护进程,否则会出现连接失败;修改redis.conf配置文件即可,windows版本的redis配置文件在根目录下的 redis.windows.conf 中;将配置文件中protected-mode 配置值从 yes 改为 no 即可。

    技巧01:因为springboot已经为我们配置好了一切,所以我们直接调用  RedisTemplate 或者 StringRedisTemplate 的相关API就可以对redis服务器进行相关的操作了

    》依赖注入 RedisTemplate 或者 StringRedisTemplate 

    》利用依赖注入的  RedisTemplate 或者 StringRedisTemplate  对象进行操作即可

package cn.xiangxu.redis_pub_sub.web;import lombok.extern.slf4j.Slf4j;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.test.context.junit4.SpringRunner;import static org.junit.Assert.*;@RunWith(SpringRunner.class)@SpringBootTest@Slf4jpublic class TestControllerTest {    /**     * 依赖注入RedisTemplate,直接利用RedisTemplate操作redis即可     */    @Autowired    private RedisTemplate
redisTemplate; @Test public void test01(){ log.info("Hello Boy"); // 设置数据 redisTemplate.opsForValue().set("age", "33"); // 获取数据 String result = redisTemplate.opsForValue().get("name"); System.out.println(result.toString());// System.out.println(redisTemplate.getClientList());; }}
View Code

 

3 SpringBoot 利用 Redis 实现队列的效果

  3.1 流程介绍

    

  3.2 源代码

package cn.xiangxu.redis_pub_sub.domain;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import java.util.concurrent.CountDownLatch;/** * @author 王杨帅 * @create 2018-07-09 16:13 * @desc **/@Slf4jpublic class Receiver {    private CountDownLatch latch;    @Autowired    public Receiver(CountDownLatch latch) {        this.latch = latch;    }    public void receiveMessage(String message) {        log.info("Received <" + message + ">");        latch.countDown();    }}
View Code

 

package cn.xiangxu.redis_pub_sub;import cn.xiangxu.redis_pub_sub.domain.Receiver;import lombok.extern.slf4j.Slf4j;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.Bean;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.data.redis.listener.PatternTopic;import org.springframework.data.redis.listener.RedisMessageListenerContainer;import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;import java.util.concurrent.CountDownLatch;@SpringBootApplication@Slf4jpublic class RedisPubSubApplication {    /*     * Redis消息监听器容器     * 这个容器加载了RedisConnectionFactory和消息监听器     */    @Bean    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,                                            MessageListenerAdapter listenerAdapter){        RedisMessageListenerContainer container = new RedisMessageListenerContainer();        container.setConnectionFactory(connectionFactory);        container.addMessageListener(listenerAdapter, new PatternTopic("sprinboot-redis-messaage"));        return container;    }    /*     * 将Receiver注册为一个消息监听器,并指定消息接收的方法(receiveMessage)     * 如果不指定消息接收的方法,消息监听器会默认的寻找Receiver中的handleMessage这个方法作为消息接收的方法     */    @Bean    MessageListenerAdapter listenerAdapter(Receiver receiver){        return new MessageListenerAdapter(receiver, "receiveMessage");    }    /*     * Receiver实例     */    @Bean    Receiver receiver(CountDownLatch latch){        return new Receiver(latch);    }    @Bean    CountDownLatch latch(){        return new CountDownLatch(1);    }    /*     * Redis Template 用来发送消息     */    @Bean    StringRedisTemplate template(RedisConnectionFactory connectionFactory){        return new StringRedisTemplate(connectionFactory);    }    public static void main(String[] args) {        ApplicationContext ctx = SpringApplication.run(RedisPubSubApplication.class, args);        StringRedisTemplate template = ctx.getBean(StringRedisTemplate.class);//      CountDownLatch latch = ctx.getBean(CountDownLatch.class);        log.info("Sending message......");        template.convertAndSend("sprinboot-redis-messaage", "Hello, SpringBoot redis message!!!!");//      latch.wait();//        System.exit(0);    }}
View Code

  3.3 效果测试

    3.3.1 利用redis服务器中的客户端测试发布订阅效果

    3.3.2 启动springBoot项目

      在redis服务器中发布的消息会自动打印到控制台上

 

      

 

      

 

 

 

 

      

转载于:https://www.cnblogs.com/NeverCtrl-C/p/9285774.html

你可能感兴趣的文章
Python数据分析_Pandas01_数据框的创建和选取
查看>>
RESTful-rest_framework应用第一篇
查看>>
Console命令详解,让调试js代码变得更简单
查看>>
hdu4908 &amp; BestCoder Round #3 BestCoder Sequence(组合数学)
查看>>
Excel 导出
查看>>
拉登是我罩的队_第三周_需求改进&原型设计
查看>>
数据库got error 28 from storage engine问题
查看>>
RMQ 总结
查看>>
手撸ORM
查看>>
POJ---2406 Power Strings[求最长重复字串]
查看>>
005-(已测试成功的方案)kickstart模式实现批量安装centos7.x系统
查看>>
linux搭建haproxy
查看>>
Oracle update 日期
查看>>
【t088】倒水
查看>>
【t016】邮递员
查看>>
boost安装
查看>>
Vue与React的异同
查看>>
360:跳高游戏
查看>>
CSS3 Background-size
查看>>
Python Ethical Hacking - MAC Address & How to Change(3)
查看>>