RedisTemplate操作哈希數據

RedisTemplate操作哈希數據

  • 概述
  • 常用方法
    • 添加哈希數據
      • 添加hashMap值
      • 判斷hashkey
    • 獲取哈希數據
      • 獲取屬性值
      • 獲取hashMap值。
      • 獲取鍵值對。
      • 獲取map鍵是否有值
      • 判斷是否有map鍵。
      • 獲取鍵。
      • 獲取長度。
      • 集合方式獲取值。
      • 匹配獲取鍵值對
    • 自增
      • 以double值大小自增。
      • 以long值大小自增。
    • 修改刪除
      • 修改哈希數據中的某個屬性值
      • 刪除哈希數據中的某個屬性值
      • 刪除哈希表

在這里插入圖片描述

主頁傳送門:📀 傳送

概述


??Redis是一個開源的內存數據結構存儲系統,它可以用作數據庫、緩存和消息代理。Redis 的核心是提供數據類型的集合,在Redis中,有多種數據結構,如字符串、列表、集合、有序集合和哈希表,它可以幫助解決從緩存到隊列再到事件處理的各種問題。

??RedisTemplate是Spring Data Redis提供的一個用于操作Redis的模板類,它提供了豐富的方法來操作Redis中的哈希數據。

常用方法


??本文來介紹下一些常用的使用RedisTemplate操作哈希數據的方法及簡單示例。

添加哈希數據


??向Redis中的哈希表中添加數據,可以使用opsForHash()方法獲取哈希操作對象,然后調用putAll()方法。

示例:

@Resource
private RedisTemplate<String, Object> redisTemplate;public void addHashData(String key, Map<String, Object> hashData) {redisTemplate.opsForHash().putAll(key, hashData);Map newMap = new HashMap();  newMap.put("map3","map3-3");  newMap.put("map5","map5-5");  redisTemplate.opsForHash().putAll("hashValue",newMap);  map = redisTemplate.opsForHash().entries("hashValue");  System.out.println("通過putAll(H key, Map<? extends HK,? extends HV> m)方法以map集合的形式添加鍵值對:" + map); 
}

添加hashMap值


??向Redis中的哈希表中添加hashMap值,可以使用opsForHash()方法獲取哈希操作對象,然后調用put(H key, HK hashKey, HV value)方法。

示例:

@Resource
private RedisTemplate<String, Object> redisTemplate;public void addHashMapValue(String key, String hashKey, String value) {redisTemplate.opsForHash().put("hashValue","map1","map1-1");  redisTemplate.opsForHash().put("hashValue","map2","map2-2"); redisTemplate.opsForHash().put(key, hashKey, value); 
} 

判斷hashkey


??Redis中的哈希表判斷hashkey是否存在,可以使用putIfAbsent(H key, HK hashKey, HV value)方法判斷hashkey是否存在,如果hashKey存在,啥也不操作,如果hashKey不存在,則新增。

示例:

redisTemplate.opsForHash().putIfAbsent("hashValue","map6","map6-6");  map = redisTemplate.opsForHash().entries("hashValue");  System.out.println("通過putIfAbsent(H key, HK hashKey, HV value)方法添加不存在于變量中的鍵值對:" + map); 

獲取哈希數據


??從Redis中的哈希表中獲取數據,可以使用opsForHash()方法獲取哈希操作對象,然后調用entries()方法。

示例:

public Map<Object, Object> getHashData(String key) {return redisTemplate.opsForHash().entries(key);
}

獲取屬性值


??從Redis中的哈希表中獲取某個屬性的值,可以使用opsForHash()方法獲取哈希操作對象,然后調用get()方法:

示例:

public Object getHashDataValue(String key, String field) {return redisTemplate.opsForHash().get(key, field);
}

獲取hashMap值。


?? 獲取指定變量中的hashMap值,通過values(H key)方法獲取變量中的hashMap值

示例:

values(H key)
List<Object> hashList = redisTemplate.opsForHash().values("hashValue");  
System.out.println("通過values(H key)方法獲取變量中的hashMap值:" + hashList); 

獲取鍵值對。


?? 通過entries(H key)方法獲取變量中的鍵值對

示例:

entries(H key)
Map<Object,Object> map = redisTemplate.opsForHash().entries("hashValue");  
System.out.println("通過entries(H key)方法獲取變量中的鍵值對:" + map);

獲取map鍵是否有值


??獲取變量中的指定map鍵是否有值,如果存在該map鍵則獲取值,沒有則返回null。

示例:

   get(H key, Object hashKey)Object mapValue = redisTemplate.opsForHash().get("hashValue","map1");  System.out.println("通過get(H key, Object hashKey)方法獲取map鍵的值:" + mapValue); 

判斷是否有map鍵。


?? 通過hasKey(H key, Object hashKey)方法判斷變量中是否存在map鍵

示例:

    hasKey(H key, Object hashKey)boolean hashKeyBoolean = redisTemplate.opsForHash().hasKey("hashValue","map3");  System.out.println("通過hasKey(H key, Object hashKey)方法判斷變量中是否存在map鍵:" + hashKeyBoolean);   

獲取鍵。


?? 通過keys(H key)方法獲取變量中的鍵

示例:

    keys(H key)Set<Object> keySet = redisTemplate.opsForHash().keys("hashValue");  System.out.println("通過keys(H key)方法獲取變量中的鍵:" + keySet);  

獲取長度。


?? 通過size(H key)方法獲取變量的長度

示例:

    size(H key)long hashLength = redisTemplate.opsForHash().size("hashValue");  System.out.println("通過size(H key)方法獲取變量的長度:" + hashLength); 

集合方式獲取值。


?? 通過multiGet(H key, Collection hashKeys)方法以集合的方式獲取變量中的值

示例:

    multiGet(H key, Collection<HK> hashKeys)List<Object> list = new ArrayList<Object>();  list.add("map1");  list.add("map2");  List mapValueList = redisTemplate.opsForHash().multiGet("hashValue",list);  System.out.println("通過multiGet(H key, Collection<HK> hashKeys)方法以集合的方式獲取變量中的值:"+mapValueList); 

匹配獲取鍵值對


?? 匹配獲取鍵值對,通過scan(H key, ScanOptions options)方法獲取匹配鍵值對,ScanOptions.NONE為獲取全部鍵對,ScanOptions.scanOptions().match(“map1”).build() 匹配獲取鍵位map1的鍵值對,不能模糊匹配。

示例:

    scan(H key, ScanOptions options)Cursor<Map.Entry<Object,Object>> cursor = redisTemplate.opsForHash().scan("hashValue",ScanOptions.scanOptions().match("map1").build());  //Cursor<Map.Entry<Object,Object>> cursor = redisTemplate.opsForHash().scan("hashValue",ScanOptions.NONE);  while (cursor.hasNext()){  Map.Entry<Object,Object> entry = cursor.next();  System.out.println("通過scan(H key, ScanOptions options)方法獲取匹配鍵值對:" + entry.getKey() + "---->" + entry.getValue());  }  

自增


以double值大小自增。


?? 通過increment(H key, HK hashKey, double delta)方法使變量中的鍵以值的大小進行自增長

示例:

increment(H key, HK hashKey, double delta) double hashIncDouble = redisTemplate.opsForHash().increment("hashInc","map1",3);  
System.out.println("通過increment(H key, HK hashKey, double delta)方法使變量中的鍵以值的大小進行自增長:" + hashIncDouble);  

以long值大小自增。


?? 通過increment(H key, HK hashKey, long delta)方法使變量中的鍵以值的大小進行自增長

示例:

increment(H key, HK hashKey, long delta)long hashIncLong = redisTemplate.opsForHash().increment("hashInc","map2",6);  
System.out.println("通過increment(H key, HK hashKey, long delta)方法使變量中的鍵以值的大小進行自增長:" + hashIncLong);  

修改刪除


修改哈希數據中的某個屬性值


?? 修改Redis中的哈希表中某個屬性的值,可以使用opsForHash()方法獲取哈希操作對象,然后調用put()方法。

示例:

public void updateHashDataValue(String key, String field, Object newValue) {redisTemplate.opsForHash().put(key, field, newValue);
}

刪除哈希數據中的某個屬性值


?? 從Redis中的哈希表中刪除某個屬性的值,可以使用opsForHash()方法獲取哈希操作對象,然后調用delete()方法。

示例:

public void deleteHashDataValue(String key, String field) {redisTemplate.opsForHash().delete(key, field);
}

刪除哈希表


?? 要刪除Redis中的整個哈希表,可以使用delete()方法。示例:

public void deleteHashTable(String key) {redisTemplate.delete(key);delete(H key, Object... hashKeys)刪除變量中的鍵值對,可以傳入多個參數,刪除多個鍵值對。redisTemplate.opsForHash().delete("hashValue","map1","map2");  map = redisTemplate.opsForHash().entries("hashValue");  System.out.println("通過delete(H key, Object... hashKeys)方法刪除變量中的鍵值對后剩余的:" + map); 
}

在這里插入圖片描述

  如果喜歡的話,歡迎 🤞關注 👍點贊 💬評論 🤝收藏  🙌一起討論你的支持就是我??創作的動力!					  💞💞💞

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

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

相關文章

IDEA中表明或者字段找不到時報紅

問題 idea 中mysql的sql語句報紅&#xff0c;無論表名還是表字段 原因 是由于sql方言導致的 當我們選擇某一個sql方言的時候&#xff0c;xml配置會按照指定規則校驗sql是否規范&#xff0c;并給出提示 解決方案 取消sql方言&#xff0c;設置sql方言為None。設置完重啟idea既…

CSS Grid布局入門:從零開始創建一個網格系統

CSS Grid布局入門&#xff1a;從零開始創建一個網格系統 引言 在響應式設計日益重要的今天&#xff0c;CSS Grid布局系統是前端開發中的一次革新。它使得創建復雜、靈活的布局變得簡單而直觀。本教程將通過分步驟的方式&#xff0c;讓你從零開始掌握CSS Grid&#xff0c;并在…

STM32上模擬CH340芯片的功能 (一)

#虛擬串口模擬CH340# 代碼gitee地址&#xff1a;STM32F103_CH340: 用STM32模擬ch340USB串口的功能 一、思路 1. 確定通信接口&#xff1a;CH340是一款USB轉串口芯片&#xff0c;因此您需要選擇STM32上的某個USB接口來實現USB通信。通常情況下&#xff0c;STM32系列芯片都有內…

Halcon聯合winform顯示以及處理

在窗口中添加窗體和按鈕&#xff0c;并在解決方案資源管理器中調加了導入Halcon導出的.cs文件&#xff0c;運行出現下圖的問題&#xff1a; 問題1&#xff1a;CS0017 程序定義了多個入口點。使用/main(指定包含入口點的類型&#xff09;進行編譯。 解決方案1.&#xff1a; 右…

SAP UI5 walkthrough step3 Controls

在上一步&#xff0c;我們是直接用index.html 中的body 里面的DIVision去輸出 hello world&#xff0c; 在這個章節&#xff0c;我們將用SAP UI5 的標準控件 sap/m/Text 首先&#xff0c;我們去修改 webapp/index.html <!DOCTYPE html> <html> <head><…

jenkins搭建文檔

jenkins搭建文檔 簡介一、安裝運行環境1、安裝JDK環境1&#xff09;查詢自帶的JDK2&#xff09;卸載自帶的JDK3&#xff09;創建java文件夾并將jdk上傳到該文件夾4&#xff09;解壓5&#xff09;配置環境變量6&#xff09;配置生效7&#xff09;驗證是否成功 2、安裝maven環境1…

哪些設備可以隔離沖突域哪些可以隔離廣播域,哪些設備什么都無法隔離

在計算機網絡中&#xff0c;有兩個概念與網絡隔離相關&#xff1a;沖突域和廣播域。沖突域表示一個物理網絡中共享相同帶寬的設備集合&#xff0c;而廣播域是指網絡中一個廣播消息&#xff08;如ARP請求&#xff09;傳播的范圍。以下是一些設備和技術&#xff0c;它們對沖突域和…

使用Docker在Debian上構建GRBL模擬器鏡像:簡明步驟和操作指南

概述編譯編寫 Dockerfile構建鏡像運行測試其他 概述 本文將詳細介紹如何在Debian系統上通過Docker構建GRBL模擬器鏡像&#xff0c;以便進行數控機床的仿真測試。GRBL是一種開源的控制系統&#xff0c;用于控制三軸CNC機床、激光雕刻、激光切割&#xff0c;而在Docker容器中運…

DouyinAPI接口開發系列丨商品詳情數據丨視頻詳情數據

電商API就是各大電商平臺提供給開發者訪問平臺數據的接口。目前&#xff0c;主流電商平臺如淘寶、天貓、京東、蘇寧等都有自己的API。 二、電商API的應用價值 1.直接對接原始數據源&#xff0c;數據提取更加準確和完整。 2.查詢速度更快&#xff0c;可以快速響應用戶請求實現…

nodejs發起http或https請求

前言&#xff1a;使用node內置模塊http、https http請求 const express require(express) const http require(http)const app express()const loginConfig (token) > {return {hostname: api.test.com,port: 80,path: /test?access_token${token},method: GET} }app.…

LeetCode968. Binary Tree Cameras

文章目錄 一、題目二、題解 一、題目 You are given the root of a binary tree. We install cameras on the tree nodes where each camera at a node can monitor its parent, itself, and its immediate children. Return the minimum number of cameras needed to monito…

Kubernetes(K8s)數據存儲-09

數據存儲 在前面已經提到&#xff0c;容器的生命周期可能很短&#xff0c;會被頻繁地創建和銷毀。那么容器在銷毀時&#xff0c;保存在容器中的數據也會被清除。這種結果對用戶來說&#xff0c;在某些情況下是不樂意看到的。為了持久化保存容器的數據&#xff0c;kubernetes引…

【圖像拼接】論文精讀:Rectangling panoramic images via warping

第一次來請先看這篇文章:【圖像拼接(Image Stitching)】關于【圖像拼接論文精讀】專欄的相關說明,包含專欄使用說明、創新思路分享等(不定期更新) 圖像拼接系列相關論文精讀 Seam Carving for Content-Aware Image ResizingAs-Rigid-As-Possible Shape ManipulationAdap…

Qt基礎-組件的添加、刪除或更新

本文介紹如何在Qt中組件的添加、刪除或更新。 概述 有時安裝完qt后發現當前的組件需要進一步調整,這時就需要進一步操作安裝的文件。 QT的組件管理軟件并沒有在開始菜單或者桌面添加快捷方式(5.9版本),也沒有在代碼編輯界面設置相關的選項,藏的比較深。 操作步驟 找到…

vue使用甘特圖dhtmlxgantt + gantt.addTaskLayer

效果圖&#xff1a; 甘特圖 官網地址 gantt安裝與使用 vue版---部分功能收費 安裝gantt 或 引入文件 npm install dhtmlx-gantt -save或import gantt from "/public/static/dhtmlxgantt/dhtmlxgantt.js"; import "/public/static/dhtmlxgantt/locale/local…

校驗數據是否重疊(各種操作符>,<,>=,<=,or,and)

最近接到一個需求&#xff0c;其中部分功能涉及到數據的重疊校驗&#xff0c;并且錄入的數據需要包含各種操作符。如果只通過java代碼來查詢并進行循環判斷的話&#xff0c;判斷情況會很復雜&#xff0c;幸好有同事的幫忙提供了一個用sql查詢重疊部分的方法&#xff0c;現在分享…

如何給Linux硬盤分區?

在Windows操作系統中&#xff0c;磁盤分區是將物理地址分開&#xff0c;再在分區上建立目錄。Linux正好相反&#xff0c;是先有目錄&#xff0c;再將物理地址映射到目錄中。在Linux操作系統中&#xff0c;所有路徑都是從根目錄開始的。那么如何給Linux硬盤分區呢&#xff1f; L…

Python列表list數組array用法實例解析

Python列表(list)/數組(array)用法實例解析 在Python中&#xff0c;列表(List)和數組(Array)都是常用的數據類型&#xff0c;它們都可以用于存儲多個元素。本文將詳細講解Python中列表(List)和數組(Array)的使用方法&#xff0c;包括創建、訪問、添加、刪除等操作。 創建列表…

java第三十一課

ISBN 編號&#xff1a;字符串 商品模塊中&#xff1a;增刪改查是最基本的操作。 查詢&#xff1a;復雜查詢&#xff08;與多表有關系&#xff09; 訂單&#xff0c;訂單詳情兩個表 訂單&#xff08;增刪改查&#xff09;&#xff0c; 訂單詳情&#xff08;增刪改查&#xff09;…