RedisTemplate使用

文章目錄

  • RedisTemplate使用
    • String類型
    • Hash類型
    • List類型
    • Set類型
    • Zset類型

RedisTemplate使用

String類型

    @Overridepublic void testString() {// t11();String key = "k1";String currentNum;// 用法1:key是否存在Boolean value = client.hasKey(key);log.info("[{}]是否存在[{}]", key, value);// 用法2:添加元素client.opsForValue().set(key, "v1", DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);// 用法3:獲取元素String getValue = client.opsForValue().get(key);log.info("getValue : [{}]", getValue);// 用法4:計數String counter = "counter:key";client.opsForValue().set(counter, "0", DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);client.opsForValue().increment(counter);client.opsForValue().increment(counter);currentNum = client.opsForValue().get(counter);log.info("currentNum : [{}]", currentNum);client.opsForValue().decrement(counter);currentNum = client.opsForValue().get(counter);log.info("currentNum : [{}]", currentNum);// 用法5:存儲list<map>結構數據List<Map<String, String>> multiMapList = Lists.newArrayList();for (int i = 0; i < 5; i++) {LinkedHashMap<String, String> itemMap = Maps.newLinkedHashMap();itemMap.put("name", "jack" + i);if (i % 2 == 0) {itemMap.put("age", String.valueOf(10 + i));itemMap.put("sex", "男");} else {itemMap.put("age", String.valueOf(11 + i));itemMap.put("sex", "女");}multiMapList.add(itemMap);}String multiMapStr = JSON.toJSONString(multiMapList);client.opsForValue().set("str:multiusers", multiMapStr, DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);String userList = client.opsForValue().get("str:multiusers");List<Map<String, String>> maps = CastBeanUtil.castListMap(JSON.parse(userList), String.class, String.class);log.info("maps : [{}]", maps);// 用法6:存儲list<entity>List<TzArea> areaList = Lists.newArrayList();for (int i = 0; i < 10; i++) {TzArea item = new TzArea();item.setAreaId((long) i);item.setAreaName("江蘇省");item.setLevel(1);item.setParentId(1L);areaList.add(item);}client.opsForValue().set("str:multiareas", JSON.toJSONString(areaList), DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);String res = client.opsForValue().get("str:multiareas");List<TzArea> tzAreas = JSON.parseArray(res, TzArea.class);log.info("tzAreas : [{}]", JSON.toJSONString(tzAreas));}

Hash類型

@Overridepublic void testHash() {// 用法1:添加一個字段client.opsForHash().put("hash:user:single", "name", "pmb");client.expire("user", DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);Map<Object, Object> result = client.opsForHash().entries("hash:user:single");log.info("result : [{}]", result);// 用法2:添加一個對象信息Map<Object, Object> handleMap = Maps.newLinkedHashMap();handleMap.put("name", "jack");handleMap.put("age", "18");handleMap.put("sex", "男");String key = "hash:user:all";client.opsForHash().putAll(key, handleMap);Map<Object, Object> allElements = client.opsForHash().entries(key);log.info("allElements : [{}]", allElements);// 用法3:只獲取map中key集合Set<Object> keyList = client.opsForHash().keys(key);log.info("keyList : [{}]", keyList);// 用法4:只獲取map中value集合List<Object> valueList = client.opsForHash().values(key);log.info("valueList : [{}]", valueList);}

List類型

@Overridepublic void testList() {// 用法1:順序添 加元素1,2,3,4// rightPush 列表右側添加元素String key = "list:phoneList";client.opsForList().rightPush(key, "16607024161");client.opsForList().rightPush(key, "16607024162");client.opsForList().rightPush(key, "16607024163");client.expire(key, DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);// 刪除元素client.opsForList().rightPop(key);// 元素個數Long size = client.opsForList().size(key);assert size !=null;log.info(SIZE_FORMAT, size);// 查找元素// index 查找指定下標的元素 下標從0開始,最后一個size-1String firstItem = client.opsForList().index(key, 0);log.info("firstItem : [{}]", firstItem);String secondItem = client.opsForList().index(key, 1);log.info("secondItem : [{}]", secondItem);String thirdItem = client.opsForList().index(key, 2);log.info("thirdItem : [{}]", thirdItem);// list中所有元素List<String> res = client.opsForList().range(key, 0, size - 1);log.info("res : [{}]", res);// 修改制定位置數據client.opsForList().set(key, 0, "12");// 實現棧 先進后出client.opsForList().leftPush(key, "1");client.opsForList().leftPush(key, "2");client.opsForList().leftPush(key, "3");client.opsForList().leftPop(key);client.opsForList().leftPop(key);client.opsForList().leftPop(key);// 實現隊列 先進先出client.opsForList().leftPush(key, "one");client.opsForList().leftPush(key, "two");client.opsForList().rightPop(key);client.opsForList().rightPop(key);}

Set類型

   @Overridepublic void testSet() {String key = "set:nums";// 用法1:添加元素client.opsForSet().add(key, "1", "2", "3");client.expire(key, DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);//用法2:獲取集合的元素Set<String> members = client.opsForSet().members(key);log.info("members : [{}]", members);// 用法3:判斷某個元素是否存在Boolean member = client.opsForSet().isMember(key, "2");log.info("member : [{}]", member);String intersection = "set:nums:intersection";// 用法4:交集client.opsForSet().add(intersection, "1", "2");client.expire(intersection, DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);Set<String> intersectList = client.opsForSet().intersect(key, intersection);log.info("intersectList : [{}]", intersectList);// 用法5:并集Set<String> unionList = client.opsForSet().union(key, intersection);log.info("unionList : [{}]", unionList);// 用法6:查集Set<String> differenceList = client.opsForSet().difference(key, intersection);log.info("differenceList : [{}]", differenceList);}

Zset類型

  @Overridepublic void testZset() {String key = "zset:nums";// 用法1:添加元素client.opsForZSet().add(key, "one", 1);client.opsForZSet().add(key, "three", 30);client.opsForZSet().add(key, "two", 20);client.opsForZSet().add(key, "four", 44);client.opsForZSet().add(key, "five", 55);client.expire(key, DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);// 用法2:返回指定元素排名Long one = client.opsForZSet().rank(key, "five");log.info("rank : [{}]", one);Long size = client.opsForZSet().size(key);assert size !=null;log.info(SIZE_FORMAT, size);// 用法3:返回指定區間元素Set<String> range = client.opsForZSet().range(key, 0, size - 1);log.info("range : [{}]", range);// 用法4:指定分數區間用戶Set<String> userList = client.opsForZSet().rangeByScore(key, 1, 60);log.info("userList : [{}]", userList);// 用法5:移除一個或者多個元素client.opsForZSet().remove(key, "two");log.info(SIZE_FORMAT, client.opsForZSet().size(key));// 用法6:計算指定分數之間用戶個數Long count = client.opsForZSet().count(key, 1, 20);log.info("count : [{}]", count);Set<String> invertedOrder = client.opsForZSet().reverseRange(key, 0, -1);log.info("InvertedOrder : [{}]", invertedOrder);// 用法7:顯示所有成員score以及對應用戶Set<ZSetOperations.TypedTuple<String>> allLis = client.opsForZSet().rangeWithScores(key, 0, -1);assert allLis != null;for (ZSetOperations.TypedTuple<String> next : allLis) {String value = next.getValue();Double score = next.getScore();log.info("通過rangeWithScores(K key, long start, long end)方法獲取RedisZSetCommands.Tuples的區間值:[{}],[{}]", value, score);}// 用法8:相同score返回處理,取值第一個String lexKey = "zset:lex";client.delete(lexKey);client.opsForZSet().add(lexKey, "zs", 55);client.opsForZSet().add(lexKey, "ls", 55);client.opsForZSet().add(lexKey, "ww", 54);client.opsForZSet().add(lexKey, "zl", 55);client.expire(lexKey, DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);// 取出score集合Set<ZSetOperations.TypedTuple<String>> typedTuples = client.opsForZSet().rangeWithScores(lexKey, 0, -1);if(Objects.isNull(typedTuples)){throw new IllegalArgumentException("出現異常了");}Map<String, Double> cachedMap = new ConcurrentHashMap<>(16);Iterator<ZSetOperations.TypedTuple<String>> scoreIterator = typedTuples.iterator();String firstUser = null;while (scoreIterator.hasNext()) {ZSetOperations.TypedTuple<String> item = scoreIterator.next();Double score = item.getScore();String value = item.getValue();if (cachedMap.containsValue(score)) {// 找到重復scorefirstUser = value;}cachedMap.put(value, score);}log.info("firstUser : [{}]", firstUser);}

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

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

相關文章

持續進化的難題:解析Transformer模型在增量學習中的挑戰

持續進化的難題&#xff1a;解析Transformer模型在增量學習中的挑戰 Transformer模型自問世以來&#xff0c;以其卓越的性能在自然語言處理&#xff08;NLP&#xff09;領域大放異彩。然而&#xff0c;當應用于增量學習場景時&#xff0c;即便是這一強大的模型也面臨著一系列挑…

Qt:15.布局管理器(QVBoxLayout-垂直布局、QHBoxLayout-水平布局、QGridLayout-網格布局、拉伸系數,控制控件顯示的大小)

目錄 一、QVBoxLayout-垂直布局&#xff1a; 1.1QVBoxLayout介紹&#xff1a; 1.2 屬性介紹&#xff1a; 1.3細節理解&#xff1a; 二、QHBoxLayout-水平布局&#xff1a; 三、QGridLayout-網格布局&#xff1a; 3.1QGridLayout介紹&#xff1a; 3.2常用方法&#xff1a…

如何在 Windows 10 上恢復未保存的 Word 文檔

您是否整晚都在處理一個重要的 word 文件&#xff0c;但忘記保存它了&#xff1f;本文適合您。在這里&#xff0c;我們將解釋如何恢復未保存的 word 文檔。除此之外&#xff0c;您還將學習如何恢復已刪除的 word 文檔。 從專業人士到高中生&#xff0c;每個人都了解丟失重要 W…

three完全開源擴展案例01-三角形漸變

演示地址 import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls.jsconst box document.getElementById(box)const scene new THREE.Scene()const camera new THREE.PerspectiveCamera(75, box.clientWidth / box.client…

SQL Server鏡像與日志:數據保護的雙重保障

SQL Server鏡像與日志&#xff1a;數據保護的雙重保障 在SQL Server的高可用性解決方案中&#xff0c;數據庫鏡像和日志傳送是兩種重要的技術&#xff0c;它們都旨在提供數據的安全性和業務連續性。然而&#xff0c;這兩種技術在實現方式和使用場景上有著明顯的區別。本文將深…

時間序列分析方法匯總對比及優缺點和適用情況(上)--1. 移動平均 2. 指數平滑 3. 自回歸模型 4. 移動平均模型 5. 自回歸移動平均模型

目錄 1. 移動平均&#xff08;Moving Average&#xff09; 2. 指數平滑&#xff08;Exponential Smoothing&#xff09; 3. 自回歸模型&#xff08;Autoregressive Model, AR&#xff09; 4. 移動平均模型&#xff08;Moving Average Model, MA&#xff09; 5. 自回歸移動…

杜比全景聲——空間音頻技術

什么是杜比&#xff1f;是否是標清、高清、超清之上的更清晰的格式&#xff1f;杜比全景聲 和傳統多聲道立體聲的差別&#xff1f;杜比全景聲音頻的渲染方式&#xff1f;車載平臺上杜比技術的應用&#xff1f; 杜比技術的起源 杜比實驗室&#xff08;Dolby Laboratories&…

大數據基礎:Hadoop之MapReduce重點架構原理

文章目錄 Hadoop之MapReduce重點架構原理 一、MapReduce概念 二、MapReduce 編程思想 2.1、Map階段 2.2、Reduce階段 三、MapReduce處理數據流程 四、MapReduce Shuffle 五、MapReduce注意點 六、MapReduce的三次排序 Hadoop之MapReduce重點架構原理 一、MapReduce概…

ORACLE重裝之后恢復數據庫,相當于sqlserver的附加數據庫

在開發機器上經常會遇到重裝系統的問題,重裝之前如果ORACLE沒有及時備份的話重裝之后就糾結了,數據還原很頭疼。 只能找到一些ORACLE安裝與重裝系統前目錄相同的解決辦法,目錄不同就沒招了。 我用的是oracle11G。老版的應該相似。 經過我的嘗試,找到了幾個關鍵點,現在分…

講講 JVM 的內存結構(附上Demo講解)

講講 JVM 的內存結構 什么是 JVM 內存結構&#xff1f;線程私有程序計數器?虛擬機棧本地方法棧 線程共享堆?方法區?注意永久代?元空間?運行時常量池?直接內存? 代碼詳解 什么是 JVM 內存結構&#xff1f; JVM內存結構分為5大區域&#xff0c;程序計數器、虛擬機棧、本地…

C# 泛型

泛型 泛型不是語法糖&#xff0c;而是由框架提供的一種便捷語法&#xff0c;首次出現在.NET 2.0中。 1. 泛型定義 泛型&#xff1a;是一種程序特性&#xff0c;定義時不對類型做出明確的規定&#xff0c;使用時規定且不能改變。一般應用&#xff1a;泛型集合、泛型方法、泛型…

機器學習——LR、?GBDT、?SVM、?CNN、?DNN、?RNN、?Word2Vec等模型的原理和應用

LR&#xff08;邏輯回歸&#xff09; 原理&#xff1a; 邏輯回歸模型&#xff08;Logistic Regression, LR&#xff09;是一種廣泛應用于分類問題的統計方法&#xff0c;尤其適用于二分類問題。其核心思想是通過Sigmoid函數將線性回歸模型的輸出映射到(0,1)區間&#xff0c;從…

【AI前沿】深度學習:神經網絡基礎

文章目錄 &#x1f4d1;引言一、神經元和感知器1.1 神經元的基本概念1.2 感知器模型 二、多層感知器&#xff08;MLP&#xff09;2.1 MLP的基本結構2.2 激活函數的重要性2.3 激活函數2.4 激活函數的選擇 三、小結 &#x1f4d1;引言 深度學習是現代人工智能的核心技術之一&…

kotlin Flow 學習指南 (三)最終篇

目錄 前言Flow生命周期StateFlow 替代LiveDataSharedFlow其他常見應用場景處理復雜、耗時邏輯存在依賴關系的接口請求組合多個接口的數據 Flow使用注意事項總結 前言 前面兩篇文章&#xff0c;介紹了Flow是什么&#xff0c;如何使用&#xff0c;以及相關的操作符進階&#xff…

如何挑選適合的需求池管理系統?10款優質工具分享

本文將分享10款優質需求池管理工具&#xff1a;PingCode、Worktile、Teambition、Epicor Kinetic、TAPD、SAP IBP、Logility、RELEX Solutions、JIRA、明道云。 在管理項目和產品需求時&#xff0c;正確的工具能夠大幅提高效率與透明度。如何從眾多需求池工具中選擇最適合團隊的…

第一節 SHELL腳本中的常用命令(2)

二,網絡管理命令nmcli 1.查看網卡 # 或者先用ip addr或ip a等查看網卡 ip a s 網卡名 ifconfig 網卡名 nmcil device show 網卡名 nmcil device status nmcil connection show 網卡名2.設置網卡 a)當網卡未被設置過時 設置dncp網絡工作模式 nmcil connection add con-name…

Rust編程-編寫自動化測試

編寫單元測試步驟&#xff1a; 1. 準備所需的數據 2. 調用需要測試的代碼 3. 斷言運行結果與我們所期望的一致 Rust的test元數據&#xff1a; #[cfg(test)]&#xff1a;是一個屬性宏&#xff08;attribute macro&#xff09;。用于控制特定的代碼段僅在測試環境中編譯…

自定義類型:聯合體

像結構體一樣&#xff0c;聯合體也是由一個或者多個成員組成&#xff0c;這些成員可以是不同的類型。 聯合體類型的聲明 編譯器只為最?的成員分配?夠的內存空間。聯合體的特點是所有成員共?同?塊內存空間。所以聯合體也叫&#xff1a;共?體。 輸出結果&#xff1a; 聯合體…

size_t 數據類型的好處

什么是size_t size_t 類型在不同的平臺上對應不同的底層整數類型&#xff0c;具體取決于平臺的指針大小。size_t 主要用于表示大小和長度&#xff0c;如數組的元素數量、緩沖區的大小等&#xff0c;它的設計目的是為了匹配指針的大小&#xff0c;以避免類型不匹配引起的錯誤。…

代碼隨想錄算法訓練營DAY58|101.孤島的總面積、102.沉沒孤島、103. 水流問題、104.建造最大島嶼

忙。。。寫了好久。。。。慢慢補吧。 101.孤島的總面積 先把周邊的島嶼變成水dfs def dfs(x, y, graph, s):if x<0 or x>len(graph) or y<0 or y>len(graph[0]) or graph[x][y]0:return sgraph[x][y]0s1s dfs(x1, y, graph, s)s dfs(x-1, y, graph, s)s dfs(…