【Redis】Redis鍵值存儲

大家好,我是白晨,一個不是很能熬夜,但是也想日更的人。如果喜歡這篇文章,點個贊👍,關注一下👀白晨吧!你的支持就是我最大的動力!💪💪💪

在這里插入圖片描述

文章目錄

  • Redis鍵值概述
    • 一、Redis數據類型概述
      • 常用數據類型
        • String
        • List
        • Hash
        • Set
        • Zset
      • 擴展數據類型
        • BitMap
        • HyperLogLog
        • GEO
        • BitField
        • Stream
    • 二、Redis鍵(key)操作
      • 常用操作及示例
        • keys *
        • exists key
        • type key
        • del key
        • unlink key
        • ttl key
        • expire key seconds
        • move key dbindex
        • select dbindex
        • dbsize
        • flushdb
        • flushall
      • 常用操作匯總
  • 總結

Redis鍵值概述


一、Redis數據類型概述


首先要強調一點:Redis是key value類型的數據庫,Redis所說的數據類型都是key value中的value的數據結構,key都是字符串。

常用數據類型

Redis中有經常使用的有五大數據類型,分別是——String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)

image-20240510193727202
String

String是redis最基本的類型,一個key對應一個value。

String類型是二進制安全的,意思是Redis的String可以包含任何數據,比如jpg圖片或者序列化的對象 。

String類型是Redis最基本的數據類型,一個Redis中字符串value最多可以是512M。

image-20240514151952654

List

Redis列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。

List中最多可以最多可以包含 2 32 ? 1 2^{32} - 1 232?1 個元素 (4294967295, 每個列表超過40億個元素)。

image-20240514152644796

Hash

Redis Hash 是一個 String 類型的 field(字段) 和 value(值) 的映射表,Hash 特別適合用于存儲對象。

Redis 中每個 Hash 可以存儲 2 32 ? 1 2^{32} - 1 232?1 鍵值對 (4294967295, 每個哈希結構可存儲40多億個元素)。

image-20240514153315227

Set

Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現重復的數據。

Redis 中Set集合是通過哈希表實現的(這里先這樣認為),所以添加,刪除,查找的復雜度都是 O(1)。

集合中最大的成員數為 2 32 ? 1 2^{32} - 1 232?1? (4294967295, 每個集合可存儲40多億個成員)。

image-20240514153617056

Zset

Redis Zset 和 Set 一樣也是String類型元素的集合,且不允許重復的成員

不同的是每個元素都會關聯一個double類型的分數,redis正是通過分數來為集合中的成員進行從小到大的排序

Zset的成員是唯一的,但分數(score)卻可以重復。

Zset集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是 O(1)。 集合中最大的成員數為 2 32 ? 1 2^{32} - 1 232?1

image-20240514153641446

擴展數據類型

隨著 Redis 版本的更新,后面又支持了五種數據類型: BitMap(2.2 版新增)、HyperLogLog(2.8.9 版本新增)、GEO(3.2 版新增)、BitField(3.2 版新增)、Stream(5.0 版新增)

BitMap

Redis中的BitMap不是一個獨立的數據類型,而是基于String類型實現的一種特殊的數據結構。BitMap主要用于存儲大量二進制位(0或1)的數據,這些位可以代表不同的狀態或標志。

BitMap,即位圖,是一串連續的二進制數組(0和1),可以通過偏移量(offset)定位元素。BitMap通過最小的單位bit來進行 0|1 的設置,表示某個元素的值或者狀態,時間復雜度為O (1)。由于bit是計算機中最小的單位,使用它進行儲存將非常節省空間,特別適合一些數據量大且使用二值統計的場景。

示例如下圖:

image-20240514165831743

Redis的BitMap實際上是利用String類型的最大容量(512 MB)存儲一個連續的二進制序列,其中每個字節的8位可以分別代表8個獨立的狀態。這意味著你可以用一個BitMap來跟蹤多達數百萬甚至數十億的狀態,只要狀態總數不超過,即大約 2 32 2^{32} 232

image-20240514165524982

HyperLogLog

HyperLogLog 是用來做基數統計的算法,HyperLogLog 的優點是,在輸入元素的數量或者體積非常非常大時,計算基數所需的空間總是固定且是很小的。

在 Redis 里面,每個 HyperLogLog 鍵只需要花費 12 KB 內存,就可以計算接近 2 64 2^{64} 264 個不同元素的基數。這和計算基數時,元素越多耗費內存就越多的集合形成鮮明對比。

但是,因為 HyperLogLog 只會根據輸入元素來計算基數,而不會儲存輸入元素本身,所以 HyperLogLog 不能像集合那樣,返回輸入的各個元素。

image-20240514170440732

GEO

Redis的GEO類型主要用于存儲地理位置信息,并對存儲的信息進行操作。GEO實際上是一種有序集合(zset),它的每個元素都包含三個屬性:經度(longitude)、緯度(latitude)和位置名稱(member)。通過這些屬性,我們可以在Redis中存儲地理位置的坐標,并對它們進行一些有用的操作。

image-20240514170802582

BitField

Redis的BITFIELD命令可以將一個Redis字符串看作是一個由二進制位組成的數組,并對這個數組中任意偏移進行訪問。BITFIELD命令的作用在于它能夠將很多小的整數儲存到一個長度較大的位圖中,又或者將一個非常龐大的鍵分割為多個較小的鍵來進行儲存,從而非常高效地使用內存,使得Redis能夠得到更多不同的應用,特別是在實時分析領域。

說白了就是通過BITFIELD命令我們可以一次性對多個比特位域進行操作。

image-20240514170821429

Stream

Redis Stream 主要用于消息隊列(MQ,Message Queue),Redis 本身是有一個 Redis 發布訂閱 (pub/sub) 來實現消息隊列的功能,但它有個缺點就是消息無法持久化,如果出現網絡斷開、Redis 宕機等,消息就會被丟棄。

簡單來說發布訂閱 (pub/sub) 可以分發消息,但無法記錄歷史消息。

而 Redis Stream 提供了消息的持久化和主備復制功能,可以讓任何客戶端訪問任何時刻的數據,并且能記住每一個客戶端的訪問位置,還能保證消息不丟失

image-20240514170841776


二、Redis鍵(key)操作


常用操作及示例

keys *

查看當前庫的所有key

示例如下:

127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> keys *
1) "k2"
2) "k1"

exists key

檢查key是否存在,存在返回1,不存在返回0

示例如下:

127.0.0.1:6379> keys *
1) "k2"
2) "k1"
127.0.0.1:6379> EXISTS k1
(integer) 1
127.0.0.1:6379> EXISTS k3
(integer) 0

type key

返回key的類型

示例如下:

127.0.0.1:6379> type k1
string

del key

刪除一個或多個key

示例如下:

127.0.0.1:6379> keys *
1) "k2"
2) "k1"
127.0.0.1:6379> del k1
(integer) 1
127.0.0.1:6379> keys *
1) "k2"

unlink key

非阻塞刪除一個或多個key,并異步釋放和key相關的內存;返回1表示刪除成功,返回0表示刪除失敗

示例如下:

127.0.0.1:6379> keys *
1) "k1"
2) "k2"
127.0.0.1:6379> unlink k1 
(integer) 1
127.0.0.1:6379> keys *
1) "k2"

ttl key

獲取key的剩余過期時間,單位為秒;-1表示永不過期,-2表示已過期

示例如下:

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> ttl k1
(integer) -1
127.0.0.1:6379> expire k1 10 # 設置過期時間為10s
(integer) 1
127.0.0.1:6379> ttl k1
(integer) 5
127.0.0.1:6379> ttl k1
(integer) -2

expire key seconds

設置key的過期時間,單位為秒;返回1表示設置成功,返回0表示設置失敗

自Redis 7.0,expire支持如下參數:

  • NX:只有當key沒有設置過期時間,才會執行命令(已經設置過的,不能再設置)
  • XX :只有當key有過期時間,才會執行命令設置(沒有設置過的,不能設置)
  • GT :只有當新的過期時間大于當前過期時間時,才會設置(只會增加過期時間)
  • LT :只有當新的過期時間大于當前過期時間時,才會設置(只會減少過期時間)

可選參數這里先不做演示,有興趣的小伙伴可以自己去嘗試。

示例如下:

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> ttl k1
(integer) -1
127.0.0.1:6379> expire k1 10 # 設置過期時間為10s
(integer) 1 # 1表示成功,0表示失敗
127.0.0.1:6379> ttl k1
(integer) 5
127.0.0.1:6379> ttl k1
(integer) -2

Redis 的過期時間設置有四種形式:

  • EXPIRE 秒——設置指定的過期時間(秒),表示的是時間間隔。

  • PEXPIRE 毫秒——設置指定的過期時間,以毫秒為單位,表示的是時間間隔。

  • EXPIREAT 時間戳-秒——設置指定的 Key 過期的 Unix 時間,單位為秒,表示的是時間/時刻。

  • PEXPIREAT 時間戳-毫秒——設置指定的 Key 到期的 Unix 時間,以毫秒為單位,表示的是時間/時刻。


move key dbindex

將當前數據庫的key移動到給定的數據庫dbindex(0~15)。

Redis支持多個數據庫,每個數據庫都是一個獨立的鍵值空間,這意味著同一個Redis實例中的不同數據庫可以擁有相同的key。在某些情況下,我們可能需要將一個key從一個數據庫移動到另一個數據庫。

示例如下:

127.0.0.1:6379> keys *
1) "k1"
2) "k2"
127.0.0.1:6379> move k1 13
(integer) 1

select dbindex

切換到指定的數據庫dbindex(0~15),默認為0。

示例如下:

127.0.0.1:6379> select 13
OK
127.0.0.1:6379[13]> keys *
1) "k1"
127.0.0.1:6379[13]> select 0
OK
127.0.0.1:6379> keys *
1) "k2"

dbsize

返回當前數據庫的key的總數

示例如下:

127.0.0.1:6379> keys *
1) "k1"
2) "k2"
127.0.0.1:6379> dbsize
(integer) 2
127.0.0.1:6379> select 13
OK
127.0.0.1:6379[13]> keys *
1) "k1"
127.0.0.1:6379[13]> dbsize
(integer) 1

flushdb

刪除當前數據庫中的所有Key,不會影響其他庫

示例如下:

127.0.0.1:6379[13]> keys *
1) "k1"
127.0.0.1:6379[13]> flushdb
OK
127.0.0.1:6379[13]> keys *
(empty array)
127.0.0.1:6379[13]> select 0 # 不影響其他庫
OK
127.0.0.1:6379> keys *
1) "k1"
2) "k2"

flushall

刪除所有數據庫中的所有Key

示例如下:

127.0.0.1:6379[13]> select 0
OK
127.0.0.1:6379> keys *
1) "k1"
2) "k2"
127.0.0.1:6379> select 13
OK
127.0.0.1:6379[13]> keys *
1) "k3"
2) "k4"
127.0.0.1:6379[13]> flushall
OK
127.0.0.1:6379[13]> keys *
(empty array)
127.0.0.1:6379[13]> select 0 # 0和13號數據庫中的數據都被清除了
OK
127.0.0.1:6379> keys *
(empty array)

常用操作匯總

命令描述
keys *查看當前庫的所有key
exists key檢查key是否存在,存在返回1,不存在返回0
type key返回key的類型
del key刪除一個或多個key
unlink key刪除一個或多個key,并異步釋放和key相關的內存
ttl key獲取key的剩余過期時間,單位為秒;-1表示永不過期,-2表示已過期。
expire key seconds設置key的過期時間,單位為秒
move key dbindex將當前數據庫的key移動到給定的數據庫dbindex
select dbindex切換到指定的數據庫dbindex
dbsize返回當前數據庫的key的總數
flushdb刪除當前數據庫中的所有Key
flushall刪除所有數據庫中的所有Key

這里補充一點,Redis中的操作一般是1代表操作執行成功,0代表操作執行失敗。


總結


在本文中,我們對Redis的鍵值存儲進行了全面的概述和介紹。首先,我們了解了Redis的五大基本數據類型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)和Zset(有序集合),并探討了它們各自的特點和用法。隨后,我們介紹了五種擴展數據類型:BitMap、HyperLogLog、GEO、BitField和Stream,以及它們在實際應用中的用途和優勢。

在鍵(key)操作方面,我們涵蓋了常用的操作,包括查看、檢查、刪除、移動、切換數據庫以及設置過期時間等。這些操作豐富了我們對Redis數據管理的理解,使我們能夠更有效地管理和操作Redis中的數據。

通過本文的學習,讀者可以更加深入地了解Redis的鍵值存儲特性,為其在實際應用中的使用提供了更多的參考和指導。Redis作為一款高性能的鍵值存儲數據庫,在各種場景下都具有廣泛的應用前景,希望本文能為讀者在Redis的學習和應用上提供一些幫助和啟發。


如果講解有不對之處還請指正,我會盡快修改,多謝大家的包容。

如果大家喜歡這個系列,還請大家多多支持啦😋!

如果這篇文章有幫到你,還請給我一個大拇指 👍和小星星 ??支持一下白晨吧!喜歡白晨【Redis】系列的話,不如關注👀白晨,以便看到最新更新喲!!!

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

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

相關文章

深度解讀DreamFusion:一站式AI解決方案

DreamFusion是一款備受矚目的人工智能解決方案,它整合了多種AI技術,為用戶提供了一站式的解決方案。本文將全面解讀DreamFusion,探討其特點、功能和應用場景,助您深入了解這一創新工具。 1. 特點概述 DreamFusion具備以下顯著特…

前端面試題日常練-day08 【面試題】

題目 希望這些選擇題能夠幫助您進行前端面試的準備,答案在文末。 1. 在 JavaScript 中,以下哪個方法可以用于獲取數組的長度? A) length()B) size()C) count()D) push()2. 下列哪個 HTML 標簽用于創建無序列表中的列表項? A) &…

用wxPython和PyMuPDF將PNG圖像合并為PDF文件

在日常工作中,我們經常需要將多個圖像文件合并到一個PDF文檔中,以便于查看、共享或存檔。雖然現有的一些工具可以實現這一功能,但開發一個自定義的GUI工具可以更好地滿足特定需求,并提供更好的用戶體驗。 在本文中,我將介紹如何使用Python、wxPython和PyMuPDF庫創建一個簡單的…

基于SpringBoot設計模式之創建型設計模式·生成器模式

文章目錄 介紹開始架構圖樣例一定義生成器定義具體生成器(HTML格式、markdown格式)實體類HTML格式生成器MarkDown格式生成器 測試樣例 總結優點缺點 介紹 將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。 ??如…

flowable工作流設置審批人為指定角色+部門的實現方式

一、繪制流程圖頁面配置 1、指定固定審批角色組織的實現 如上圖紅框部分,需要修改此處為需求對應。比如此時紅框不支持指定某個部門下的指定角色這種組合判斷的審批人。則需要修改頁面變成選完角色同時也選擇上部門統一生成一個group標識。 修改完后,生…

股指期貨基差衡量的是什么?

在股指期貨市場中,基差、升水和貼水是三個關鍵的術語,這些基差衡量的是現貨市場的價格與期貨市場的價格之間的差異。 一、基差:現貨與期貨的價差 1. 定義:基差是指現貨價格與相應期貨合約價格之間的差額。計算方式是現貨價格減去…

深入了解MongoDB:利用$type操作符輕松操控數據類型

MongoDB的$type操作符用于檢索具有特定數據類型的字段。以下是有關$type操作符的詳細解釋、命令、示例、應用場景、注意事項和總結: $type操作符用于查詢具有特定數據類型的字段。它接受一個整數參數,該參數對應于MongoDB中的數據類型編號。可以使用$ty…

第4章 Redis,一站式高性能存儲方案【仿牛客網社區論壇項目】

第4章 Redis,一站式高性能存儲方案【仿牛客網社區論壇項目】 前言推薦項目總結第4章 Redis,一站式高性能存儲方案1. Redis入門2. Spring整合Redis3.點贊4.我收到的贊5.關注、取消關注6.關注列表、粉絲列表7.優化登錄模塊 最后 前言 2023-4-30 20:42:51 …

hadoop 安裝步驟

hadoop 是一個免費開源軟件, 可以安裝在window上,但是有些麻煩。 也可以安裝 在linux 上 hadoop 下載地址 :https://hadoop.apache.org/releases.html 安裝前的準備工作: 1.安裝jdk Apache Hadoop 與最新版本的JDK不兼容。建議下載Java SE D…

SFTPGO 整合minio AD群組 測試 |sftpgo with minio and ldap group test

SFTP-GO 研究 最近在測試sftpgo,發現中文的資料比較少,在企業中很多存儲開始支持S3,比如netapp 于是想嘗試把文件服務器換成sftpgoS3的存儲,sftp go和AD 群組的搭配測試比較少 自己測試了一把,覺得還是沒有server-u的A…

JVS物聯網、無憂企業文檔、規則引擎5.14功能新增說明

項目介紹 JVS是企業級數字化服務構建的基礎腳手架,主要解決企業信息化項目交付難、實施效率低、開發成本高的問題,采用微服務配置化的方式,提供了 低代碼數據分析物聯網的核心能力產品,并構建了協同辦公、企業常用的管理工具等&am…

ubuntu在當前路徑下打開Terminal

在 Ubuntu 20.04 中,nautilus-open-terminal 已經被 nautilus-extension-gnome-terminal 替代了。你可以嘗試安裝這個新的包。以下是在終端中執行的命令: sudo apt-get update sudo apt-get install nautilus-extension-gnome-terminal安裝完成后&#…

Java面向對象——抽象類

abstract修飾符可以用來修飾方法也可以修飾類,如果修飾方法,那么該方法就是抽象方法;如果修飾類,那么該類就是抽象類。 抽象類中可以沒有抽象方法,但是有抽象方法的類一定要聲明為抽象類。 抽象類,不能…

函數的遞歸調用

在調用一個函數的過程中又出現直接或間接地調用該函數本身,稱為函數的遞歸(recursive)調用。C和C允許函數的遞歸調用。例如: int f(int x) { int y,z; zf(y); //在調用函數 f 的過程中&…

云服務器修改端口通常涉及幾個步驟

云服務器修改端口通常涉及幾個步驟 遠程連接并登錄到Linux云服務器: 使用SSH工具(如PuTTY、SecureCRT等)遠程連接到云服務器。 輸入云服務器的IP地址、用戶名和密碼(或密鑰)進行登錄。 修改SSH配置文件&#xff1a…

Jmeter使用While控制器

1.前言 對于性能測試場景中,需要用”執行某個事物,直到一個條件停止“的概念時,While控制器控制器無疑是首選,但是在編寫腳本時,經常會出現推出循環異常,獲取參數異常等問題,下面總結兩種常用的…

如何將Excel表格中的圖片鏈接直接顯示成圖片?

在 Excel 中,你可以通過以下步驟將圖片鏈接轉換為直接顯示圖片: 1. **插入圖片鏈接**:首先,在 Excel 表格中插入圖片的鏈接。你可以在某個單元格中輸入圖片的鏈接地址,或者使用 Excel 的“插入圖片”功能插入鏈接。 2.…

從新手到高手,教你如何改造你的廣告思維方式!

想要廣告震撼人心又讓人長時間記住?答案肯定是“創意”二字。廣告創意,說白了就是腦洞大開,想法新穎。那些很流行的廣告,都是因為背后的想法特別、新穎。做廣告啊,就得不停地思考,創新思維是關鍵。 廣告思…

天銳綠盾 | 如何防止電腦內文件遭到泄露?

天銳綠盾是一款專為企業設計的數據防泄漏軟件系統,它通過一系列綜合性的安全措施來有效防止電腦內文件遭到泄露。 PC地址: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 以下是天銳綠盾防止文件泄露的主要功能和方法&a…