版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zc_ad/article/details/84566213
在java中直接使用redis的时候,直接使用简单的两个指令lpush和rpop或者rpush和lpop就可以实现消息队列的操作。当与spring结合时,可以使用RedisTemplate和StringRedisTemplate;这两个Template是spring封装了对Redis的一些常用的操作,来实现消息队列,这两个区别于序列类。
当redis数据库里面本来存的是字符串数据或者你要存取的数据就是字符串类型数据的时候,那么你就使用StringRedisTemplate即可,如果数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取出一个对象,那么使用RedisTemplate是更好的选择。
此处使用StringRedisTemplate实现消息队列。
1.添加maven引用:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
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);
}
/**
* 获取消息
* 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通信,就比较复杂,并且需要有好的设计思路才能实现。
参考链接:
https://blog.csdn.net/notsaltedfish/article/details/75948281#commentBox