RedisTemplate實戰應用--隊列等

一、RedisTemplate隊列插入

1、從集合左邊插入值
https://blog.csdn.net/weixin_43658899/article/details/121040307

leftPush(K key, V value)
redisTemplate.opsForList().leftPush("leftdatakey","bbbb");

2、從集合左邊開始在v1值后邊插入新值v2

leftPush(key, v1, v2)
// 在隊列中從左向右查找v1  沒有不插入 有在v1值左側插入v2  多個v1取左數第一個v1
redisTemplate.opsForList().leftPush("leftdatakey", "bb", "cc");

3、從右側插入新值

rightPush(K key, V value)
redisTemplate.opsForList().rightPush("rightdatakey",'bbb');

4、從集合右邊邊開始在v1值后邊插入新值v2

rightPush(key, v1, v2)
// 在隊列中從右向左查找v1  沒有不插入 有在v1值右側插入v2  多個v1取右數第一個v1
redisTemplate.opsForList().rightPush("leftdatakey", "bb", "cc");

5、從左邊批量插入新值

leftPushAll(K key, Collection values)redisTemplate.opsForList().leftPushAll("key", JSONArray.parseArray(JSON.toJSONString(plist)));

6、從右側批量插入

rightPushAll(K , V)
redisTemplate.opsForList().leftPushAll("key", JSONArray.parseArray(JSON.toJSONString(plist)));

7、如果key存在,從左邊插入新值 否則不插入

redisTemplate.opsForList().leftPushIfPresent("key", "a");

8、如果key存在,在右側新插入新值 ,否則不插入

redisTemplate.opsForList().rightPushIfPresent("key", "a");

9、將key作為對象插入隊列

  IMPlatformResult<Object> result = new IMPlatformResult<>();result.setUserId(71L);result.setGroupId(73L);String key = StrUtil.join(":", RedisKey.IM_USER_GROUP_MEMBER_TIME,appName);// 插入隊列redisTemplate.opsForList().rightPush(key, JSONObject.toJSONString(result));

在這里插入圖片描述

二、RedisTemplate隊列刪除

1、默認移除key中最左的一個值

redisTemplate.opsForList().leftPop("key");

2、默認從最右側移除一個值

redisTemplate.opsForList().rightPop("key");

3、指定過期時間后刪除key中最左的一個值

redisTemplate.opsForList().leftPop("key",1,TimeUnit.MINUTES);

4、指定過期時間后刪除key中最右的一個值

redisTemplate.opsForList().rightPop("key",1,TimeUnit.MINUTES);

5、移除k1中最右的值,并將移除的值插入k2中最左側

// k1和k2不是同一個key時,k1右側移除,k2左側插入,k2不存在時則新增一個然后在插入
// k1和k2是同一個key時,相當于把最右側的值移到了最左側
redisTemplate.opsForList().rightPopAndLeftPush("key1", "key2");

6、指定過期時間后,移除k1中最右的值,并將移除的值插入k2中最左側

// k1和k2不是同一個key時,k1右側移除,k2左側插入,k2不存在時則新增一個然后在插入
// k1和k2是同一個key時,相當于把最右側的值移到了最左側
redisTemplate.opsForList().rightPopAndLeftPush("key1", "key2",1,TimeUnit.MINUTES);

7、刪除列隊中指定位置的key值

// 隊列左從0 開始 0/1/2/3
redisTemplate.opsForList().remove(key, 3, "a");

在這里插入圖片描述

三、RedisTemplate隊列替換

1、在指定坐標位置插入(替換)新值

set(K key, final long index, V value)
index不存在,報錯(ERR index out of range)
key不存在,報錯(ERR no such key)
從左側插入
redisTemplate.opsForList().set("key",2,"a");

2、截取下標long1和long2之間的值,包括long1和long2對應的值,并將其保留為key對應的新值

左側坐標從0開始,右側從-1開始
當long1超過坐標時(此時與long2無關),都會截取為空,key會被刪除
當long1為負時(此時與long2無關),都會截取為空,key會被刪除
當long1為正且在下標存在其中,long2為負數時,只要兩個沒有重疊,相當于去左去右,保留了中間的部分
當long1為正且在下標存在其中,long2為負數時,只要兩個交叉重疊,截取為空,如下圖redisTemplate.opsForList().trim("key",1,3);

四、RedisTemplate隊列查詢

1、獲取隊列中指定下標間的值

redisTemplate.opsForList().range("key", 0, -1);

2、獲取隊列所有值

0代表左側開始 -1代表右側末端
redisTemplate.opsForList().range(key, 0,-1)

3、獲取對應key的集合長度

Long size = redisTemplate.opsForList().size("key");

4、獲取指定位置的值(index從左往右,從0開始)

String string1 = (String) redisTemplate.opsForList().index("key", 2);

5、取隊列集合轉為list集合

List<IMPlatformResult> results = new LinkedList<>();log.info("緩存隊列 " + redisTemplate.opsForList().range(key, 0,-1));List<Object> jsonArray =  redisTemplate.opsForList().range(key, 0, -1);if(CollectionUtils.isNotEmpty(jsonArray)){for(Object o: jsonArray){IMPlatformResult b  = JSONObject.parseObject(o.toString(),IMPlatformResult.class);results.add(b);}}

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19824.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19824.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19824.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用 Django 連接 MySQL 數據庫

文章目錄 步驟一&#xff1a;安裝必要的庫和驅動步驟二&#xff1a;配置數據庫連接步驟三&#xff1a;執行數據庫遷移步驟四&#xff1a;開始使用 MySQL 數據庫創建一個模型遷移模型到數據庫使用模型進行數據操作創建新記錄&#xff1a;查詢記錄&#xff1a;更新記錄&#xff1…

Mac安裝第三方軟件的命令安裝方式

場景&#xff1a; 打開終端命令行&#xff0c;sudo xattr -rd com.apple.quarantine&#xff0c;注意最后quarantine 后面加一個空格&#xff01;然后打開Finder&#xff08;訪達&#xff09;&#xff0c;點擊左側的 應用程序&#xff0c;找到相關應用&#xff0c;拖進終端qua…

(超實用)京東訂單數據分析案例-維度下鉆

1&#xff0c;數據介紹&#xff0c;字段了解 盡可能熟悉業務&#xff0c;多知道字段的含義&#xff0c;字段字段間的邏輯關系&#xff0c;后期數據分析思路才能更清晰&#xff0c;結果才能更準確 2&#xff0c;訂單數據分析基本思路 維度下鉆 3&#xff0c;代碼實現全流程思路…

華為telnet的兩種認證方式

華為telnet的兩種認證方式 實驗拓撲&#xff1a; 實驗要求&#xff1a; 1.采用普通密碼認證實現telnet 遠程登錄機房設備R3 2.采用AAA認證服務方式實現telnet 遠程登錄機房設備R3 實驗步驟&#xff1a; 1.完成基本配置&#xff08;設備接口配置IP&#xff0c;此步驟略過&#…

Facebook的隱私保護挑戰:用戶數據安全的新時代

在全球范圍內&#xff0c;Facebook已經成為了不可忽視的社交媒體巨頭&#xff0c;它連接著超過20億的活躍用戶。然而&#xff0c;隨著其影響力的不斷擴大&#xff0c;關于用戶隱私和數據安全的問題也愈加引人關注。本文將深入探討Facebook面臨的隱私保護挑戰&#xff0c;以及它…

一個程序員的牢獄生涯(47)學法

星期一 學法 二鋪不知道什么時候走到了我的身邊,向我說道,這是二鋪在我進來號子后主動過來和我說話。 我聽到二鋪這聲突兀的說話后,抬起頭。這時我才看到,除了二鋪,還有六子、棍子都圍在我的身邊,看著我。雖然六子和棍子依舊一副‘吊兒郎當’的樣子,但我從他們幾個的眼神…

解析前端開發中同源策略與配置代理

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、pandas是什么&#xff1f;二、使用步驟 1.引入庫2.讀入數據總結 前言 在前端開發中&#xff0c;跨域請求是一個常見的問題。同源策略限制了瀏覽器中一個頁面…

C++高手進階:Windows 模塊加載的藝術與策略

前文我們講到了怎么不依賴第三庫&#xff0c;搭建自己的測試框架 沒有看的讀者可以通過這個鏈接自行閱讀&#xff1a; &#x1f449;&#x1f449;&#x1f449; 自力更生&#xff1a;0依賴三方庫&#xff0c;手把手教你打造專屬C測試框架 作為項目開發來說&#xff0c;我們通常…

Leetcode:最長回文子串

題目鏈接&#xff1a;5. 最長回文子串 - 力扣&#xff08;LeetCode&#xff09; 普通版本&#xff08;暴力枚舉&#xff09; 解題關鍵&#xff1a; 1、記錄最長回文字串的長度和起始字符的下標 2、判斷回文字串的邏輯與整體邏輯分離 3、先確定尋找回文字串的邊界范圍后從兩邊向…

解析Java中1000個常用類:CharSequence類,你學會了嗎?

在 Java 編程中,字符串操作是最常見的任務之一。為了提供一種靈活且統一的方式來處理不同類型的字符序列,Java 引入了 CharSequence 接口。 通過實現 CharSequence 接口,各種字符序列類可以提供一致的 API,增強了代碼的靈活性和可擴展性。 本文將深入探討 CharSequence 接…

NBM 算法【python,算法,機器學習】

樸素貝葉斯法&#xff08;Naive Bayes model&#xff09;是基于貝葉斯定理與特征條件獨立假設的分類方法。 貝葉斯定理 P ( A ∣ B ) P ( B ∣ A ) ? P ( A ) P ( B ) P(A|B)\frac{P(B|A) * P(A)}{P(B)} P(A∣B)P(B)P(B∣A)?P(A)? 其中A表示分類&#xff0c;B表示屬性&…

Unity中的MVC框架

基本概念 MVC全名是Model View Controller 是模型(model)-視圖(view)-控制器(controller)的縮寫 是一種軟件設計規范&#xff0c;用一種業務邏輯、數據、界面顯示 分離的方法組織代碼 將業務邏輯聚集到一個部件里面&#xff0c;在改進和個性化定制界面及用戶交互的同時&#x…

【嵌入式硬件】DRV8874電機驅動

目錄 1 芯片介紹 1.1 特性簡介 1.2 引腳配置 1.3 最佳運行條件 2 詳細說明 2.1 PMODE配置控制模式 2.1.1 PH/EN 控制模式 2.1.2 PWM 控制模式 2.1.3 獨立半橋控制模式 2.2 電流感測和調節 2.2.1 IPROPI電流感測 2.2.2 IMODE電流調節 3.應用 3.1設計要求 3.2 設計…

AI換臉FaceFusion一鍵云部署指南

大家好&#xff0c;從我開始分享到現在&#xff0c;收到很多朋友的反饋說配置很低玩不了AI。本篇是一個云端部署AI項目的指南&#xff0c;幫助大家在云端進行AI項目的部署。我會從云平臺的選擇、代碼部署、保存鏡像幾個方面進行詳細的介紹。沒有代碼基礎的小白也不用擔心&#…

exe4j innosetup

exe4j:jdk: 打包時&#xff1a;需要的文件最好放到單獨的一個文件夾下&#xff0c;主機安裝32位jdk,exe4j用32位的。 附帶jre: jre用32位的&#xff08;jdk下的jre&#xff09;可使用X86,X64.用相對路徑。 只打64位時&#xff0c;需要選擇32-bit or 64-bit (generate 64…

樂觀鎖 or 悲觀鎖 你怎么選?

你有沒有聽過這樣一句話&#xff1a;悲觀者正確&#xff0c;樂觀者成功?。那么今天我來分享下什么是樂觀鎖?和悲觀鎖。 樂觀鎖和悲觀鎖有什么區別&#xff0c;它們什么場景會用 樂觀鎖 樂觀鎖基于這樣的假設&#xff1a;多個事務在同一時間對同一數據對象進行操作的可能性很…

fps游戲中如何將矩陣轉換為二維屏幕上的矩形坐標

fps游戲中如何將矩陣轉換為二維屏幕上的矩形坐標 matrix[4][4]: 4x4 矩陣&#xff0c;通常用于3D變換&#xff08;如模型視圖投影矩陣&#xff09;。 float* location: 一個指向位置坐標的指針&#xff0c;表示要轉換的3D位置。 int Window_w, int Window_h: 窗口的寬度和高…

工廠模式詳情

一.介紹工廠模式的用途與特點 工廠方法模式是一種創建型設計模式&#xff0c; 其在父類中提供一個創建對象的方法&#xff0c; 允許子類決定實例化對象的類型。定義工廠方法模式(Fatory Method Pattern)是指定義一個創建對象的接口&#xff0c;但讓實現這個接口的類來決定實例…

Python導出Jira列表

import requests import urllib3 urllib3.disable_warnings() from jira import JIRA import pandas as pd def login_jira(username,password):jira JIRA("https://jira.cn/",basic_auth(username,password))#projectsjira.project(id13)# jqlproject"云鏈-…

基于強化學習的控制率參數自主尋優

1.介紹 針對控制建模與設計場景中控制參數難以確定的普遍問題&#xff0c;提出了一種基于強化學習的控制律參數自主優化解決方案。該方案以客戶設計的控制律模型為基礎&#xff0c;根據自定義的控制性能指標&#xff0c;自主搜索并確定最優的、可狀態依賴的控制參數組合。 可…