Redis的數(shù)據(jù)類型解讀
String


以下是基于圖片中 Redis String類型命令 的提取與優(yōu)化整理,結(jié)合實(shí)用場(chǎng)景和注意事項(xiàng),便于快速掌握核心用法:
Redis String類型命令詳解與優(yōu)化指南
1. 基礎(chǔ)操作
命令 | 語法示例 | 作用 | 場(chǎng)景說明 |
SET | SET key value | 添加/修改鍵值對(duì) | 緩存、簡(jiǎn)單數(shù)據(jù)存儲(chǔ) |
GET | GET key | 獲取key對(duì)應(yīng)的value | 讀取緩存或配置 |
SETNX | SETNX key value | key不存在時(shí)才設(shè)置(原子操作) | 分布式鎖、防重復(fù)提交 |
set get setnx
- setnx 如果key值不存在 才添加 如果存在 就不添加 這才是 真正的新增操作

- set 后面 跟nx 也可以實(shí)現(xiàn)
2. 批量操作
命令 | 語法示例 | 優(yōu)勢(shì) |
MSET | MSET k1 v1 k2 v2 | 減少網(wǎng)絡(luò)開銷,批量寫入 |
MGET | MGET k1 k2 | 批量讀取,提升效率 |
mset多量 添加/修改mget多量 獲取
3. 數(shù)字增減
命令 | 語法示例 | 說明 |
INCR | INCR key | 整數(shù)+1(如計(jì)數(shù)器) |
INCRBY | INCRBY key 5 | 指定步長(zhǎng)(如+5) |
INCRBYFLOAT | INCRBYFLOAT key 0.5 | 浮點(diǎn)數(shù)增減(如庫存調(diào)整) |
incr (auto-increment)
incrby值改成 負(fù)的 就 是自減了incrbyfloat浮點(diǎn)數(shù)增減
4. 有效期控制
命令 | 語法示例 | 用途 |
SETEX | SETEX key 60 "value" | 設(shè)置鍵值對(duì)并指定有效期(秒) |
PSETEX | PSETEX key 10000 "value" | 毫秒級(jí)有效期(精準(zhǔn)控制) |
setex (ex =expire)
添加一個(gè)Key 并且 設(shè)置有效期

同樣在后面加 ex 可以實(shí)現(xiàn)
psetex
命令對(duì)比速查表
需求 | 應(yīng)選命令 | 替代方案 |
設(shè)置值并過期 | SETEX | SET +EXPIRE |
防覆蓋寫入 | SETNX | SET +NX 參數(shù) |
浮點(diǎn)數(shù)計(jì)算 | INCRBYFLOAT | 客戶端計(jì)算后SET |

Key的層級(jí)模式


在這里面就形成了層級(jí)結(jié)構(gòu)


Hash類型


Redis Hash類型常見命令速查表
命令格式 | 功能描述 | 示例用法 |
HSET key field value | 設(shè)置/修改Hash鍵中指定字段的值 | HSET user:100 name "張三" |
HGET key field | 獲取Hash鍵中指定字段的值 | HGET user:100 name → "張三" |
HMSET key field1 value1 [field2 value2...] | 批量設(shè)置多個(gè)字段值(Redis 4.0+建議改用HSET) | HMSET product:500 price 2999 stock 100 |
HMGET key field1 [field2...] | 批量獲取多個(gè)字段的值 | HMGET user:100 name age |
HGETALL key | 獲取Hash鍵中所有字段和值(返回交替顯示的字段/值列表) | HGETALL user:100 |
HKEYS key | 獲取Hash鍵中所有字段名 | HKEYS product:500 → ["price", "stock"] |
HVALS key | 獲取Hash鍵中所有字段值 | HVALS product:500 → ["2999", "100"] |
HINCRBY key field increment | 對(duì)指定字段值進(jìn)行整數(shù)遞增/遞減(支持負(fù)數(shù)) | HINCRBY product:500 stock -5 |
HSETNX key field value | 僅當(dāng)字段不存在時(shí)設(shè)置值(原子操作) | HSETNX user:100 email "a@test.com" |
- Hset


相當(dāng)于 一個(gè) key 可以存放 多個(gè)哈希key 和 哈希value
- Hget

要同時(shí)指定 key 和 哈希key 才可以獲得 哈希value
HMset 輸入一個(gè)key 和一次性添加多個(gè) 哈希key 和 哈希value


HMget 輸入一次key 一次性輸入 多個(gè) 哈希key 去獲得 多個(gè) 哈希value

HgetAll 輸入一次key 獲得所有 的哈希key 哈希value 依次返回

Hkeys 獲得所有的哈希key

Hvals 獲得所有的哈希value

HincrBy 指定 key 指定哈希key 選擇增加的 數(shù)值

Hsetnx 指定key 和 哈希key 如果哈希key不存在 則添加 value 如果 存在 則添加失敗

Link類型
List接近于 Java中的LinkedList



Lpush 向左推入元素 L是 left

先推入1 后 2 后3 所以順序是 321

Rpush 向右推入元素 R是 right


Lpop 向左取出元素 并且刪除該元素

Rpop 向右取出元素 并且刪除該元素

Lrange 從左到右取出 范圍內(nèi)的數(shù) 并且不刪除


BLpop 左 延遲等待 刪除

阻塞方式 第三個(gè)參數(shù)是時(shí)間
如果表內(nèi)不存在數(shù)據(jù) 就會(huì)等100s 去等
打開第二個(gè)客戶端去添加數(shù)據(jù) 然后第一個(gè)客戶端就會(huì) 接收到然后刪除

BRpop 右 延遲等待刪除

阻塞方式 第三個(gè)參數(shù)是時(shí)間
如果表內(nèi)不存在數(shù)據(jù) 就會(huì)等100s 去等
打開第二個(gè)客戶端去添加數(shù)據(jù) 然后第一個(gè)客戶端就會(huì) 接收到然后刪除


Set類型
List接近于 Java中的LinkedList



Lpush 向左推入元素 L是 left

先推入1 后 2 后3 所以順序是 321

Rpush 向右推入元素 R是 right


Lpop 向左取出元素 并且刪除該元素

Rpop 向右取出元素 并且刪除該元素

Lrange 從左到右取出 范圍內(nèi)的數(shù) 并且不刪除


BLpop 左 延遲等待 刪除

阻塞方式 第三個(gè)參數(shù)是時(shí)間
如果表內(nèi)不存在數(shù)據(jù) 就會(huì)等100s 去等
打開第二個(gè)客戶端去添加數(shù)據(jù) 然后第一個(gè)客戶端就會(huì) 接收到然后刪除

BRpop 右 延遲等待刪除

阻塞方式 第三個(gè)參數(shù)是時(shí)間
如果表內(nèi)不存在數(shù)據(jù) 就會(huì)等100s 去等
打開第二個(gè)客戶端去添加數(shù)據(jù) 然后第一個(gè)客戶端就會(huì) 接收到然后刪除


SortSet類型


Zadd 添加 注意的是 第一個(gè)是 key 然后 前面的數(shù)據(jù)是 score 后面的值是 value

它會(huì)自動(dòng)按照score 分?jǐn)?shù)排名 升序

Zrem (rem remove) key 為 stus 就是把value 為 Tom 的刪除掉

Zrank (rank 排名)

它返回的排名 是從 0 開始的 0 1 2 所以 就是 2

Zrevrank (rev = reverse rank 排名)

倒序排序 從0開始 0 1 2 3 所以是 3

Zcard 獲取所有元素總個(gè)數(shù)


Zcount 0 82 范圍查詢個(gè)數(shù)


ZincrBy (選擇自增多少分 改成負(fù)的就減分了)

Zrange (查出這個(gè)范圍的所有數(shù)據(jù)) 起始為0


Zrevrange 通過排序個(gè)數(shù) 范圍查詢 (rev = reverse range 范圍) )


ZrangeByscore 通過分?jǐn)?shù)范圍查詢 value

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
一文解決Redis后臺(tái)持久化失敗的問題:內(nèi)存不足導(dǎo)致fork失敗
Redis作為一個(gè)內(nèi)存數(shù)據(jù)庫,在執(zhí)行后臺(tái)持久化(例如 BGSAVE 命令時(shí))需要fork一個(gè)子進(jìn)程來生成數(shù)據(jù)庫快照(RDB 文件),在生產(chǎn)環(huán)境中,有時(shí)你可能會(huì)在Redis日志中遇到持久化失敗的問題,本文將詳細(xì)介紹該問題的原因以及如何通過調(diào)整內(nèi)核和Redis配置來解決此問題2025-07-07
Redis連接池監(jiān)控(連接池是否已滿)與優(yōu)化方法
本文詳細(xì)講解了如何在Linux系統(tǒng)中監(jiān)控Redis連接池的使用情況,以及如何通過連接池參數(shù)配置、系統(tǒng)資源使用情況、Redis命令監(jiān)控、外部監(jiān)控工具等多種方法進(jìn)行檢測(cè)和優(yōu)化,以確保系統(tǒng)在高并發(fā)場(chǎng)景下的性能和穩(wěn)定性,討論了連接池的概念、工作原理、參數(shù)配置,以及優(yōu)化策略等內(nèi)容2024-09-09
Redis 實(shí)現(xiàn)隊(duì)列原理的實(shí)例詳解
這篇文章主要介紹了Redis 實(shí)現(xiàn)隊(duì)列原理的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09
Redis 安裝 redistimeseries.so(時(shí)間序列數(shù)據(jù)類型)的配置步驟
這篇文章主要介紹了Redis 安裝 redistimeseries.so(時(shí)間序列數(shù)據(jù)類型)詳細(xì)教程,配置步驟需要先下載redistimeseries.so 文件,文中介紹了啟動(dòng)失敗問題排查,需要的朋友可以參考下2024-01-01
使用高斯Redis實(shí)現(xiàn)二級(jí)索引的方法
本文介紹了如何通過高斯Redis搭建二級(jí)索引,二級(jí)索引在電商、圖(hexastore)、游戲等領(lǐng)域具有廣泛的應(yīng)用場(chǎng)景,高斯redis現(xiàn)網(wǎng)亦有很多類似應(yīng)用,需要的朋友跟隨小編一起看看吧2022-07-07
在Redis集群中使用pipeline批量插入的實(shí)現(xiàn)方法
這篇文章主要介紹了在Redis集群中使用pipeline批量插入的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05

