【Redis】Redis基本命令(1)

KEYS

返回所有滿足樣式(pattern)的key。

  • KEY * 返回所有key,不簡易使用
    性能問題:當 Redis 存儲百萬級鍵時,會消耗大量 CPU 和內存資源,Redis 是單線程模型,KEYS * 執行期間會阻塞其他所有命令(包括讀寫操作),導致服務短暫不可用。
    生產環境風險:
    阻塞導致請求堆積
    客戶端超時重試
    最終導致 Redis 崩潰
    返回大量鍵名時可能撐爆客戶端內存

  • yid?i 其中 ?匹配任意一個字符,比如 yidaiyideiyidii
    在這里插入圖片描述

  • yid*i 其中 * 匹配任意一串字符,比如 yidaiyideeeeeiyidi
    在這里插入圖片描述

  • yi[ae]ai 其中 [ae] 代表匹配 a 或者 e 任意一個字符,比如 yidaiyidei
    在這里插入圖片描述

  • yi[^e]ai 其中 [^e] 代表匹配除了 e 的任意一個字符,比如 yidai 但不匹配 yidei
    在這里插入圖片描述

  • yi[a-e]ai 其中 [a-e] 代表匹配 a 到 e 任意一個字符,比如 yidaiyideiyidbi
    用法:KEYS pattern
    在這里插入圖片描述
    命令有效版本:1.0.0 以后
    時間復雜度為O(N)
    返回值為匹配 pattern 的所有 key

EXIST

判斷某個key是否存在
語法:EXISTS key [key ...]
可以一次查找一個或者多個key

 127.0.0.1:6379> EXISTS yidai 
(integer) 1
127.0.0.1:6379> EXISTS yidai yidi hello
(integer) 3

時間復雜度為O(1)
返回值為 key 存在的個數

DEL

刪除指定的 key
可以一次刪除一個或者多個key
語法:DEL key [key ...]

127.0.0.1:6379> DEL yidai yidi 
(integer) 2

返回值:刪除key的個數
時間復雜度:O(1)

EXPIRE

為指定的 key 添加秒級的過期時間(Time To Live TTL)
語法:EXPIRE key seconds
時間復雜度:O(1)
返回值:成功時返回1,失敗返回0

127.0.0.1:6379> EXPIRE hello 10
(integer) 1

TTL

獲取指定 key 的過期時間,秒級。
語法:TTL key
時間復雜度:O(1)
返回值:剩余過期時間。-1 表示沒有關聯過期時間,-2 表示 key 不存在。

127.0.0.1:6379> TTL yidei
(integer) -1

TYPE

Redis TYPE 命令返回值詳解

返回值對應的數據結構示例或說明
string字符串類型SET name "Alice"TYPE name 返回 string
list列表類型LPUSH fruits "apple"TYPE fruits 返回 list
hash哈希類型HSET user:1 name "Bob"TYPE user:1 返回 hash
set集合類型SADD tags "red"TYPE tags 返回 set
zset有序集合類型ZADD leaderboard 100 "player1"TYPE leaderboard 返回 zset
stream流類型(Redis 5.0+)XADD mystream * field1 "value1"TYPE mystream 返回 stream
nonekey 不存在TYPE non_existent_key 返回 none

語法??:TYPE key_name
??時間復雜度??:O(1)
??特殊場景??:

  • 已過期的 key 仍會返回原類型,直到 redis 清除
  • 空數據結構(如空列表)仍返回對應類型
  • 模塊擴展類型可能返回自定義類型名
127.0.0.1:6379> SET greeting "Hello"
OK
127.0.0.1:6379> TYPE greeting
string
127.0.0.1:6379> TYPE missing_key
none

redis 的5種數據類型內部編碼

Redis 數據結構內部編碼對照表

數據結構內部編碼說明
stringraw普通字符串編碼(長度大于44字節時使用)
int整數值編碼(當字符串可表示為64位整數時)
embstr嵌入式字符串編碼(長度≤44字節時使用,內存連續分配)
hashhashtable標準哈希表實現(元素較多時使用)
ziplist壓縮列表實現(元素較少且值較小時默認使用)
listlinkedlist雙向鏈表實現(Redis 3.2前使用)
ziplist壓縮列表實現(Redis 3.2前默認)
quicklist快速列表實現(Redis 3.2+默認,由ziplist組成的雙向鏈表)
sethashtable標準哈希表實現
intset整數集合實現(當元素均為整數且數量較少時使用)
zsetskiplist跳表+哈希表組合實現(元素較多時使用)
ziplist壓縮列表實現(元素較少且值較小時默認使用)

關鍵說明:

  1. 編碼轉換閾值(可通過配置文件調整):
    # redis.conf 示例配置
    hash-max-ziplist-entries 512  # hash元素超過512時轉hashtable
    hash-max-ziplist-value 64      # hash字段值超過64字節時轉hashtable

object encoding

可以查看數據結構內部編碼

127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> lpush mylist a b c
(integer) 3
127.0.0.1:6379> object encoding hello
"embstr"
127.0.0.1:6379> object encoding mylist
"quicklist"

Redis 這樣設計有兩個好處:
內存效率??:針對不同數據特征選擇最優編碼
??性能優化??:平衡讀寫速度與存儲開銷
??彈性擴展??:自動適應數據規模變化

String字符串

字符串類型是 Redis 最基礎的數據類型,關于字符串需要特別注意:
1)?先 Redis 中所有的鍵的類型都是字符串類型,?且其他?種數據結構也都是在字符串類似基礎上構建的,例如列表和集合的元素類型是字符串類型
2)字符串類型的值實際可以是字符串,包含?般格式的字符串或者類似 JSON、XML 格式的字符串;數字,可以是整型或者浮點型;甚?是?進制流數據,例如圖片、?頻、視頻等。不過?個字符串的最大值不能超過 512 MB。

注意:由于 Redis 內部存儲字符串完全是按照?進制流的形式保存的,所以 Redis 是不處理字符集編碼問題的,客?端傳?的命令中使?的是什么字符集編碼,就存儲什么字符集編碼。

SET

將 string 類型的 value 設置到 key 中。如果 key 之前存在,則覆蓋,?論原來的數據類型是什么。之前關于此 key 的 TTL 也全部失效。
語法:SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
時間復雜度:O(1)
選項:
SET 命令?持多種選項來影響它的?為:

  • EX seconds?使?秒作為單位設置 key 的過期時間。
  • PX milliseconds?使?毫秒作為單位設置 key 的過期時間。
  • NX ?只在 key 不存在時才進行設置,即如果 key 之前已經存在,設置不執行。
  • XX ?只在 key 存在時才進行設置,即如果 key 之前不存在,設置不執行。
    返回值:
  • 如果設置成功,返回 OK。
  • 如果由于 SET 指定了 NX 或者 XX 但條件不滿足,SET 不會執行,并返回 (nil)。
127.0.0.1:6379> SET hello 1  EX 10 
OK
127.0.0.1:6379> ttl hello
(integer) 8
127.0.0.1:6379> set hello 2 px 1000
OK
127.0.0.1:6379> pttl hello
(integer) -2
127.0.0.1:6379> set hello 2 px 1000
OK
127.0.0.1:6379> pttl hello
(integer) 490
127.0.0.1:6379> set hello 111 NX
OK
127.0.0.1:6379> set hello 111 NX
(nil)
127.0.0.1:6379> set yidai 123 EX 10 XX
(nil)
127.0.0.1:6379> set yidai 123 EX 10 NX
OK
127.0.0.1:6379> set yidai 123 EX 10 XX
OK

SETNX

設置 key-value 但只允許在 key 之前不存在的情況下
語法:SETNX key value
時間復雜度:O(1)
返回值:1 表示設置成功。0 表示沒有設置。

127.0.0.1:6379> SETNX YIDAI 123
(integer) 1
127.0.0.1:6379> SETNX YIDAI 123
(integer) 0

GET

獲取 key 對應的 value。
語法:GET key
時間復雜度:O(1)
返回值:key 對應的 value,或者 nil 當 key 不存在。如果 value 的數據類型不是 string,會報錯。

127.0.0.1:6379> lpush yidai 1 2 3
(integer) 3
127.0.0.1:6379> TYPE yidai
list
127.0.0.1:6379> GET yidai
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> set key 1
OK
127.0.0.1:6379> get key
"1"

MGET

?次性獲取多個 key 的值。如果對應的 key 不存在或者對應的數據類型不是 string,返回 nil

語法:MGET key [key ...]
時間復雜度:O(K),K是key的個數
返回值:對應value的列表

127.0.0.1:6379> set hello 1
OK
127.0.0.1:6379> set yidai 2
OK
127.0.0.1:6379> mget hello yidai
1) "1"
2) "2"

MSET

?次性設置多個 key 的值。
語法:MSET key value [key value ...]
時間復雜度:O(K),K是key的個數
返回值:OK

127.0.0.1:6379> MSET key1 1 key2 2
OK

多次GET 和 MGET的區別

在這里插入圖片描述
其中 MGET 有效減少了網絡通信的時間,一次查找完了多個key值,而 get
需要多次查詢,增加了網絡通信時間消耗,降低了效率
注意:用MGET也需要注意查詢建的個數,不能過于龐大,否則可能導致命令執行時間過長,導致Redis阻塞

計數命令

INCR

將 key 對應的 string 表?的數字加?。如果 key 不存在,則視為 key 對應的 value 是 0。如果 key 對應的 string 不是?個整型或者范圍超過了 64 位有符號整型,則報錯。
語法:INCR key
時間復雜度:O(1)
返回值:integer 類型的加完后的數值

127.0.0.1:6379> EXISTS LL
(integer) 0
127.0.0.1:6379> INCR LL
(integer) 1
127.0.0.1:6379> INCR LL
(integer) 2
127.0.0.1:6379> SET KK 10
OK
127.0.0.1:6379> INCR KK
(integer) 11
127.0.0.1:6379> SET NUM 239204940933333333333333333335333333333333
OK
127.0.0.1:6379> INCR NUM
(error) ERR value is not an integer or out of range
127.0.0.1:6379> SET str dsdaf
OK
127.0.0.1:6379> INCR str
(error) ERR value is not an integer or out of range

INCRBY

將 key 對應的 string 表示的數字加上對應的值。如果 key 不存在,則視為 key 對應的 value 是 0。如果 key 對應的 string 不是?個整型或者范圍超過了 64 位有符號整型,則報錯。
語法:INCRBY key decrement
時間復雜度:O(1)
返回值:integer 類型的加完后的數值

127.0.0.1:6379> EXISTS ky
(integer) 0
127.0.0.1:6379> INCRBY ky 2
(integer) 2
127.0.0.1:6379> INCRBY by -1
(integer) -1

DECR

將 key 對應的 string 表?的數字減?。如果 key 不存在,則視為 key 對應的 value 是 0。如果 key 對應的 string 不是?個整型或者范圍超過了 64 位有符號整型,則報錯
語法:DECR key
時間復雜度:O(1)
返回值:integer 類型的減完后的數值

127.0.0.1:6379> EXISTS ui
(integer) 0
127.0.0.1:6379> DECR ui
(integer) -1

DECRBY

將 key 對應的 string 表示的數字減上對應的值。如果 key 不存在,則視為 key 對應的 value 是 0。如果 key 對應的 string 不是?個整型或者范圍超過了 64 位有符號整型,則報錯。
語法:DECRBY key decrement
時間復雜度:O(1)
返回值:integer 類型的加完后的數值

127.0.0.1:6379> EXISTS we 
(integer) 0
127.0.0.1:6379> DECRBY we -2
(integer) 2

INCRBYFLOAT

將 key 對應的 string 表?的浮點數加上對應的值。如果對應的值是負數,則視為減去對應的值。如果key 不存在,則視為 key 對應的 value 是 0。如果 key 對應的不是 string,或者不是?個浮點數,則報錯。允許采?科學計數法表示浮點數。
語法:INCRBYFLOAT key increment
時間復雜度:O(1)
返回值:加/減完后的數值

127.0.0.1:6379> EXISTS float
(integer) 0
127.0.0.1:6379> INCRBY float -1
(integer) -1
127.0.0.1:6379> INCRBYFLOAT float -1
"-2"
127.0.0.1:6379> INCRBYFLOAT float -0.5
"-2.5"
127.0.0.1:6379> INCRBYFLOAT float 10.5
"8"
127.0.0.1:6379> INCRBYFLOAT float 1e5
"100008"

APPEND

如果 key 已經存在并且是?個 string,命令會將 value 追加到原有 string 的后邊。如果 key 不存在,則效果等同于 SET 命令。
語法:APPEND KEY VALUE
時間復雜度:O(1)
返回值:追加完成之后 string 的?度。

127.0.0.1:6379> EXISTS ss
(integer) 0
127.0.0.1:6379> APPEND ss 1
(integer) 1
127.0.0.1:6379> GET ss
"1"
127.0.0.1:6379> APPEND ss sdad
(integer) 5
127.0.0.1:6379> GET ss
"1sdad"

GETRANGE

返回 key 對應的 string 的子串,由 start 和 end 確定(左閉右閉)。可以使用負數表示倒數。-1 代表倒數第?個字符,-2 代表倒數第?個,其他的與此類似。超過范圍的偏移量會根據 string 的長度調整成正確的值
語法:GETRANGE key start end
時間復雜度:O(N)
返回值:string類型的子串

127.0.0.1:6379> SET yidai "i am yidai"
OK
127.0.0.1:6379> GETRANGE yidayi 0 4
""
127.0.0.1:6379> GETRANGE yidai 0 4
"i am "
127.0.0.1:6379> GETRANGE yidai 0 7
"i am yid"
127.0.0.1:6379> GETRANGE yidai 0 9
"i am yidai"

SETRANGE

覆蓋字符串的?部分,從指定的偏移開始
語法:SETRANGE key offset value
時間復雜度:O(N)
返回值:替換后 string類型的長度

127.0.0.1:6379> SET key "hello world"
OK
127.0.0.1:6379> SETRANGE key 6 redis
(integer) 11
127.0.0.1:6379> GET key
"hello redis"

STRLEN

獲取 key 對應的 string 的?度。當 key 存放的類似不是 string 時,報錯。
語法:STRLEN key
時間復雜度:O(1)
返回值:string 的長度。或者當 key 不存在時,返回 0。

127.0.0.1:6379> SET yidai yidai
OK
127.0.0.1:6379> STRLEN yidia
(integer) 0
127.0.0.1:6379> STRLEN yidai
(integer) 5

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

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

相關文章

C#通用常見面試題-精心整理

以下是優化后的版本,在原有內容基礎上補充了應用場景,其他結構保持不變: 上位機面試題解答(技術詳解+示例) C#-IOC框架 1. 值類型和引用類型的本質區別 解釋 值類型:存儲在棧中,直接保存數據值(如 int, struct)。引用類型:存儲在堆中,變量保存對象地址(如 class,…

K8S節點出現Evicted狀態“被驅逐”

在Kubernetes集群中,Pod狀態為“被驅逐(evicted)”表示Pod無法在當前節點上繼續運行,已被集群從節點上移除。 問題分析: 節點磁盤空間不足 ,使用df -h查看磁盤使用情況 可以看到根目錄 / 已100%滿&#x…

[密碼學基礎]國密算法深度解析:中國密碼標準的自主化之路

國密算法深度解析:中國密碼標準的自主化之路 國密算法(SM系列算法)是中國自主研發的密碼技術標準體系,旨在打破國際密碼技術壟斷,保障國家信息安全。本文將從技術原理、應用場景和生態發展三個維度,全面解…

Linux 網絡基礎(三) TCP/IP協議

一、TCP 與 IP 的關系 IP 層的核心作用是定位主機,具有將數據從主機 A 發送到主機 B 的能力,但是能力并不能保證一定能夠做到,所以這時就需要 TCP 起作用了,TCP 可以通過超時重傳、擁塞控制等策略來保證數據能夠發送到 B 主機。 所…

基于 Vue 的Tiptap 富文本編輯器使用指南

目錄 🧰 技術棧 📦 所需依賴 📁 文件結構 🧱 編輯器組件實現(components/Editor.vue) ? 常用操作指令 🧠 小貼士 🧩 Tiptap 擴展功能使用說明(含快捷鍵與命令&am…

統計圖表ECharts

統計某個時間段,觀看人數 ①、數據表 ②、業務代碼 RestController RequstMapping(value"/admin/vod/videoVisitor") CrossOrigin public class VideoVisitorController{Autowriedprivate VideoVisitorService videoVisitorService;//課程統計的接口…

ubuntu 安裝 redis server

ubuntu 安裝 redis server sudo apt update sudo apt install redis-server The following NEW packages will be installed:libhiredis0.14 libjemalloc2 liblua5.1-0 lua-bitop lua-cjson redis-server redis-toolssudo systemctl start redis-server sudo systemctl ena…

【白雪講堂】[特殊字符]內容戰略地圖|GEO優化框架下的內容全景布局

📍內容戰略地圖|GEO優化框架下的內容全景布局 1?? 頂層目標:GEO優化戰略 目標關鍵詞: 被AI理解(AEO) 被AI優先推薦(GEO) 在關鍵場景中被AI復讀引用 2?? 三大引擎邏輯&#x…

NVIDIA 自動駕駛技術見解

前言 參與 NVIDIA自動駕駛開發者實驗室 活動,以及解讀了 NVIDIA 安全報告 自動駕駛 白皮書,本文是我的一些思考和見解。自動駕駛技術的目標是為了改善道理安全、減少交通堵塞,重塑更安全、高效、包容的交通生態。在這一領域,NVI…

OpenCV day6

函數內容接上文:OpenCV day4-CSDN博客 , OpenCV day5-CSDN博客 目錄 平滑(模糊) 25.cv2.blur(): 26.cv2.boxFilter(): 27.cv2.GaussianBlur(): 28.cv2.medianBlur(): 29.cv2.bilateralFilter(): 銳…

Function calling, 模態上下文協議(MCP),多步能力協議(MCP) 和 A2A的區別

背景闡述 本文大部分內容都是基于openAI 的 chatGPT自動生成。作者進行了一些細微的調整。 LLM 帶來了很多思維的活躍,基于LLM,產生了很多應用,很多應用也激活了LLM的新的功能。 Function calling,MCP(Modal Contex…

火山RTC 5 轉推CDN 布局合成規則

實時音視頻房間&#xff0c;轉推CDN&#xff0c;文檔&#xff1a; 轉推直播--實時音視頻-火山引擎 一、轉推CDN 0、前提 * 在調用該接口前&#xff0c;你需要在[控制臺](https://console.volcengine.com/rtc/workplaceRTC)開啟轉推直播功能。<br> * 調…

力扣面試150題--插入區間和用最少數量的箭引爆氣球

Day 28 題目描述 思路 初次思路&#xff1a;借鑒一下昨天題解的思路&#xff0c;將插入的區間與區間數組作比較&#xff0c;插入到升序的數組中&#xff0c;其他的和&#xff08;合并區間&#xff09;做法一樣。 注意需要特殊處理一下情況&#xff0c;插入區間比數組中最后一…

【Java面試筆記:基礎】4.強引用、軟引用、弱引用、幻象引用有什么區別?

1. 引用類型及其特點 強引用(Strong Reference): 定義:最常見的引用類型,通過new關鍵字直接創建。回收條件:只要強引用存在,對象不會被GC回收。示例:Object obj = new Object(); // 強引用特點: 強引用是導致內存泄漏的常見原因(如未及時置為null)。手動斷開引用:…

ycsb性能測試的優缺點

YCSB&#xff08;Yahoo Cloud Serving Benchmark&#xff09;是一個開源的性能測試框架&#xff0c;用于評估分布式系統的讀寫性能。它具有以下優點和缺點&#xff1a; 優點&#xff1a; 簡單易用&#xff1a;YCSB提供了簡單的API和配置文件&#xff0c;使得性能測試非常容易…

基于SpringBoot的校園賽事直播管理系統-項目分享

基于SpringBoot的校園賽事直播管理系統-項目分享 項目介紹項目摘要管理員功能圖用戶功能圖項目預覽首頁總覽個人中心禮物管理主播管理 最后 項目介紹 使用者&#xff1a;管理員、用戶 開發技術&#xff1a;MySQLJavaSpringBootVue 項目摘要 隨著互聯網和移動技術的持續進步&…

Nginx?中間件的解析

目錄 一、Nginx的核心架構解析 二、Nginx的典型應用場景 三、Nginx的配置優化實踐 四、Nginx的常見缺陷與漏洞 一、Nginx的核心架構解析 ??事件驅動與非阻塞IO模型?? Nginx采用基于epoll/kq等系統調用的事件驅動機制&#xff0c;通過異步非阻塞方式處理請求&#xff0c;…

杭州小紅書代運營公司-品融電商:全域增長策略的實踐者

杭州小紅書代運營公司-品融電商&#xff1a;全域增長策略的實踐者 在品牌競爭日趨激烈的電商領域&#xff0c;杭州品融電商作為一家專注于品牌化全域運營的服務商&#xff0c;憑借其“效品合一”方法論與行業領先的小紅書代運營能力&#xff0c;已成為眾多品牌實現市場突圍的重…

【映客直播-注冊/登錄安全分析報告】

前言 由于網站注冊入口容易被黑客攻擊&#xff0c;存在如下安全問題&#xff1a; 暴力破解密碼&#xff0c;造成用戶信息泄露短信盜刷的安全問題&#xff0c;影響業務及導致用戶投訴帶來經濟損失&#xff0c;尤其是后付費客戶&#xff0c;風險巨大&#xff0c;造成虧損無底洞…

Android audio_policy_configuration.xml加載流程

目錄 一、audio_policy_configuration.xml文件被加載流程 1、AudioPolicyService 創建階段 2、createAudioPolicyManager 實現 3、AudioPolicyManager 構造 4、配置文件解析 loadConfig 5、核心解析邏輯 PolicySerializer::deserialize 二、AudioPolicyConfig類解析 1、…