利用Redis 實現訊息佇列
1.用redis中的List可以實現佇列,這樣可以用來做訊息處理和任務排程的佇列
2.程式碼模擬
程式碼結構生產者模擬程式
- /**
- *
- */
- package scheduleTest;
- import java.util.Random;
- import java.util.UUID;
- import redis.clients.jedis.Jedis;
- /**
- * 模擬一個生產者
- * <p>Title: TaskProducer</p>
- * <p>Description: </p>
-
* <p>Company: </p>
- * @author 夏 傑
- * @date 2015年12月11日 下午4:26:48
- * @vesion 1.0
- */
- publicclass TaskProducer implements Runnable{
- Jedis jedis = new Jedis("120.55.195.177",6379);
- publicvoid run() {
- Random random = new Random();
- while(true){
- try{
-
Thread.sleep(random.nextInt(600
- // 模擬生成一個任務
- UUID taskid = UUID.randomUUID();
- //將任務插入任務佇列:task-queue
- jedis.lpush("task-queue", taskid.toString());
- System.out.println("插入了一個新的任務: " + taskid);
- }catch(Exception e){
-
e.printStackTrace();
- }
- }
- }
- }
消費者模擬程式
- /**
- *
- */
- package scheduleTest;
- import java.util.Random;
- import redis.clients.jedis.Jedis;
- /**
- * 模擬消費者
- * <p>Title: TaskConsumer</p>
- * <p>Description: </p>
- * <p>Company: </p>
- * @author 夏 傑
- * @date 2015年12月11日 下午4:44:23
- * @vesion 1.0
- */
- publicclass TaskConsumer implements Runnable {
- Jedis jedis = new Jedis("120.55.195.177",6379);
- publicvoid run() {
- Random random = new Random();
- while(true){
- //從任務佇列"task-queue"中獲取一個任務,並將該任務放入暫存佇列"tmp-queue"
- String taskid = jedis.rpoplpush("task-queue", "tmp-queue");
- // 處理任務----純屬業務邏輯,模擬一下:睡覺
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- //模擬成功和失敗的偶然現象
- if(random.nextInt(13) % 7 == 0){// 模擬失敗的情況,概率為2/13
- //將本次處理失敗的任務從暫存佇列"tmp-queue"中,彈回任務佇列"task-queue"
- jedis.rpoplpush("tmp-queue", "task-queue");
- System.out.println(taskid + "處理失敗,被彈回任務佇列");
- } else {// 模擬成功的情況
- // 將本次任務從暫存佇列"tmp-queue"中清除
- jedis.rpop("tmp-queue");
- System.out.println(taskid+"處理成功,被清除");
- }
- }
- }
- }
排程主程式
- /**
- *
- */
- package scheduleTest;
- /**
- * <p>Title: TaskShedulerSystem</p>
- * <p>Description: </p>
- * <p>Company: </p>
- * @author 夏 傑
- * @date 2015年12月11日 下午4:19:09
- * @vesion 1.0
- */
- publicclass TaskShedulerSystem {
- publicstaticvoid main(String[] args) throws Exception {
- // 啟動一個生產者執行緒,模擬任務的產生
- new Thread(new TaskProducer()).start();
- Thread.sleep(15000);
- //啟動一個執行緒者執行緒,模擬任務的處理
- new Thread(new TaskConsumer()).start();
- //主執行緒休眠
- Thread.sleep(Long.MAX_VALUE);
- }
- }
執行結果
相關推薦
PHP中利用redis實現訊息佇列處理高併發請求
將請求存入redis 為了模擬多個使用者的請求,使用一個for迴圈替代 //redis資料入隊操作 $redis = new Redis(); $redis->connect('127.0.0.1',6379); for($i=0;$i<50;$i++){
PHP中利用redis實現訊息佇列處理高併發請求--簡潔程式碼實現效果
將請求存入redis 為了模擬多個使用者的請求,使用一個for迴圈替代 //redis資料入隊操作 $redis = new Redis(); $redis->connect('127.0.
利用Redis 實現訊息佇列
1.用redis中的List可以實現佇列,這樣可以用來做訊息處理和任務排程的佇列 2.程式碼模擬 程式碼結構 生產者模擬程式 /** * */ package scheduleTest; import java.util.Ra
Qt應用Redis實現訊息佇列
類似BS模式,客戶端傳送任務請求給服務端,服務端將處理結果返回給客戶端。 redis負責訊息的儲存和轉發。 模擬病人掛號看病,Patient程序進行掛號,Doctor程序進行看病 ,程式程式碼如下: /////////////
springboot整合redis實現訊息佇列
在java中直接使用redis的時候,直接使用簡單的兩個指令lpush和rpop或者rpush和lpop就可以實現訊息佇列的操作。當與spring結合時,可以使用RedisTemplate和StringRedisTemplate;這兩個Template是spring封裝了對Redis的一些常用的
第八篇:Spring Boot使用Redis實現訊息佇列
目前常用的訊息佇列大概有三種類型,RabbitMQ等AMQP系列, Kafka, Redis等key-value系列,它們的使用場景分別是: 1.RabbitMQ:相對重量級高併發的情況,比如資料的非同步處理,任務的序列執行等. 2.Kafka:基於Pull的模式來處理,具體
第 21 講 在Springboot使用Redis實現訊息佇列
第二十一講 在Springboot使用Redis實現訊息佇列 1.引入依賴:pom.xml <dependency> <groupId>org.springframew
SpringBoot中使用redis實現訊息佇列
在pom中加入redis依賴: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-r
Redis實現訊息佇列
個人理解在專案中使用訊息佇列一般是有如下幾個原因: 把瞬間伺服器的請求處理換成非同步處理,緩解伺服器的壓力 實現資料順序排列獲取 redis實現訊息佇列步驟如下:1).redis函式rpush,lpop2).建議定時任務入佇列3)建立定時任務出佇列 檔案:dem
SpringBoot利用redis整合訊息佇列
import java.util.concurrent.CountDownLatch; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactor
springboot使用redis實現訊息佇列
一、概念訊息佇列分為兩種模式,一種是釋出訂閱模式,一種是生產者消費者模式。生產者消費者模式:生產者生產訊息放到佇列裡,多個消費者同時監聽佇列,誰先搶到訊息誰就會從佇列中取走訊息;即對於每個訊息只能被最多一個消費者擁有。釋出者訂閱者模式:釋出者生產訊息放到佇列裡,多個監聽佇列的
Spring+Redis實現訊息佇列
一、概述 針對Redis,我們知道有String、List、Hash、Set、sorted Set等資料結構,而List資料結構就是一個簡單的字串列表,我們可以向列表的首部或者尾部新增或者移除元素。並且當列表中沒有元素的時候會發生阻塞或者等待超時。因此我們就可以使用Redi
利用Redis實現非同步訊息佇列優化系統性能 (Redis高階應用)
寫在前面 今天把之前在專案中使用 Redis 做非同步訊息佇列的使用經驗總結一下。首先明確使用目的,因為專案中,我們進行某個操作後可能後續會有一系列的其他耗時操作,但是我們不希望將主執行緒阻塞在此過程中,這時便可將其他操作非同步化。舉個栗子,當你給這篇部落格點贊或評論的時候
基於redis的訊息佇列的設計及實現
訊息佇列 所謂訊息佇列,就是一個以佇列資料結構為基礎的一個真實存在的實體,如陣列,redis中的佇列集合等等,都可以。 為什麼要使用佇列 主要原因是由於在高併發環境下,由於來不及同步處理,請求往往會發生堵塞,比如說,大量的insert,update之類的請求同時到達MySQL,直接導致無
Redis + DB +訊息佇列 實現高效的文章點贊,點踩功能
需求說明 使用者可點贊或踩,每贊一次,“贊”數量+1,每踩一次,“踩”數量+1,“點贊”和“點踩” 當天內二選一當天內有效 場景:使用者A 點贊 文章a,文章a 點贊量+1 ,同一使用者,同一文章 當天再次點選無效,贊與踩二選一,隔天再次點選有效 表設計 文章的
【Redis】redis非同步訊息佇列+Spring自定義註解+AOP方式實現系統日誌持久化
說明: SSM專案中的每一個請求都需要進行日誌記錄操作。一般操作做的思路是:使用springAOP思想,對指定的方法進行攔截。拼裝日誌資訊實體,然後持久化到資料庫中。可是仔細想一下會發現:每次的客戶端的每一次請求,伺服器都會處理兩件事情。一個是正常的業務操作;另一個就是我們額外要做的日誌資料記錄。這樣的
12.springboot使用redis的訂閱功能實現訊息佇列
<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
Java Jedis操作Redis示例(一)——pub/sub模式實現訊息佇列
轉載:http://blog.csdn.net/shaobingj126/article/details/50585035 轉載:http://blog.csdn.net/abcd898989/article/details/51697596 一 訊息佇列 1. 定義 訊息
使用Redis+php-resque實現訊息佇列
一、Redis安裝 1. 獲取原始碼 shell># cd /usr/local/src shell># wget http://download.redis.io/releases/redis-2.6.16.tar.gz shell># tar -z
SpringBoot2.0高階案例(07) 整合:Redis叢集 ,實現訊息佇列場景
本文原始碼 GitHub地址:知了一笑 https://github.com/cicadasmile/middle-ware-pa