Redis3:Redis數據結構與命令全解析

目錄

1、redis數據結構介紹

1.1命令學習方式

1.1.1命令行查詢

2、redis的通用命令

2.1查找常見的通用命令

2.2常見的通用命令:

3、String類型

3.1String類型的常見命令

3.2Key的層級格式

3.2.1Key的結構

4、Hash類型

4.1Hash類型

4.2Hash類型常見命令

5、List類型

5.1 List類型

5.2 List類型的常見命令

5.3List的用法

6、Set類型

6.1 Set類型

6.2Set的常見命令

6.2.1 對單個集合的操作命令

7、SortedSet類型

7.1 SortedSet類型

7.2 sortedset類型的常見命令


1、redis數據結構介紹

redis是一個key-value類型的數據庫,key一般是String類型。

但value的類型多種多樣:

前五種比較常見string、hash、list、set、sortedset

1.1命令學習方式

1.1.1命令行查詢

在redis中我們可以通過help來獲得命令提示

1.1.2官方文檔查詢方式

Commands | Docs

官網地址如上我們可以通過group進行命令篩選

2、redis的通用命令

通用命令是指部分數據類型都可以使用的命令

2.1查找常見的通用命令

fit by group選擇generic

2.2常見的通用命令:

  • keys:查看符合模板的所有key

通過help [command] 查看一個命令的具體用法

查詢所有的key

查詢所有以a開頭的key

keys命令支持通配符的使用,所以他在底層邏輯上是一個模糊查詢,而Redis又為單線程數據庫。所以不建議在生產環境設備上使用。

  • del:刪除某個key

刪除name鍵

批量刪除

  • EXISTS:判斷某個key是否存在

判斷name和age是否存在

  • EXPIRE:給某個key設置有效期,有效期到期時該key會被自動刪除

  • TTL:查看一個key的剩余有效期

我們可以通過TTL關鍵字去查看該鍵的剩余存活時間

當有效期變為-2時,表示該鍵被自動刪除(TTL為-1時表示該鍵永久有效)

3、String類型

String類型,即字符串類型,是Redis中最簡單的存儲類型

其value是字符串,但是字符串又可以分為三種:

  • string:普通字符串

  • int:整數類型,可以做自增自減操作

  • float:浮點類型,可以做自增自減操作

(不論那種類型,底層都是以字節數組形式存儲,只不過編碼方式不同。字節碼或者是直接轉為二進制。字符串類型的最大空間不能超過512M

3.1String類型的常見命令

  • SET:添加一個鍵值對,或者是修改一個已經存在的鍵值對

  • GET:根據key獲取Sting類型的value

  • MSET:批量添加多個Sting類型的鍵值對

  • MGET:根據多個key獲取多個Sting類型的value

  • INCR:讓一個整型key自增1

  • INCRBY:讓一個整型的key自增并確定步長(自減設置步長為負數即可=DECR)

  • INCRBYFLOAT:讓一個浮點型的數字進行自增長,但必須指定步長

注意!!這里的score最好介于-128~128之間,否則incrbyfloat會發生位數異常

  • SETNX:添加一個sting類型的鍵值對,前提是這個key,不存在,否則不執行

已有——不再新增(分布式鎖的實現)

沒有——新增(setnx==set .... nx)

  • SETEX:添加一個sting類型的鍵值對,并且指定有效期

(setex==set key value ex seconds)

3.2Key的層級格式

redis中沒有table的概念,我們應該如何區分不同類型的key呢?

例如:需要儲存用戶、商品信息到redis中,有一個用戶id是1,有一個商品的id也恰好是1.

3.2.1Key的結構

Redis允許有多個單詞形成層級結構,多個單詞之間用 “:” 隔開,格式如下:

項目名:業務名:類型:id
tang:user:1
tang:product:1

格式并不固定,可根據自己的需求刪除或添加詞條

如果Value是一個java對象,則可以將對象序列化為JSON字符串后儲存

實踐一下,我們把這幾個鍵存一下

打開圖形化界面,我們可以看到 :

這樣就實現了key的分級存儲

4、Hash類型

4.1Hash類型

hash類型,也叫散列,其value就是一個無序字典,類似于java中的hashmap結構。

String結構是將對象序列化為JSON格式的字符串后儲存,需要修改某個對象的某個字段時很不方便,要不覆蓋,要不刪除重寫。

在hash結構中value部分變為了 字段:值 的結構

這樣就可以獨立表示某個字段,修改某一個字段時對其他字段沒有任何影響,十分靈活

4.2Hash類型常見命令

  • HSET key feild value:添加或修改hash類型key的field的值

打開圖形化界面工具

修改(沒有添加或刪除字段,返回值就是0)

  • HGET key feild:獲取hash類型key的field的值

  • HMSET:批量添加多個hash類型key的field的值

注意!!官方文檔上說明Redis4.0.0版本后hmset已經被棄用,可以用HSET直接代替HMSET

  • HMGET:批量獲取多個hash類型key的field的值

  • HGETALL:獲取一個hash類型的key的所有field和value的值

可以理解為java中HashMap.entrySet

  • HKEYS:獲取一個hash類型的key的所有field

可以理解為java中HashMap.keySet

  • HVALS:獲取一個hash類型的key的所有values

可以理解為java中HashMap.keyValues

  • HINCRBY:讓一個hash類型的key的字段值自增長并確定步長

步長確定為負數就是負增長

  • HSETNX:添加一個hash類型的key的field的值,前提是這個field不存在,否則不添加

添加失敗,因為4已經有這個field了

5、List類型

5.1 List類型

Redis中的List類型與Java中的LinkedList類似,可以看作是一個雙向鏈表結構。既可以支持正向檢索也可以支持反向檢索

  • 有序

  • 元素可以重復

  • 插入和刪除速度快

  • 查詢速度一般(逐個遍歷去查詢)

List類型常用來存儲一個有序數據,例如:朋友圈點贊列表,評論列表等。

5.2 List類型的常見命令

  • LPUSH key element...:向列表左側插入一個或多個元素

L,R可以理解為隊首隊尾的區別

打開圖形化界面,我們觀察到,最先放入的在最下方(有點類似于棧的樣子,但他是隊列,上下都能取

  • LPOP key:移除并返回列表左側被移除的某幾個元素,沒有則返回nil

(3 2 1 1 2 3)

當list中沒有元素時,返回nil

  • RPUSH key element...:向列表右側插入一個或多個元素

與LPOP相反的,RPOP從下往上插入

  • RPOP key:移除并返回列表右側被移除的某幾個元素,沒有則返回nil

取到4

取到之后移除

  • LRANGE key star end:返回一段角標范圍內的所有元素

目前庫的樣子

開始編號為0

  • BLPOP和BRPOP:與LPOP和RPOP類似,只不過在沒有元素時指定等待時間,而不是返回nil

B代表阻塞Block,我們來實操一下這個阻塞的過程:

在這里我們開兩個窗口

由于沒有users2這個key,所以這個窗口會被阻塞在這個位置

我們在另一個對話框,向users2中放入元素

回到剛剛阻塞的窗口,我們發現他取到了,并且報告了用時

5.3List的用法

1)如何利用List結構去模擬一個棧?

棧:先進后出——入口出口在同一邊

LPUSH+LPOP

RPUSH+RPOP

2)如何利用List結構去模擬一個隊列?

隊列:先進先出——入口出口不在同一邊

LPUSH+RPOP

RPUSH+LPOP

3)如何利用List結構去模擬一個阻塞隊列?

入口出口不在同一邊+實現阻塞

LPUSH+BRPOP

RPUSH+BLPOP

6、Set類型

6.1 Set類型

Redis的Set結構和Java中的HashSet相似,可以看作是一個值為null的HashMap。因為也是一個Hash表,因此也具備以下特征:

  • 無序

  • 元素不可重復

  • 查找快

  • 支持交集,并集,差集

6.2Set的常見命令

6.2.1 對單個集合的操作命令

  • SADD key member ..:向set中添加一個或多個元素。

  • SREM key member ...:移除set中的指定元素

  • SCARD key:返回set中的元素個數

CARD(cardinal)

  • SISMEMBER key member:判斷一個元素是否在set中

  • SMEMBERS:獲取set中所有元素

我們會發現所得順序和我們存入的數據順序并不一致,這是因為set類型無序的特點

6.2.2對多個集合的操作命令

  • SINTER key1 key2 ...:求key1 key2的交集(共同好友)

  • SDIFF key1 key2 ...:求key1 key2的差集

key1 SDIFF key2

  • SUNION key1 key2 ...:求key1 key2的并集

注意重復元素只能出現一次

1)新建key:zs ls

2)計算張三的好友數量

3)計算張三和李四的共同好友

4)查詢是張三的好友但不是李四的好友

5)張三和李四一共有哪些好友

6)判斷李四是否是張三的好友

7)判斷張三是否是李四的好友

8)將李四從張三好友列表中移除

7、SortedSet類型

7.1 SortedSet類型

redis的sortedset類型是一個可排序的Set集合,與Java中的TreeSet有一些相似,但底層的數據結構差別很大。SortedSet中的每個元素都帶有一個score屬性,可以基于score屬性對元素進行排序,底層的實現是一個跳表加hash表。

  • 可排序

  • 元素不重復

  • 查詢速度快

經常被用作實現排行榜這樣的功能

7.2 sortedset類型的常見命令

這些排序默認是升序,如果想要降序則在需要的命令的Z的后面添加REV即可。

  • ZADD key score member:添加一個或多個元素到sortedset,如果已經存在進行更新

  • ZREM key member:刪除sortedset中的一個指定元素

  • ZSCORE key member:獲取sortedset中的一個指定元素的score值

  • ZRANK key member:獲取sortedset中指定元素的排名

  • ZCARD key:獲取sortedset中的元素個數

  • ZCOUNT key min max:統計score值在給定范圍內的所有元素個數

  • ZINCRBY key increment member:讓sortedset中的指定元素自增,步長為指定的increment值

  • ZRANGE key min max:按照score排序后,獲取指定排名范圍內的元素(max包括在內

  • ZRANGEBYSCORE key min max:按照score排序后,獲取指定score范圍內的元素

  • ZDIFF\ZINTER\ZUNION:求差集、交集、并集

1)將學生信息添加數據庫

2)刪除Tom同學

3)獲取Amy同學的分數

3)獲取Rose同學的排名

排名編號從0開始

4)查詢80分以下的同學數量

5)給Amy同學加2分

6)查出成績前三名的同學

7)返回80分以下的所有同學信息

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

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

相關文章

WebSocket 重連與心跳機制:打造堅如磐石的實時連接

在現代 Web 應用中,WebSocket 是實現實時通信的核心技術。但網絡環境復雜多變,如何確保連接穩定成為關鍵挑戰。本文將深入剖析 WebSocket 的重連與心跳機制,提供一套經過生產環境驗證的解決方案。 一、WebSocket 基礎封裝 首先我們實現一個具…

【代碼】Matlab鳥瞰圖函數

用matlab把圖像轉化為鳥瞰圖 代碼 clc clear close all I imread(road.png); figure(1) imshow(I) bevSensor load(birdsEyeConfig); birdsEyeImage transformImage(bevSensor.birdsEyeConfig,I); figure(2) imshow(birdsEyeImage)效果

網絡編程-java

Socket 套接字 Socket套接字,是由系統提供用于網絡通信的技術,是基于 TCP/IP 協議的網絡通信的基本單元。基于 Socket 套接字的網絡程序開發就是網絡編程。 應用層會調用操作系統提供的一組 api ,這組 api 就是 socket api(傳輸層…

CPU架構、三級緩存以及內存優化屏障

目錄 一、三級緩存和內存布局 二、CPU架構 (1)SMP對稱對處理器架構 (2)NUMA非統一內存架構 三、RCU機制在內核中的體現 四、內存優化屏障 (1)編譯器、CPU優化 (2)優化的問題…

HarmonyOS從入門到精通:動畫設計與實現之九 - 實用動畫案例詳解(下)

HarmonyOS動畫開發實戰(九):實用動畫案例詳解(下) 在上篇中,我們圍繞加載動畫、點贊反饋、下拉刷新等核心交互場景,探討了如何通過動畫提升用戶體驗。本篇將聚焦界面元素動效與特殊場景動畫&…

Node.js 聊天內容加密解密實戰教程(含緩存密鑰優化)

一、技術方案說明 本方案采用以下技術組合: 加密算法:AES-256-GCM(認證加密,防止篡改)密鑰派生:PBKDF2(10萬次迭代)緩存機制:內存緩存 定期輪換安全特性:隨機…

信息安全基礎專業面試知識點(上:密碼學與軟件安全)

密碼學DES加密流程56比特長度的密鑰K, 分組長度64比特,密文64比特初始置換 (IP):將輸入的64位明文塊進行置換,打亂其順序。分成左右兩半: 將置換后的64位數據分成左右兩部分,每部分32位。16輪迭代加密: 這是DES的核心&#xff0c…

Windows Server 2025 黃金dMSA攻擊漏洞:跨域攻擊與持久化訪問風險分析

網絡安全研究人員近日披露了Windows Server 2025中委托管理服務賬戶(dMSA,Delegated Managed Service Accounts)存在的"關鍵設計缺陷"。據Semperis公司向The Hacker News提供的報告顯示:"該漏洞可能導致高危害攻擊…

解鎖數據分析:從基礎概念到核心指標的全面指南

在數字化時代,數據已成為驅動業務決策的核心力量。無論是運營一款 APP、管理一家便利店,還是優化在線教育課程,理解數據的本質與關鍵指標都至關重要。本文將從數據的基本概念出發,拆解運營全流程中的核心指標,并分享數…

DiffPy-CMI詳細安裝教程

本章教程,主要記錄安裝DiffPy-CMI的具體安裝步驟。 DiffPy-CMI 是一個復雜建模框架,是高度靈活的 Python 模塊庫,專為晶體、納米材料及非晶態材料的納米結構建模而設計。 注意:DiffPy-CMI只支持在Linux和Mac上安裝,Windows上是不支持的。 一、準備工作 需要準備一臺Linux或…

中國各省市縣坡度數據(Tif/Excel)

數據簡介 昨天我們分享了中國120m精度的DEM數據(見前文),今天我們根據該數據計算中國的坡度數據,并根據中國省市縣行政區劃數據將其統計各省市縣坡度的最大、最小以及平均值,方便大家研究使用。 基于中國120米精度DEM生成的坡度數據&#xff…

09-three.js Materials

Three.js Journey — Learn WebGL with Three.jsThe ultimate Three.js course whether you are a beginner or a more advanced developerhttps://threejs-journey.com/?cp3 MeshBasicMaterial 添加3個網格體: /*** Object*/ // MashBasicMaterial const mater…

Netty介紹和基本代碼演示

什么是Netty?Netty是一個基于Java NIO的異步事件驅動的網絡應用框架,主要用于快速開發高性能、高可靠性的網絡服務器和客戶端程序。它簡化了網絡編程的復雜性,提供了豐富的協議支持,被廣泛應用于各種高性能網絡應用中。為什么選擇…

[BrowserOS] Nxtscape瀏覽器核心 | 瀏覽器狀態管理 | 瀏覽器交互層

第三章:Nxtscape瀏覽器核心 歡迎回來! 在前兩章中,我們了解了名為專用AI代理的專家團隊及其管理者AI代理協調器,它們協同解析需求并規劃執行步驟。 但這些代理與協調器實際運行的平臺是什么?答案正是本章的核心——…

時序數據庫處理的時序數據獨特特性解析

時序數據(Time-Series Data)作為大數據時代增長最快的數據類型之一,正在物聯網、金融科技、工業監控等領域產生爆炸式增長。與傳統數據相比,時序數據具有一系列獨特特性,這些特性直接影響了時序數據庫(Time…

uniapp各端通過webview實現互相通信

目前網上,包括官方文檔針對uniapp的webview的內容都是基于vue2的,此文章基于vue3的composition API方式網頁對網頁 由于uniapp中的webview只支持引入h5頁面,不支持互相通信,所以要條件編譯,用iframe導入頁面&#xf…

【Vue】tailwindcss + ant-design-vue + vue-cropper 圖片裁剪功能(解決遇到的坑)

1.安裝 vue-cropper pnpm add vue-cropper1.1.12.使用 vue-cropper <template><div class"user-info-head" click"editCropper()"><img :src"options.img" title"點擊上傳頭像" class"img-circle" /><…

【Java】【力扣】101.對稱二叉樹

思路遞歸大問題&#xff1a;對比 左 右 是否對稱參數 左和右todo 先湊合看代碼/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* …

前端 oidc-client 靜默刷新一直提示:Error: Frame window timed out 問題分析與解決方案

引言 在現代前端開發中&#xff0c;OAuth 2.0 和 OpenID Connect (OIDC) 協議已成為身份驗證和授權的標準解決方案。oidc-client-js 是一個流行的 JavaScript 庫&#xff0c;用于在前端應用中實現 OIDC 協議。其中&#xff0c;靜默刷新&#xff08;Silent Renew&#xff09;是一…

DAY02:【ML 第一彈】KNN算法

一、算法簡介 1.1 算法思想 如果一個樣本在特征空間中的 k 個最相似的樣本中的大多數屬于某一個類別&#xff0c;則該樣本也屬于這個類別。 1.2 樣本相似性 樣本都是屬于一個任務數據集的&#xff0c;樣本距離越近則越相似。 二維平面上點的歐氏距離 二維平面上點 a(x1,y1)a(x_…