springboot整合redis实现消息队列

java中直接使用redis的时候,直接使用简单的两个指令lpushrpop或者rpushlpop就可以实现消息队列的操作。当与spring结合时,可以使用RedisTemplate和StringRedisTemplate;这两个Template是spring封装了对Redis的一些常用的操作,来实现消息队列,这两个区别于序列类。

当redis数据库里面本来存的是字符串数据或者你要存取的数据就是字符串类型数据的时候,那么你就使用StringRedisTemplate即可,如果数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取出一个对象,那么使用RedisTemplate是更好的选择。
 

此处使用StringRedisTemplate实现消息队列。

1.添加maven引用:


	org.springframework.boot
	spring-boot-starter-redis

2.配置redis

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.concurrent.TimeUnit;

/**
 * Created by XiChuan on 2018-11-27.
 */
@Component
public class RedisMq {

    private static String key = "redis-test";

    @Autowired
    RedisConnectionFactory mConnectionFactory;

    private StringRedisTemplate redisTemplate;

    /**
     * 初始化redis
     */
    @PostConstruct
    public void postInit() {
        redisTemplate = new StringRedisTemplate(mConnectionFactory);
    }


    /**
     * 发送消息
     * @param message
     */
    public void push(String message){
        redisTemplate.opsForList().leftPush(key,message);
    }

    /**
     * 获取消息,可以对消息进行监听,没有超过监听事件,则返回消息为null
     * rightPop:1.key,2.超时时间,3.超时时间类型
     * @return
     */
    public String pop(){
        return redisTemplate.opsForList().rightPop(key,60, TimeUnit.SECONDS);
    }
}

3.对redis队列进行push与pop操作

@RestController
@RequestMapping("/redis/test")
public class TestRedisController {

    @Autowired
    RedisMq redisMq;
    
    //在redis中存储消息
    @GetMapping("/push")
    public Object pushMsg(@RequestParam("msg")String msg){
        redisMq.push(msg);
        return Response.SUCCESS;
    }
    
    //从redis中获取消息
    @GetMapping("/pop")
    public Object popMsg(){
        return redisMq.pop();
    }

}

Redis的简单操作非常简单,只用调用StringRedisTemplate的两个接口就可以实现,如果实现在再次封装以及结合netty实现socket通信,就比较复杂,并且需要有好的设计思路才能实现。

 

这只使用了Redis的List类型数据,Hash、Set、Value等其他可参考:

https://blog.csdn.net/zc_ad/article/details/84619592

https://blog.csdn.net/zc_ad/article/details/84624593

https://blog.csdn.net/qq_35824035/article/details/85011523

关于RedisTemplate和StringRedisTemplate的区别,可参考:https://blog.csdn.net/notsaltedfish/article/details/75948281#commentBox

 

 

你可能感兴趣的:(SpringBoot,Redis,springboot,项目整合及进阶)