02-Redis常見命令

02-Redis常見命令

Redis數據結構介紹

Redis是一個key-value的數據庫,key一般是String類型,不過value的類型多種多樣:

貼心小建議:命令不要死記,學會查詢就好啦

Redis為了方便學習,將操作不同數據類型的命令也做了分組,在官網( https://redis.io/commands )可以查看到不同的命令:

當然也可以通過Help命令來去查看命令

Redis 通用命令

通用指令是部分數據類型的,都可以使用的指令,常見的有:

  • KEYS:查看符合模板的所有key
  • DEL:刪除一個指定的key
  • EXISTS:判斷key是否存在
  • EXPIRE:給一個key設置有效期,有效期到期時該key會被自動刪除
  • TTL:查看一個KEY的剩余有效期

通過help [command] 可以查看一個命令的具體用法,例如:

示例代碼如下

  • KEYS
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379># 查詢以a開頭的key
127.0.0.1:6379> keys a*
1) "age"
127.0.0.1:6379>

貼心小提示:在生產環境下,不推薦使用keys 命令,因為這個命令在key過多的情況下,效率不高

  • DEL
127.0.0.1:6379> help delDEL key [key ...]summary: Delete a keysince: 1.0.0group: generic127.0.0.1:6379> del name #刪除單個
(integer) 1  #成功刪除1個127.0.0.1:6379> keys *
1) "age"127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3 #批量添加數據
OK127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
4) "age"127.0.0.1:6379> del k1 k2 k3 k4
(integer) 3   #此處返回的是成功刪除的key,由于redis中只有k1,k2,k3 所以只成功刪除3個,最終返回
127.0.0.1:6379>127.0.0.1:6379> keys * #再查詢全部的key
1) "age"	#只剩下一個了
127.0.0.1:6379>

貼心小提示:同學們在拷貝代碼的時候,只需要拷貝對應的命令哦~

  • EXISTS
127.0.0.1:6379> help EXISTSEXISTS key [key ...]summary: Determine if a key existssince: 1.0.0group: generic127.0.0.1:6379> exists age
(integer) 1127.0.0.1:6379> exists name
(integer) 0
  • EXPIRE

貼心小提示:內存非常寶貴,對于一些數據,我們應當給他一些過期時間,當過期時間到了之后,他就會自動被刪除~

127.0.0.1:6379> expire age 10
(integer) 1127.0.0.1:6379> ttl age
(integer) 8127.0.0.1:6379> ttl age
(integer) 6127.0.0.1:6379> ttl age
(integer) -2127.0.0.1:6379> ttl age
(integer) -2  #當這個key過期了,那么此時查詢出來就是-2 127.0.0.1:6379> keys *
(empty list or set)127.0.0.1:6379> set age 10 #如果沒有設置過期時間
OK127.0.0.1:6379> ttl age
(integer) -1  # ttl的返回值就是-1

Redis命令-String命令

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

其value是字符串,不過根據字符串的格式不同,又可以分為3類:

  • string:普通字符串
  • int:整數類型,可以做自增.自減操作
  • float:浮點類型,可以做自增.自減操作
KEYVALUE
msghello world
num10
score92.5

String的常見命令有:

  • SET:添加或者修改已經存在的一個String類型的鍵值對
  • GET:根據key獲取String類型的value
  • MSET:批量添加多個String類型的鍵值對
  • MGET:根據多個key獲取多個String類型的value
  • INCR:讓一個整型的key自增1
  • INCRBY:讓一個整型的key自增并指定步長,例如:incrby num 2 讓num值自增2
  • INCRBYFLOAT:讓一個浮點類型的數字自增并指定步長
  • SETNX:添加一個String類型的鍵值對,前提是這個key不存在,否則不執行
  • SETEX:添加一個String類型的鍵值對,并且指定有效期

貼心小提示:以上命令除了INCRBYFLOAT 都是常用命令

  • SET 和GET: 如果key不存在則是新增,如果存在則是修改
127.0.0.1:6379> set name Rose  //原來不存在
OK127.0.0.1:6379> get name 
"Rose"127.0.0.1:6379> set name Jack //原來存在,就是修改
OK127.0.0.1:6379> get name
"Jack"
  • MSET和MGET
127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3
OK127.0.0.1:6379> MGET name age k1 k2 k3
1) "Jack" //之前存在的name
2) "10"   //之前存在的age
3) "v1"
4) "v2"
5) "v3"
  • INCR和INCRBY和DECY
127.0.0.1:6379> get age 
"10"127.0.0.1:6379> incr age //增加1
(integer) 11127.0.0.1:6379> get age //獲得age
"11"127.0.0.1:6379> incrby age 2 //一次增加2
(integer) 13 //返回目前的age的值127.0.0.1:6379> incrby age 2
(integer) 15127.0.0.1:6379> incrby age -1 //也可以增加負數,相當于減
(integer) 14127.0.0.1:6379> incrby age -2 //一次減少2個
(integer) 12127.0.0.1:6379> DECR age //相當于 incr 負數,減少正常用法
(integer) 11127.0.0.1:6379> get age 
"11"
  • SETNX
127.0.0.1:6379> help setnxSETNX key valuesummary: Set the value of a key, only if the key does not existsince: 1.0.0group: string127.0.0.1:6379> set name Jack  //設置名稱
OK
127.0.0.1:6379> setnx name lisi //如果key不存在,則添加成功
(integer) 0
127.0.0.1:6379> get name //由于name已經存在,所以lisi的操作失敗
"Jack"
127.0.0.1:6379> setnx name2 lisi //name2 不存在,所以操作成功
(integer) 1
127.0.0.1:6379> get name2 
"lisi"
  • SETEX
127.0.0.1:6379> setex name 10 jack
OK127.0.0.1:6379> ttl name
(integer) 8127.0.0.1:6379> ttl name
(integer) 7127.0.0.1:6379> ttl name
(integer) 5

Redis命令-Key的層級結構

Redis沒有類似MySQL中的Table的概念,該如何區分不同類型的key呢?

例如,需要存儲用戶.商品信息到redis,有一個用戶id是1,有一個商品id恰好也是1,此時如果使用id作為key,那就會沖突了,該怎么辦?

我們可以通過給key添加前綴加以區分,不過這個前綴不是隨便加的,有一定的規范:

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

項目名:業務名:類型:id

這個格式并非固定,也可以根據自己的需求來刪除或添加詞條。

例如我們的項目名稱叫 heima,有user和product兩種不同類型的數據,我們可以這樣定義key:

  • user相關的key:heima:user:1
  • product相關的key:heima:product:1

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

KEYVALUE
test:user:1{“id”:1, “name”: “Jack”, “age”: 21}
test:user:2{“id”:2, “name”: “Tom”, “age”: 19}
test:product:1{“id”:1, “name”: “小米11”, “price”: 4999}
test:product:2{“id”:2, “name”: “小米15Pro”, “price”: 6999}

一旦我們向redis采用這樣的方式存儲,那么在可視化界面中,redis會以層級結構來進行存儲,形成類似于這樣的結構,更加方便Redis獲取數據

圖形化界面中顯示層級

Redis命令-Hash命令

Hash類型,也叫散列,其value是一個無序字典,類似于Java中的HashMap結構。

String結構是將對象序列化為JSON字符串后存儲,當需要修改對象某個字段時很不方便:

Hash結構可以將對象中的每個字段獨立存儲,可以針對單個字段做CRUD:

Hash類型的常見命令

  • HSET key field value:添加或者修改hash類型key的field的值
  • HGET key field:獲取一個hash類型key的field的值
  • HMSET:批量添加多個hash類型key的field的值
  • HMGET:批量獲取多個hash類型key的field的值
  • HGETALL:獲取一個hash類型的key中的所有的field和value
  • HKEYS:獲取一個hash類型的key中的所有的field
  • HINCRBY:讓一個hash類型key的字段值自增并指定步長
  • HSETNX:添加一個hash類型的key的field值,前提是這個field不存在,否則不執行

貼心小提示:哈希結構也是我們以后實際開發中常用的命令喲

  • HSET和HGET
127.0.0.1:6379> HSET heima:user:3 name Lucy//大key是 heima:user:3 小key是name,小value是Lucy
(integer) 1
127.0.0.1:6379> HSET heima:user:3 age 21// 如果操作不存在的數據,則是新增
(integer) 1
127.0.0.1:6379> HSET heima:user:3 age 17 //如果操作存在的數據,則是修改
(integer) 0
127.0.0.1:6379> HGET heima:user:3 name 
"Lucy"
127.0.0.1:6379> HGET heima:user:3 age
"17"
  • HMSET和HMGET
127.0.0.1:6379> HMSET heima:user:4 name HanMeiMei
OK
127.0.0.1:6379> HMSET heima:user:4 name LiLei age 20 sex man
OK
127.0.0.1:6379> HMGET heima:user:4 name age sex
1) "LiLei"
2) "20"
3) "man"
  • HGETALL
127.0.0.1:6379> HGETALL heima:user:4
1) "name"
2) "LiLei"
3) "age"
4) "20"
5) "sex"
6) "man"
  • HKEYS和HVALS
127.0.0.1:6379> HKEYS heima:user:4
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> HVALS heima:user:4
1) "LiLei"
2) "20"
3) "man"
  • HINCRBY
127.0.0.1:6379> HINCRBY  heima:user:4 age 2
(integer) 22
127.0.0.1:6379> HVALS heima:user:4
1) "LiLei"
2) "22"
3) "man"
127.0.0.1:6379> HINCRBY  heima:user:4 age -2
(integer) 20
  • HSETNX
127.0.0.1:6379> HSETNX heima:user4 sex woman
(integer) 1
127.0.0.1:6379> HGETALL heima:user:3
1) "name"
2) "Lucy"
3) "age"
4) "17"
127.0.0.1:6379> HSETNX heima:user:3 sex woman
(integer) 1
127.0.0.1:6379> HGETALL heima:user:3
1) "name"
2) "Lucy"
3) "age"
4) "17"
5) "sex"
6) "woman"

Redis命令-List命令

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

特征也與LinkedList類似:

  • 有序
  • 元素可以重復
  • 插入和刪除快
  • 查詢速度一般

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

List的常見命令有:

  • LPUSH key element … :向列表左側插入一個或多個元素
  • LPOP key:移除并返回列表左側的第一個元素,沒有則返回nil
  • RPUSH key element … :向列表右側插入一個或多個元素
  • RPOP key:移除并返回列表右側的第一個元素
  • LRANGE key star end:返回一段角標范圍內的所有元素
  • BLPOP和BRPOP:與LPOP和RPOP類似,只不過在沒有元素時等待指定時間,而不是直接返回nil

  • LPUSH和RPUSH
127.0.0.1:6379> LPUSH users 1 2 3
(integer) 3
127.0.0.1:6379> RPUSH users 4 5 6
(integer) 6
  • LPOP和RPOP
127.0.0.1:6379> LPOP users
"3"
127.0.0.1:6379> RPOP users
"6"
  • LRANGE
127.0.0.1:6379> LRANGE users 1 2
1) "1"
2) "4"

Redis命令-Set命令

Redis的Set結構與Java中的HashSet類似,可以看做是一個value為null的HashMap。因為也是一個hash表,因此具備與HashSet類似的特征:

  • 無序
  • 元素不可重復
  • 查找快
  • 支持交集.并集.差集等功能

Set類型的常見命令

  • SADD key member … :向set中添加一個或多個元素
  • SREM key member … : 移除set中的指定元素
  • SCARD key: 返回set中元素的個數
  • SISMEMBER key member:判斷一個元素是否存在于set中
  • SMEMBERS:獲取set中的所有元素
  • SINTER key1 key2 … :求key1與key2的交集
  • SDIFF key1 key2 … :求key1與key2的差集
  • SUNION key1 key2 …:求key1和key2的并集

例如兩個集合:s1和s2:

image-20250604105305149

求交集:SINTER s1 s2

求s1與s2的不同:SDIFF s1 s2

image-20250604105323359

具體命令

127.0.0.1:6379> sadd s1 a b c
(integer) 3
127.0.0.1:6379> smembers s1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> srem s1 a
(integer) 1127.0.0.1:6379> SISMEMBER s1 a
(integer) 0127.0.0.1:6379> SISMEMBER s1 b
(integer) 1127.0.0.1:6379> SCARD s1
(integer) 2

案例

  • 將下列數據用Redis的Set集合來存儲:
  • 張三的好友有:李四.王五.趙六
  • 李四的好友有:王五.麻子.二狗
  • 利用Set的命令實現下列功能:
  • 計算張三的好友有幾人
  • 計算張三和李四有哪些共同好友
  • 查詢哪些人是張三的好友卻不是李四的好友
  • 查詢張三和李四的好友總共有哪些人
  • 判斷李四是否是張三的好友
  • 判斷張三是否是李四的好友
  • 將李四從張三的好友列表中移除
127.0.0.1:6379> SADD zs lisi wangwu zhaoliu
(integer) 3127.0.0.1:6379> SADD ls wangwu mazi ergou
(integer) 3127.0.0.1:6379> SCARD zs
(integer) 3127.0.0.1:6379> SINTER zs ls
1) "wangwu"127.0.0.1:6379> SDIFF zs ls
1) "zhaoliu"
2) "lisi"127.0.0.1:6379> SUNION zs ls
1) "wangwu"
2) "zhaoliu"
3) "lisi"
4) "mazi"
5) "ergou"127.0.0.1:6379> SISMEMBER zs lisi
(integer) 1127.0.0.1:6379> SISMEMBER ls zhangsan
(integer) 0127.0.0.1:6379> SREM zs lisi
(integer) 1127.0.0.1:6379> SMEMBERS zs
1) "zhaoliu"
2) "wangwu"

Redis命令-SortedSet類型

Redis的SortedSet是一個可排序的set集合,與Java中的TreeSet有些類似,但底層數據結構卻差別很大。SortedSet中的每一個元素都帶有一個score屬性,可以基于score屬性對元素排序,底層的實現是一個跳表(SkipList)加 hash表。

SortedSet具備下列特性:

  • 可排序
  • 元素不重復
  • 查詢速度快

因為SortedSet的可排序特性,經常被用來實現排行榜這樣的功能。

SortedSet的常見命令有:

  • ZADD key score member:添加一個或多個元素到sorted set ,如果已經存在則更新其score值
  • ZREM key member:刪除sorted set中的一個指定元素
  • ZSCORE key member : 獲取sorted set中的指定元素的score值
  • ZRANK key member:獲取sorted set 中的指定元素的排名
  • ZCARD key:獲取sorted set中的元素個數
  • ZCOUNT key min max:統計score值在給定范圍內的所有元素的個數
  • ZINCRBY key increment member:讓sorted set中的指定元素自增,步長為指定的increment值
  • ZRANGE key min max:按照score排序后,獲取指定排名范圍內的元素
  • ZRANGEBYSCORE key min max:按照score排序后,獲取指定score范圍內的元素
  • ZDIFF.ZINTER.ZUNION:求差集.交集.并集

注意:所有的排名默認都是升序,如果要降序則在命令的Z后面添加REV即可,例如:

  • 升序獲取sorted set 中的指定元素的排名:ZRANK key member
  • 降序獲取sorted set 中的指定元素的排名:ZREVRANK key memeber

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

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

相關文章

Rk3568驅動開發_GPIO點亮LED_12

需求: 用配置寄存器方式控制點燈非常原始,現在采用更方便的Linux提供的pctrl和gpio子系統編寫字符驅動 1.設備樹配置: 現將開發板中呼吸燈關閉掉防止占用到我需要使用的引腳 /* Narnat 2025-5-29 RK3568 GPIO 無需設置pinctrl*/gpioled{co…

阿里云ACP云計算備考筆記 (3)——云存儲RDS

目錄 第一章 云存儲概覽 1、云存儲通用知識 ① 發展歷史 ② 云存儲的優勢 2、云存儲分類 3、文件存儲業務場景 第二章 塊存儲 1、塊存儲分類 2、云盤的優勢 3、創建云盤 4、管理數據盤 ① 格式化數據盤 ② 掛載數據盤 ③ 通過 API 掛載云盤 5、管理系統盤 ① 更…

亞矩陣云手機實測體驗:穩定流暢背后的技術邏輯?

最近在測試一款云手機服務時,發現亞矩陣的表現出乎意料地穩定。作為一個經常需要多設備協作的開發者,我對云手機的性能、延遲和穩定性要求比較高。經過一段時間的體驗,分享一下真實感受,避免大家踩坑。 ??1. 云手機能解決什么問…

STM32H562----------ADC外設詳解

1、ADC 簡介 STM32H5xx 系列有 2 個 ADC,都可以獨立工作,其中 ADC1 和 ADC2 還可以組成雙模式(提高采樣率)。每個 ADC 最多可以有 20 個復用通道。這些 ADC 外設與 AHB 總線相連。 STM32H5xx 的 ADC 模塊主要有如下幾個特性: 1、可配置 12 位、10 位、8 位、6 位分辨率,…

【Android】雙指旋轉手勢

一,概述 本文參考android.view.ScaleGestureDetector,對雙指旋轉手勢做了一層封裝,采用了向量計算法簡單實現,筆者在此分享下。 二,實例 如下,使用RotateGestureDetector即可委托,實現旋轉手…

B站的視頻怎么下載下來——Best Video下載器

B站(嗶哩嗶哩)作為國內最受歡迎的視頻平臺之一,聚集了無數優質內容:動漫番劇、游戲實況、學習課程、紀錄片、Vlog、鬼畜剪輯……總有那么些視頻讓人想反復觀看、離線觀看,甚至剪輯創作。 但你是否遇到過這樣的煩惱&am…

基于SFC的windows系統損壞修復程序

前言 在平時使用Windows操作系統時會遇到很多因為系統文件損壞而出現的錯誤 例如:系統應用無法打開 系統窗口(例如開始菜單)無法使用 電腦藍屏或者卡死 是如果想要修復很多人只能想到重裝系統。但其實Windows有一個內置的系統文件檢查器可以修復此類錯誤。 原理 SFC命令…

智紳科技 —— 智慧養老 + 數字健康,構筑銀發時代安全防護網

在老齡化率突破 21.3% 的當下,智紳科技以 "科技適老" 為核心理念,構建 "監測 - 預警 - 干預 - 照護" 的智慧養老閉環。 其自主研發的七彩喜智慧康養平臺,通過物聯網、AI 和邊緣計算技術,實現對老年人健康與安…

用函數實現模塊化程序設計(適合考研、專升本)

函數 定義:本質上是一段可以被連續調用、功能相對獨立的程序段 c語言是通過“函數”實現模塊化的。根據分類標準不同函數分為以下幾類。 用戶角度:庫函數、自定義函數 函數形式:有參函數、無參函數 作用域:外部函數、內部函數 …

OpenCV 滑動條調整圖像亮度

一、知識點 1、int createTrackbar(const String & trackbarname, const String & winname, int * value, int count, TrackbarCallback onChange 0, void * userdata 0); (1)、創建一個滑動條并將其附在指定窗口上。 (2)、參數說明: trackbarname: 創建的…

vcs仿真產生fsdb波形的兩種方式

目錄 方法一: 使用verilog自帶的系統函數 方法二: 使用UCLI command 2.1 需要了解什么是vcs的ucli,怎么使用ucli? 2.2 使用ucli dump波形的方法 使用vcs仿真產生fsdb波形有兩種方式,本文參考《vcs user guide 20…

【前端】每日一道面試題6:解釋Promise.any和Promise.allSettled的使用場景及區別。

Promise.any() 和 Promise.allSettled() 是 JavaScript 中用于處理異步操作的兩種不同策略的 Promise 組合器,它們的核心區別在于邏輯目標與結果處理方式: 1. Promise.any() 使用場景: 需要獲取 首個成功結果(類似競速成功優先&…

數據鏈路層__

文章目錄 數據鏈路層基本概念(1)鏈路管理:面向連接的服務(2)幀同步:成幀1、字符計數法2、字符填充法(帶填充的首尾界符法)3、帶填充的首位標志法4、物理層編碼違例法 (3&…

coze智能體后端接入問題:

是否一定要按照coze官方API文檔格式調用? 不一定:以下面代碼為例(給了注釋) app.route(/compare_models, methods[POST]) def compare_models():print("收到 compare_models 請求!") #begin-這一部分代碼作用:從前端接…

如何輕松、安全地管理密碼(新手指南)

很多人會為所有賬戶使用相同、易記的密碼,而且常常多年不換。雖然這樣方便記憶,但安全性非常低。 您可能聽說過一些大型網站的信息泄露事件,同樣的風險也可能存在于您的WordPress網站中。如果有不法分子獲取了訪問權限,您的網站和…

寶塔think PHP8 安裝使用FFmpeg 視頻上傳

寶塔think PHP8 安裝使用FFmpeg 一、 安裝think PHP8二、安裝 FFmpeg1,登錄到寶塔面板。2,進入“軟件商店”。3,搜索“FFmpeg”。4,選擇版本點擊安裝。5,檢查 FFmpeg 是否安裝成功6, 在 ThinkPHP 8 中使用 …

Android 輕松實現 增強版靈活的 滑動式表格視圖

表格視圖組件,支持: 1. 無標題模式:只有數據行也可以正常滑動 2. 兩種滑動模式:固定第一列 或 全部滑動 3. 全面的樣式自定義能力 4. 智能列寬計算 1. 無標題模式支持 設置無標題:調用 setHeaderData(null) 或 …

【Python進階】元類編程

目錄 🌟 前言🏗? 技術背景與價值🩹 當前技術痛點🛠? 解決方案概述👥 目標讀者說明 🧠 一、技術原理剖析📊 核心概念圖解💡 核心作用講解🔧 關鍵技術模塊說明?? 技術選…

DeepSeek模型性能優化:從推理加速到資源調度的全棧實踐

引言 在生產環境中部署DeepSeek模型時,性能優化直接關系到服務質量和運營成本。本文將深入探討從芯片級優化到分布式調度的全棧性能提升方案,涵蓋計算圖優化、內存管理、批處理策略等關鍵技術,并分享在千萬級QPS場景下的實戰經驗,幫助工程團隊突破性能瓶頸,實現成本與效能…

Ctrl+R 運行xxx.exe,發現有如下問題.

CtrlR 運行xxx.exe,發現有如下問題. (1)找不到Qt5Core.all,Qt5Cored.dll,Qt5Gui.dll,Qt5Guid.dll,Qt5Widgets.all,Qt5Widgetsd.dll? (2)之后找不到libwinpthread-1.dll 從這個目錄拷貝相應的庫到運行xx.exe目錄下 方法二:將庫路徑添加到系統PATH環境變量里: 在Path中添加路…