Redis 常用五大數據類型

1、Redis 關鍵字(Key)

  • keys * 查看當前庫所有key
  • exists [key] 判斷某個key是否存在
  • type [key] 查看當前key的數據類型
  • del [key] 刪除指定的key數據
  • unlink [key] 根據value選擇非阻塞刪除,僅將keys從keyspace元數據中刪除,真正的刪除會在后續異步操作
  • expire [key] [time] 給指定key設置過期時間,單位秒
  • ttl [key] 查看當前key還有多久過期, -1表示永不過期,-2表示已過期
  • select [dbid] 切換數據庫
  • dbsize 查看當前數據庫的key的數量
  • flushdb 清空當前數據庫
  • flushall 清空全部數據庫

2、Redis 字符串string

2.1 簡介

  • String是Redis最基本的類型,一個key對應一個value。
  • String類型是二進制安全的。意味著Redis的string可以包含任何數據。比如jpg圖片或者序列化的對象。
  • String類型是Redis最基本的數據類型,一個Redis中字符串value最多可以是512M。

2.2 常用命令

2.2.1 set <key> <value> 添加鍵值對

添加鍵值對

  • NX:當數據庫中key不存在時,可以將key-value添加數據庫
  • XX:當數據庫中key存在時,可以將key-value添加數據庫,與NX參數互斥
  • EX:key的超時秒數
  • PX:key的超時毫秒數,與EX互斥

2.2.2 get <key> 查詢對應鍵值

獲取key

2.2.3 append <key> <value> 將給定的 <value> 追加到原值的末尾

追加

2.2.4 strlen <key>獲得值的長度

在這里插入圖片描述

2.2.5 setnx <key> <value>只有在 key 不存在時 設置 key 的值

在這里插入圖片描述

2.2.6 incr <key> 將 key 中儲存的數字值增1,只能對數字值操作,如果為空,新增值為1

在這里插入圖片描述

2.2.7 decr <key> 將 key 中儲存的數字值減1,只能對數字值操作,如果為空,新增值為-1

在這里插入圖片描述

2.2.8 incrby / decrby <key> <步長>將 key 中儲存的數字值增減。自定義步長。

在這里插入圖片描述
在這里插入圖片描述

2.2.9 mset <key1> <value1> <key2> <value2> …

同時設置一個或多個 key-value對

在這里插入圖片描述

2.2.10 mget <key1> <key2> <key3> …

同時獲取一個或多個 value
在這里插入圖片描述

2.2.11 msetnx <key1> <value1> <key2> <value2> …

同時設置一個或多個 key-value 對,當且僅當所有給定 key 都不存在。
在這里插入圖片描述
原子性,有一個失敗則都失敗

2.2.12 getrange <key> <起始位置> <結束位置>

獲得值的范圍,類似獲取字串

在這里插入圖片描述

2.2.13 setrange <key> <起始位置> <value>

用 <value> 覆寫<key>所儲存的字符串值,從<起始位置>開始(索引從0開始)。
在這里插入圖片描述

2.2.14 setex <key> <過期時間> <value>

設置鍵值的同時,設置過期時間,單位秒。
在這里插入圖片描述

2.2.15 getset <key> <value>

以新換舊,設置了新值同時獲得舊值。
在這里插入圖片描述

2.3 數據結構

String的數據結構為簡單動態字符串(Simple Dynamic String,縮寫SDS)。是可以修改的字符串,采用預分配冗余空間的方式來減少內存的頻繁分配。
在這里插入圖片描述
如圖中所示,內部為當前字符串實際分配的空間capacity一般要高于實際字符串長度len。當字符串長度小于1M時,擴容都是加倍現有的空間,如果超過1M,擴容時一次只會多擴1M的空間。需要注意的是字符串最大長度為512M。

3、Redis 列表 List

3.1 簡介

  • 單鍵多值
  • Redis 列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。
  • 它的底層實際是個雙向鏈表,對兩端的操作性能很高,通過索引下標操作中間的節點性能會較差。
    在這里插入圖片描述

3.2 常用命令

3.2.1 lpush/rpush <key> <value1> <value2> <value3> …

從左邊/右邊插入一個或多個值。
在這里插入圖片描述
在這里插入圖片描述

3.2.2 lpop/rpop <key>

從左邊/右邊吐出一個值。值在鍵在,值光鍵亡。
在這里插入圖片描述
在這里插入圖片描述

3.2.3 rpoplpush <key1> <key2>

從<key1>列表右邊吐出一個值,插到<key2>列表左邊。
在這里插入圖片描述

3.2.4 lrange <key> <start> <stop>

按照索引下標獲得元素(從左到右)
在這里插入圖片描述
lrange mylist 0 -1 ; 0左邊第一個,-1右邊第一個,(0-1表示獲取所有)

3.2.5 lindex <key> <index>

按照索引下標獲得元素(從左到右)
在這里插入圖片描述

3.2.6 llen <key>

獲得列表長度
在這里插入圖片描述

3.2.7 linsert <key> before <value> <newvalue>

在<value>的后面插入<newvalue>插入值
在這里插入圖片描述

3.2.8 lrem <key> <n> <value>

從左邊刪除n個value(從左到右)
在這里插入圖片描述

3.2.9 lset <key> <index> <value>

將列表key下標為index的值替換成value
在這里插入圖片描述

3.3 數據結構

  • List的數據結構為快速鏈表quickList。
  • 首先在列表元素較少的情況下會使用一塊連續的內存存儲,這個結構是ziplist,也即是壓縮列表。
  • 它將所有的元素緊挨著一起存儲,分配的是一塊連續的內存。
  • 當數據量比較多的時候才會改成quicklist。
  • 因為普通的鏈表需要的附加指針空間太大,會比較浪費空間。比如這個列表里存的只是int類型的數據,結構上還需要兩個額外的指針prev和next。
    在這里插入圖片描述
    Redis將鏈表和ziplist結合起來組成了quicklist。也就是將多個ziplist使用雙向指針串起來使用。這樣既滿足了快速的插入刪除性能,又不會出現太大的空間冗余。

4、Redis 集合Set

4.1 簡介

Redis set對外提供的功能與list類似是一個列表的功能,特殊之處在于set是可以自動去重的,當你需要存儲一個列表數據,又不希望出現重復數據時,set是一個很好的選擇,并且set提供了判斷某個成員是否在一個set集合內的重要接口,這個也是list所不能提供的。

Redis的Set是string類型的無序集合。它底層其實是一個value為null的hash表,所以添加,刪除,查找的復雜度都是O(1)。

4.2 常用命令

4.2.1 sadd <key> <value1> <value2> …

將一個或多個 member 元素加入到集合 key 中,已經存在的 member 元素將被忽略
在這里插入圖片描述

4.2.2 smembers <key>

取出該集合的所有值。
在這里插入圖片描述

4.2.3 sismember <key> <value>

判斷集合<key>是否為含有該<value>值,有1,沒有0
在這里插入圖片描述

4.2.4 scard <key>

返回該集合的元素個數。
在這里插入圖片描述

4.2.5 srem <key> <value1> <value2> …

刪除集合中的某個元素。
在這里插入圖片描述

4.2.6 spop <key>

隨機從該集合中吐出一個值。
在這里插入圖片描述

4.2.7 srandmember <key> <n>

隨機從該集合中取出n個值。不會從集合中刪除 。
在這里插入圖片描述

4.2.8 smove <source> <destination> <value>

把集合中一個值從一個集合移動到另一個集合
在這里插入圖片描述

4.2.9 sinter <key1> <key2>

返回兩個集合的交集元素。
在這里插入圖片描述

4.2.10 sunion <key1> <key2>

返回兩個集合的并集元素。
在這里插入圖片描述

4.2.11 sdiff <key1> <key2>

返回兩個集合的差集元素(key1中的,不包含key2中的)
在這里插入圖片描述

4.3 數據結構

Set數據結構是dict字典,字典是用哈希表實現的。

5、Redis 哈希Hash

5.1 簡介

  • Redis hash 是一個鍵值對集合。
  • Redis hash是一個string類型的field和value的映射表,hash特別適合用于存儲對象。

用戶ID為查找的key,存儲的value用戶對象包含姓名,年齡,生日等信息,如果用普通的key/value結構來存儲
主要有以下2種存儲方式:
在這里插入圖片描述
每次修改用戶的某個屬性需要,先反序列化改好后再序列化回去。開銷較大。

在這里插入圖片描述
用戶ID數據冗余

在這里插入圖片描述
Redis Hash通過 key(用戶ID) + field(屬性標簽) 就可以操作對應屬性數據了,既不需要重復存儲數據,也不會帶來序列化和并發修改控制的問題。

5.2 常用命令

5.2.1 hset <key> <field> <value>

給<key>集合中的 <field> 鍵賦值<value>
在這里插入圖片描述

5.2.2 hget <key1> <field>

從<key1>集合<field>取出 value
在這里插入圖片描述

5.2.3 hmset <key1> <field1> <value1> <field2> <value2>…

批量設置hash的值
在這里插入圖片描述

5.2.4 hexists <key1> <field>

查看哈希表 key 中,給定域 field 是否存在。
在這里插入圖片描述

5.2.5 hkeys <key>

列出該hash集合的所有field
在這里插入圖片描述

5.2.6 hvals <key>

列出該hash集合的所有value
在這里插入圖片描述

5.2.7 hincrby <key> <field> <increment>

為哈希表 key 中的域 field 的值加上增量 1 -1
在這里插入圖片描述

5.2.8 hsetnx <key> <field> <value>

將哈希表 key 中的域 field 的值設置為 value ,當且僅當域 field 不存在 .
在這里插入圖片描述

5.3 數據結構

Hash類型對應的數據結構是兩種:ziplist(壓縮列表),hashtable(哈希表)。當field-value長度較短且個數較少時,使用ziplist,否則使用hashtable。

6、Redis 有序集合Zset(sorted set)

6.1 簡介

  • Redis有序集合zset與普通集合set非常相似,是一個沒有重復元素的字符串集合。
  • 不同之處是有序集合的每個成員都關聯了一個評分(score),這個評分(score)被用來按照從最低分到最高分的方式排序集合中的成員。集合的成員是唯一的,但是評分可以是重復了 。
  • 因為元素是有序的, 所以你也可以很快的根據評分(score)或者次序(position)來獲取一個范圍的元素。
  • 訪問有序集合的中間元素也是非常快的,因此你能夠使用有序集合作為一個沒有重復成員的智能列表。

6.2 常用命令

6.2.1 zadd <key> <score1> <member1> <score2> <member2>…

將一個或多個 member 元素及其 score 值加入到有序集 key 當中。
在這里插入圖片描述

6.2.2 zrange <key> <start> <stop> [WITHSCORES]

返回有序集 key 中,下標在<start> <stop>之間的元素
帶WITHSCORES,可以讓分數一起和值返回到結果集。
在這里插入圖片描述

6.2.3 zrangebyscore key min max [withscores] [limit offset count]

返回有序集 key 中,所有 score 值介于 min 和 max 之間(包括等于 min 或 max )的成員。有序集成員按 score 值遞增(從小到大)次序排列。
在這里插入圖片描述

6.2.4 zrevrangebyscore key max min [withscores] [limit offset count]

同上,改為從大到小排列。
在這里插入圖片描述

6.2.5 zincrby <key> <increment> <value>

為元素的score加上增量 increment
在這里插入圖片描述

6.2.6 zrem <key> <value>

刪除該集合下,指定值的元素
在這里插入圖片描述

6.2.7 zcount <key> <min> <max>

統計該集合,分數區間內的元素個數
在這里插入圖片描述

6.2.8 zrank <key> <value>

返回該值在集合中的排名,從0開始。
在這里插入圖片描述

6.3 數據結構

zset底層使用了兩個數據結構
(1)hash,hash的作用就是關聯元素value和權重score,保障元素value的唯一性,可以通過元素value找到相應的score值。
(2)跳躍表,跳躍表的目的在于給元素value排序,根據score的范圍獲取元素列表。

6.3.1 跳躍表

6.3.1.1 簡介

有序集合在生活中比較常見,例如根據成績對學生排名,根據得分對玩家排名等。對于有序集合的底層實現,可以用數組、平衡樹、鏈表等。數組不便元素的插入、刪除;平衡樹或紅黑樹雖然效率高但結構復雜;鏈表查詢需要遍歷所有效率低。Redis采用的是跳躍表。跳躍表效率堪比紅黑樹,實現遠比紅黑樹簡單。

6.3.1.2 示例

對比有序鏈表和跳躍表,從鏈表中查詢出51

(1) 有序鏈表
在這里插入圖片描述
要查找值為51的元素,需要從第一個元素開始依次查找、比較才能找到。共需要6次比較。

(2) 跳躍表
在這里插入圖片描述
從第2層開始,1節點比51節點小,向后比較。
21節點比51節點小,繼續向后比較,后面就是NULL了,所以從21節點向下到第1層
在第1層,41節點比51節點小,繼續向后,61節點比51節點大,所以從41向下
在第0層,51節點為要查找的節點,節點被找到,共查找4次。

從此可以看出跳躍表比有序鏈表效率要高

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

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

相關文章

大語言模型(LLM)專業術語匯總

1. 訓練與部署 1.1 預訓練 專業&#xff1a;在海量無標注文本&#xff08;如Common Crawl、Wikipedia&#xff09;上通過自監督學習訓練基礎語言模型&#xff0c;學習通用語言表征&#xff08;如GPT-3訓練數據達45TB&#xff09;。通俗&#xff1a;AI的“通識教育階段”&…

【Java Swing 圖形界面編程】JList 列表組件 ① ( JList 組件簡介 | 核心作用 | 關鍵特性 | 基礎用法示例 )

文章目錄 一、JList 組件簡介1、JList 概念簡介2、JList 核心作用3、JList 關鍵特性 二、JList 組件基礎用法示例1、使用 String 數組構建列表項2、使用 Vector 集合構建列表項3、使用 DefaultListModel 構建列表項 一、JList 組件簡介 1、JList 概念簡介 基本概念 : JList 組件…

【小技巧】Python+PyCharm IDE 配置解釋器出錯,環境配置不完整或不兼容。(小智AI、MCP、聚合數據、實時新聞查詢、NBA賽事查詢)

報錯信息如下&#xff1a; [unsupported] Python 3.1 (mcp-calculator-main) (3) C:\Users(xsshu\AppData\Local\Programs\Python\Python313\python.exe [unsupported] Python 3.1 C:\Users\xsshu\AppData\Local\Programs\Python\Python311\python.exe 這條輸出顯示了兩個 Pyth…

Ragflow 前后端登錄邏輯

前端登錄邏輯 路由配置&#xff1a; /login 路由指向 /pages/login 組件。登錄表單使用 Ant Design 的 Form, Input, 和 Button 組件。 登錄表單處理&#xff1a; 使用 useLogin鉤子來處理登錄請求。密碼通過 RSA 加密后再發送到服務器。成功登錄后導航至 /knowledge 頁面。 …

基于圖神經網絡的ALS候選藥物預測模型設計與實現

基于圖神經網絡的ALS候選藥物預測模型設計與實現 一、任務背景與意義 肌萎縮側索硬化癥(ALS)是一種致命的神經退行性疾病,目前尚無有效治愈方法。傳統藥物發現流程耗時長、成本高,而人工智能技術為加速藥物發現提供了新途徑。本文設計并實現了一個基于圖神經網絡(GNN)的…

運維打鐵: 數據加密與備份恢復策略制定

文章目錄 思維導圖一、數據加密1. 加密算法選擇AES 加密示例&#xff08;Python&#xff09;RSA 加密示例&#xff08;Python&#xff09; 2. 密鑰管理3. 加密范圍 二、數據備份1. 備份類型全量備份增量備份差異備份 2. 備份頻率3. 備份存儲位置 三、數據恢復1. 恢復測試2. 恢復…

AIbase MCP服務庫上線:集成服務器、客戶端、案例教程等服務

在當今數字化時代&#xff0c;人工智能技術正以前所未有的速度發展&#xff0c;深刻地改變著我們的生活和工作方式。而要充分發揮AI的強大能力&#xff0c;離不開高效的工具和服務支持。今天&#xff0c;就讓我們來了解一下一個專注于MCP&#xff08;Model Context Protocol&am…

QGIS+CesiumIon

前言 QGIS 3.44中&#xff0c;新增了3D 場景新增地球視圖模式&#xff0c;通過Cesium ion插件&#xff0c;支持谷歌全球傾斜模型的加載顯示。 目錄 1 CesiumIon插件安裝 2 加載谷歌全球傾斜模型 1、CesiumIon插件安裝 點擊菜單【Plugins】->【Manage and Install Plugins】…

TEXT Introduction

我們是誰 美國計算機奧林匹克競賽通過培訓、競賽和國際比賽來促進大學前的計算機學習。 數個教練將會組織、領導、陪伴代表美國參加國際性奧林匹克競賽的學生。 你可以在 USACO 官網了解更多。 USACO 的目標 USACO 的具體目標包括&#xff1a; 訓練美國的隊伍并且在下一屆奧…

Fluent許可服務器設置教程

Fluent作為一款廣泛使用的流體動力學模擬軟件&#xff0c;其高效的許可管理系統是確保順暢運行的關鍵。為了幫助您更好地掌握Fluent許可服務器的設置方法&#xff0c;本文將為您提供一份詳細的設置教程&#xff0c;讓您輕松配置&#xff0c;高效運行Fluent軟件。 一、Fluent許可…

vue3中實現高德地圖POI搜索(附源碼)

引言 上一篇文章詳細講解了vue3中實現高德地圖地址搜索自動提示&#xff08;附源碼&#xff09;&#x1f517;&#xff0c;本文將重點介紹POI搜索功能的實現。 1. 功能介紹 POI(Point of Interest) 搜索用于查找特定位置或區域內的興趣點&#xff0c;如餐館、商場、景點等。…

機器學習在計算機視覺中的應用

引言 計算機視覺&#xff08;Computer Vision&#xff09;是人工智能的重要分支&#xff0c;旨在讓計算機像人類一樣“看懂”圖像和視頻。近年來&#xff0c;隨著深度學習&#xff08;Deep Learning&#xff09;的快速發展&#xff0c;計算機視覺在多個領域取得了突破性進展。…

新手向:從零開始Node.js超詳細安裝、配置與使用指南

什么是Node.js&#xff1f; 簡單來說&#xff1a; Node.js 是一個在服務器端運行 JavaScript 的環境。 以前JavaScript只能做網頁特效&#xff0c;現在用它就能開發網站后臺、命令行工具甚至桌面應用&#xff01; 第一步&#xff1a;安裝Node.js&#xff08;多系統詳解&#x…

VR全景平臺的概念和用途

VR全景平臺&#xff1a;沉浸式體驗篇章 在數字化飛速發展的今天&#xff0c;VR全景平臺作為新興的技術應用平臺&#xff0c;逐漸走進我們的日常生活。那么&#xff0c;什么是VR全景平臺&#xff1f;眾趣科技是否有涉足這一領域&#xff1f;眾趣科技VR全景平臺又具備哪些獨特的…

深入解析外觀模式(Facade Pattern):簡化復雜系統的優雅設計

深入解析外觀模式&#xff08;Facade Pattern&#xff09;&#xff1a;簡化復雜系統的優雅設計 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 總有一行代碼&#xff0c;能點亮萬千星辰。 &#x1f50d; 在技術的宇宙中&#xff0c;我愿做永不停歇…

2.2.1 配置Linux審計日志

文章目錄 一、試題及考試說明二、操作步驟1. 啟動 Auditd 服務并設置其開機自啟2. 創建一個規則來監控/etc/test/auditd_test 文件上的所有寫入操作&#xff0c;并給這些審計記錄加上標簽file_access3. 設置審計日志保存在/etc/test/audit/audit.log4. 設置審計日志的滾動機制&…

使用Puppeteer提取頁面內容的技巧

在現代的Web開發和爬蟲開發中&#xff0c;Puppeteer是一個非常強大的工具&#xff0c;它可以幫助我們自動化瀏覽器操作&#xff0c;提取頁面內容。本文將從初階到高階&#xff0c;詳細介紹如何使用Puppeteer提取頁面內容的各種技巧&#xff0c;特別關注多層類關系選擇器的使用。…

SQL server 獲取表中所有行的序號

在SQL Server中&#xff0c;要獲取某個表中的某一行所在的記錄總數&#xff0c;通常有幾種方法可以實現&#xff0c;具體使用哪種方法取決于你的具體需求。以下是幾種常見的方法&#xff1a; 1. 使用COUNT()函數結合子查詢 如果你想要知道某個特定行在表中的位置&#xff08;…

《CSDN 用戶視角:見證 AI 重構企業辦公,在智能協同、數據驅動下實現組織進化》

在數字化轉型的大潮洶涌而至的當下&#xff0c;人工智能&#xff08;AI&#xff09;宛如一場疾風驟雨&#xff0c;以前所未有的速度重塑著企業辦公的格局。從瑣碎流程的自動化&#xff0c;到智能決策的深度賦能&#xff0c;AI 技術正掀起一場對傳統工作模式的徹底顛覆&#xff…

PYQT實戰:天氣助手

應用采用了現代化的界面設計&#xff0c;包括圓角邊框、卡片式布局和響應式建議功能。 這個天氣應用可以作為學習PyQt5開發的實例&#xff0c;展示了GUI設計、定時更新、數據處理和用戶交互的實現方法 #!/usr/bin/env python # -*- coding: GBK -*- import sys import request…