Redis --- 數據類型之列表 數據類型之hash

来源:https://www.cnblogs.com/sre-chan/archive/2023/04/17/17326456.html
-Advertisement-
Play Games

一、數據類型之列表 列表簡介 Redis的list是一個字元隊列,先進後出,一個key可以有多個值 列表操作 lpush key values [value ...] 將一個或多個值value插入到列表key的表頭,Key不存在,則創建key 127.0.0.1:6379> FLUSHALL OK ...


一、數據類型之列表

列表簡介

Redis的list是一個字元隊列,先進後出,一個key可以有多個值

列表操作

lpush key values [value ...]
將一個或多個值value插入到列表key的表頭,Key不存在,則創建key

127.0.0.1:6379> FLUSHALL
OK

# lpush命令,創建變數student,類型為列表類型,值為bob,tom,lucy,lili
127.0.0.1:6379> LPUSH student bob tom lucy lili
(integer) 4
127.0.0.1:6379> type student
list

# 將A和B存儲到列表student的表頭
127.0.0.1:6379> LPUSH student A B
(integer) 6

# lrange   key  start   stop		從列表中取值
# 從開始位置讀取key的值到stop結束
# 取出列表中的所有值,0 指第一個值,-1 指最後一個值
127.0.0.1:6379> LRANGE student 0 -1
1) "B"
2) "A"
3) "lili"
4) "lucy"
5) "tom"
6) "bob"

# 取出列表中的值,0 指第一個值,1 指第二個值
127.0.0.1:6379> LRANGE student 0 1
1) "B"
2) "A"

# 從後往前取出列表中的值,-2 指倒數第二個值,-1 指倒數第一個值
127.0.0.1:6379> LRANGE student -2 -1
1) "tom"
2) "bob"

# 從後往前取出列表中的值,2 指第三個值,4 指第五個值
127.0.0.1:6379> LRANGE student 2 4
1) "lili"
2) "lucy"
3) "tom"


# lpop  key移除並返回列表頭元素數據,key不存在則返回nil
# 取出列表中的所有值,0 指第一個值,-1 指最後一個值
127.0.0.1:6379> LRANGE student 0 -1
1) "B"
2) "A"
3) "lili"
4) "lucy"
5) "tom"
6) "bob"

# 刪除列表第一個值,返回被刪除的值
127.0.0.1:6379> LPOP student
"B"

127.0.0.1:6379> LRANGE student 0 -1
1) "A"
2) "lili"
3) "lucy"
4) "tom"
5) "bob"

127.0.0.1:6379> LPOP student
"A"

127.0.0.1:6379> LRANGE student 0 -1
1) "lili"
2) "lucy"
3) "tom"
4) "bob"

# llen   key	返回列表key的長度
# 統計列表中值的數量
127.0.0.1:6379> TYPE student
list
127.0.0.1:6379> LLEN student
(integer) 4

# 取出列表中的所有值,0 第一個,-1 最後一個
127.0.0.1:6379> LRANGE student 0 -1
1) "lili"
2) "lucy"
3) "tom"
4) "bob"


# lindex   key   index	返回列表中第 index 個值
# lindex 輸出列表中的某一個值
# lindex命令,輸出列表student中的第一個值
127.0.0.1:6379> TYPE student
list
127.0.0.1:6379> LRANGE student 0 -1
1) "lili"
2) "lucy"
3) "tom"
4) "bob"
127.0.0.1:6379> LINDEX student 0
"lili"
# lindex命令,輸出列表student中的倒數第一個值
127.0.0.1:6379> LINDEX student -1
"bob"

# lindex命令,輸出列表student中的倒數第二個值
127.0.0.1:6379> LINDEX student -2
"tom"

# lset   key  index  value	將key中index位置的值修改為value
# lset 修改列表中具體的某一個值
# 修改列表student的第一個值為 AAA
127.0.0.1:6379> LRANGE student 0 -1
1) "lili"
2) "lucy"
3) "tom"
4) "bob"
127.0.0.1:6379> LSET student 0 AAA
OK
127.0.0.1:6379> LRANGE student 0 -1
1) "AAA"
2) "lucy"
3) "tom"
4) "bob"


# 修改列表student的最後一個值為 CCC
127.0.0.1:6379> lset student -1  CCC
OK
127.0.0.1:6379> LRANGE student 0 -1
1) "AAA"
2) "lucy"
3) "tom"
4) "CCC"

# rpush 在列表的最後插入值
127.0.0.1:6379> LRANGE student 0 -1
1) "AAA"
2) "lucy"
3) "tom"
4) "CCC"

# 在列表student的最後插入值
127.0.0.1:6379> RPUSH student FFF ZZZ
(integer) 6
127.0.0.1:6379> LRANGE student 0 -1
1) "AAA"
2) "lucy"
3) "tom"
4) "CCC"
5) "FFF"
6) "ZZZ"


# lpush命令,在列表student的開頭插入值
127.0.0.1:6379> LPUSH student iii kkk
(integer) 8
127.0.0.1:6379> LRANGE student 0 -1
1) "kkk"
2) "iii"
3) "AAA"
4) "lucy"
5) "tom"
6) "CCC"
7) "FFF"
8) "ZZZ"

# rpop 每次都刪除列表最後的值
127.0.0.1:6379> LRANGE student 0 -1
1) "kkk"
2) "iii"
3) "AAA"
4) "lucy"
5) "tom"
6) "CCC"
7) "FFF"
8) "ZZZ"
127.0.0.1:6379> RPOP student
"ZZZ"
127.0.0.1:6379> LRANGE student 0 -1
1) "kkk"
2) "iii"
3) "AAA"
4) "lucy"
5) "tom"
6) "CCC"
7) "FFF"


# 刪除列表student的開頭的值,並返回被刪除的值
127.0.0.1:6379> LPOP student
"kkk"
127.0.0.1:6379> LRANGE student 0 -1
1) "iii"
2) "AAA"
3) "lucy"
4) "tom"
5) "CCC"
6) "FFF"

二、數據類型之hash

hash簡介

Redis hash
是一個string類型的 field(列) 和 value(值) 的映射表,一個key可對應多個field,一個field對應一個value,將一個對象存儲為 hash 類型,較於每個欄位都存儲成 string 類型更能節省記憶體

舉例說明,hash類型存儲數據比字元更節省空間

需要同時定義多個變數,存儲不同的信息 ,字元類型存儲書本的信息:
書名 xxxxxx
作者 xxxxxx
價格 xxxxxx
版本 xxxxxx
出版社 xxxxxx

只需定義一個變數,這個變數中可以存儲多個欄位,不同欄位存儲不同的值
hash類型存儲書本的信息:
書名 紅樓夢
作者 xxxxxx
價格 xxxxxx
版本 xxxxxx
出版社 xxxxxx

hash操作

# hset   key   field  value	將hash表中field 值設置為 value
# 創建變數site,第一個欄位為baidu, 欄位值為 www.baidu.com
127.0.0.1:6379> HSET site baidu www.baidu.com
(integer) 1
127.0.0.1:6379> TYPE site
hash


# hget   key  filed	獲取 hash 表中 field 的值
# hget命令,查看變數site中,第一個欄位baidu的值
127.0.0.1:6379> HGET site baidu
"www.baidu.com"

# hmset同時定義多個欄位
# 在變數site中,再添加一個欄位jd,欄位值為www.jd.com
127.0.0.1:6379> HMSET site jd www.jd.com
OK
# 在變數site中,同時添加多個欄位tmall, sina, jm
127.0.0.1:6379> hmset site tmall www.tmall.com sina www.sina.com  jm  www.jm.com
OK

# hmget 同時獲取多個hash類型的變數的值
127.0.0.1:6379> HMGET site jd baidu jm tmall sina
1) "www.jd.com"
2) "www.baidu.com"
3) "www.jm.com"
4) "www.tmall.com"
5) "www.sina.com"


# hkeys 獲取hash類型變數的所有欄位
127.0.0.1:6379> HKEYS site
1) "baidu"
2) "jd"
3) "tmall"
4) "sina"
5) "jm"

hvals 獲取hash類型變數的所有欄位對應的值
127.0.0.1:6379> HVALS site
1) "www.baidu.com"
2) "www.jd.com"
3) "www.tmall.com"
4) "www.sina.com"
5) "www.jm.com"


# hgetall 獲取hash類型變數的所有欄位和值
127.0.0.1:6379> HGETALL site
 1) "baidu"
 2) "www.baidu.com"
 3) "jd"
 4) "www.jd.com"
 5) "tmall"
 6) "www.tmall.com"
 7) "sina"
 8) "www.sina.com"
 9) "jm"
10) "www.jm.com"



# hdel 刪除hash類型變數的多個欄位
127.0.0.1:6379> HDEL site jd
(integer) 1
127.0.0.1:6379> HDEL site jm sina
(integer) 2

# hkeys命令,獲取hash類型變數的所有欄位, jm和sina欄位被刪除
127.0.0.1:6379> HKEYS site
1) "baidu"
2) "tmall"
作者:ChAn 出處:http://www.cnblogs.com/sre-chan/

-------------------------------------------

個性簽名:今天做了別人不想做的事,明天你就做得到別人做不到的事,嘗試你都不敢,你拿什麼贏!

如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,博主在此感謝!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 考點:文件的打開和讀取 打開文件的過程: 打開操作本質上是使用了open這個系統調用,參數如下圖所示。 操作系統通過文件的路徑在外存中找到了這個test.txt文件所在的目錄,繼續找該文件的目錄項(FCB),一個文件只有一個目錄項。然後將這個目錄項調到記憶體中,系統中有一個系統打開文件表,裡面存放的是 ...
  • 資源管理器右鍵添加打開cmd視窗指令 資源管理器空白處右鍵添加打開cmd視窗命令,直接打開cmd並切換到當前目錄 首先刪除該指令 添加該指令條目、名稱,然後添加具體的指令 此.reg文件必須以UTF-8-BOM編碼格式保存,否則無法設置中文名稱 Windows Registry Editor Ver ...
  • linux vi命令詳解 剛開始學著用linux,對vi命令不是很熟,在網上轉接了一篇。 vi編輯器是所有Unix及Linux系統下標準的編輯器,它的強大不遜色於任何最新的文本編輯器,這裡只是簡單地介紹一下它的用法和一小部分指 令。由於 對Unix及Linux系統的任何版本,vi編輯器是完全相同的, ...
  • GMT 和 UTC 時間有何區別?Unix 時間常式為何不處理閏秒?系統時區是如何設置的?哪些時間常式受夏時制影響?localtime 和 gmtime 是否共用內部存儲區?strftime 獲取第幾周使用的 %U/%V/%W 有何區別?linux date 和 mac date 語法有何區別?本文... ...
  • Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢出) ”問題如下: 一、報錯信息: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢出),如圖: 格式化後的報錯信息: { "timestamp": "2023-04-17 22: ...
  • **鎖屏面試題百日百刷,每個工作日堅持更新面試題。**請看到最後就能獲取你想要的, 接下來的是今日的面試題: 1.為什麼kafka可以實現高吞吐?單節點kafka的吞吐量也比其他消息隊列大,為什麼? Kafka是分散式消息系統,需要處理海量的消息,Kafka的設計是把所有的消息都寫入速度低容量大的硬 ...
  • 一、數據持久化之RDB 1、RDB介紹 Redis 資料庫文件,全稱 Redis DataBase,數據持久化方式之一,數據持久化預設方式,按照指定時間間隔,將記憶體中的數據及快照寫入硬碟 定義RDB文件名 dbfilename "dump.rdb" RDB指dump.rdb文件; redis數據每次 ...
  • Redis的Java客戶端 在Redis官網中提供了各種語言的客戶端,地址:Get started using Redis clients | Redis Redis的Java客戶端: 1.Jedis Jedis 的官方地址:redis/jedis: Redis Java client design ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...