[發明專利]一種基于Jedis的將多線程并發請求合并批量提交并分發結果的實現方法有效
| 申請號: | 201611029743.7 | 申請日: | 2016-11-15 |
| 公開(公告)號: | CN108073414B | 公開(公告)日: | 2020-07-28 |
| 發明(設計)人: | 石志光;歐陽軍;陳丹 | 申請(專利權)人: | 北京億陽信通科技有限公司 |
| 主分類號: | G06F9/38 | 分類號: | G06F9/38 |
| 代理公司: | 北京辰權知識產權代理有限公司 11619 | 代理人: | 劉廣達 |
| 地址: | 100093 北京市海淀*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 jedis 多線程 并發 請求 合并 批量 提交 分發 結果 實現 方法 | ||
1.一種基于Jedis的將多線程并發請求合并批量提交并分發結果的實現方法,其特征在于,所述Jedis的封裝包括以下模塊:基本操作模塊、監聽器模塊、喚醒器模塊;其中,PipelineWrapper是基本操作模塊的主類,TimerMonitor是監聽器模塊的主類,Notifier是喚醒器模塊的主類;
所述方法包括:
客戶端線程向PipelineWrapper發起請求,所述請求包括同步請求op()、異步請求opAsync()或批量提交sync()中的一種;
所述請求首先向PipelineWrapper請求全局排它鎖;
獲得鎖之后,向底層的Pipeline發起op()、opAsync()請求或者sync()請求的其中一種;
所述op()、opAsync()請求對PipelineWrapper的操作計數屬性opCount執行+1操作,一旦opCountmaxOpCount,觸發批量提交sync()的執行;
釋放全局排它鎖;
獲取結果并返回。
2.根據權利要求1所述的方法,對于同步請求op(),每次執行都會向同步操作上報隊列中增加一個代表該請求結果是否已經可以讀取的信號量(Semaphore),該信號量會在批量提交sync()執行時由Notifier喚醒。
3.根據權利要求1所述的方法,所述TimerMonitor會按照設定的間隔時間,周期性地執行PipelineWrapper的批量提交方法sync(),觸發底層批量提交的執行。
4.根據權利要求1所述的方法,其特征在于:當所述客戶端線程向PipelineWrapper發起請求是同步請求op()時,所述基于Jedis的將多線程并發請求合并批量提交并分發結果的實現方法具體包括:
客戶端線程向PipelineWrapper發起同步請求op()調用;
獲得PipelineWrapper對象屬性lock的排它鎖;
向底層的pipeline發起相應的請求,所述請求以異步方式執行;
對操作計數器opCount執行+1操作;
執行PipelineWrapper的reportOp()操作,將通過“new Semaphore(0)”創建一個信號量Semaphore推送到同步操作等待隊列respQueue,最后將信號量返回;
如果此時opCountmaxOpCount,即操作計數已經超過設置的最大操作數,則觸發批量提交sync()的執行;
釋放PipelineWrapper對象屬性lock的排它鎖,繼續執行其他請求;
在創建的信號量Semaphore上執行等待操作acquire(),直到被Notifier喚醒;
在底層pipeline返回的Response鉤子對象上調用get方法獲取結果并返回。
5.根據權利要求1所述的方法,其特征在于:當所述客戶端線程向PipelineWrapper發起請求是異步請求opAsync()時,所述基于Jedis的將多線程并發請求合并批量提交并分發結果的實現方法具體包括:
客戶端線程向PipelineWrapper發起異步請求opAsync()調用;
獲得PipelineWrapper對象屬性lock的排它鎖;
向底層的pipeline發起相應的請求,所述請求以異步方式執行;
對操作計數器opCount執行+1操作;
如果此時PipelineWrapper的屬性trigerCommitInAsync==true并且opCountmaxOpCount,并且操作計數已經超過設置的最大操作數,則觸發批量提交sync()的執行;
釋放PipelineWrapper對象屬性lock的排它鎖,繼續執行其他請求;
直接返回對Response包裝后的Resp。
6.根據權利要求1所述的方法,其特征在于:當所述客戶端線程向PipelineWrapper發起請求是批量提交sync()時,所述基于Jedis的將多線程并發請求合并批量提交并分發結果的實現方法具體包括:
客戶端線程向PipelineWrapper發起批量提交sync()調用;
獲得PipelineWrapper對象屬性lock的排它鎖;
判斷opCount0是否成立,成立繼續;否則直接返回;
向底層的pipeline發起批量提交請求,等待底層執行返回;
在對象屬性latch上執行countDown()打開異步請求閂,以便異步請求線程獲取結果,并創建一個新的未打開的異步請求閂賦值給對象屬性latch,供后續異步請求使用;
如果同步請求隊列respQueue非空,則將其封裝到新的Notifier中,提交至線程池ExecutorService進行喚醒任務的執行;
將opCount置位為0;
釋放PipelineWrapper對象屬性lock的排它鎖,繼續執行其他請求;
調用返回。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京億陽信通科技有限公司,未經北京億陽信通科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201611029743.7/1.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:單糖濃度傳感器和方法
- 下一篇:熱敏記錄材料





