Redis實現非同步佇列

2021-10-01 03:43:23 字數 2348 閱讀 6695

可以考慮利用list結構進棧出棧實現,那麼基本上你會需要以下步驟

/**

* @description: configonlinemodel

* @author: elegant

* @date: 2019/11/29

*/@data

public class configonlinemodel implements serializable

/**

* @description: eventproducer

* @author: elegant

* @date: 2019/11/29

*/@component

public class eventproducer

}

/**

* @description: eventconsumer

* @author: elegant

* @date: 2019/11/29

*/@component

// 用來尋找handler

// 註冊事件與handler對映

// (乙個事件型別可以對應多個handler處理,乙個handler可以處理多個型別事件)

private map> eventconfig = new hashmap<>();

@autowired

private redisprocess redisprocess;

// 註冊handler到相應的事件

@override

public void afterpropertiesset() throws exception

eventconfig.get(eventtype).add(entry.getvalue());}}

}// 消費執行緒池

executorservice executorservice = executors.newcachedthreadpool();

// 消費非同步訊息佇列

executorservice.submit((runnable) () ->}}

});}

@override}}

如果確定只是簡單的需要,不需要定義各種事件的話可以簡單處理

private void consume()  catch (interruptedexception e) 

} else }}

});}

/**

* @description: eventhandler

* @author: elegant

* @date: 2019/11/29

*/public inte***ce eventhandler

配置上線後置邏輯

/** * @description: configonlinehandler

* @author: elegant

* @date: 2019/11/29

*/@component

public class configonlinehandler implements eventhandler

}@override

public listgetsupportedevents()

}

/**

* @description: eventtype

* @author: elegant

* @date: 2019/11/29

*/public enum eventtype

注入redis

org.springframework.boot

spring-boot-starter-data-redis

使用lpush入棧 rop出棧,這裡沒使用jedis,jedis可以使用brpop,不需要thread.sleep操作sh實現阻塞

@override

public long lpush(string key, string value) catch (exception e)

}@override

public listrpop(int timeout, string key) catch (exception e)

}

redis比較簡單的使用list實現非同步佇列,但是因為redis設計的原因,  

這樣的實現是不太可靠的,可靠性明顯不如其他諸如mq,kafka等訊息中介軟體

利用Remoting實現非同步佇列機制

很多需要提高應用效能 提高立即響應速度 但不立即處理 提高吞吐能力 提公升使用者體驗 的場景,都採用非同步處理的機制,net 中可能用 msmq 的實現樣例不少,其實自行實現非同步佇列並不複雜。最近有兩個專案組的同事向我要了類似的關於實現非同步佇列的方法,於是翻出了兩年以前寫的實現 sp 與運營商簡...

使用Redis做過非同步佇列嗎,是如何實現的?

redis設計用來做快取的,但是由於它自身的某種特性使得它可以用來做訊息佇列。它有幾個阻塞式的api可以使用,正是這些阻塞式的api讓其有能力做訊息佇列 另外,做訊息佇列的其他特性例如fifo 先入先出 也很容易實現,只需要乙個list物件從頭取資料,從尾部塞資料即可 redis能做訊息佇列還得益於...

redis分布式鎖和非同步佇列

redis 五種基本資料型別 string list hash setsortedset redis 從海量資料裡查詢某一固定字首的 key keys pattern 查詢所有符合給定模式 pattern 的 key。keys一次性返回所有的key 鍵的數量過大會使服務卡頓 scan cursor ...