1. 程式人生 > >springboot整合redis實現訊息佇列

springboot整合redis實現訊息佇列

在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