Redis中的常用的五種數(shù)據(jù)類(lèi)型詳解
Redis常用的五種數(shù)據(jù)類(lèi)型
一、字符串(String)
簡(jiǎn)介
字符串是 Redis 中最基本的數(shù)據(jù)類(lèi)型,可以存儲(chǔ)任何類(lèi)型的數(shù)據(jù)(如文本、數(shù)字、二進(jìn)制數(shù)據(jù)等)。每個(gè)字符串的最大長(zhǎng)度可以達(dá)到 512 MB。
常用命令
SET key value
- 用途:設(shè)置鍵
key的值為value。 - 語(yǔ)法:
SET key value - 示例:
SET username "john_doe"
GET key
- 用途:獲取鍵
key的值。 - 語(yǔ)法:
GET key - 示例:
GET username
DEL key
- 用途:刪除指定的鍵
key。 - 語(yǔ)法:
DEL key
- 示例:
DEL username
EXISTS key
- 用途:檢查鍵
key是否存在。 - 語(yǔ)法:
EXISTS key - 示例:
EXISTS username
INCR key
- 用途:將鍵
key的值加 1。若鍵不存在,則初始化為 0。 - 語(yǔ)法:
INCR key - 示例:
INCR page_views
DECR key
- 用途:將鍵
key的值減 1。若鍵不存在,則初始化為 0。 - 語(yǔ)法:
DECR key - 示例:
DECR user_count
APPEND key value
- 用途:將字符串值
value追加到鍵key的現(xiàn)有值后。 - 語(yǔ)法:
APPEND key value - 示例:
APPEND username "_2023"
MSET key1 value1 key2 value2 …
- 用途:同時(shí)設(shè)置多個(gè)鍵值對(duì)。
- 語(yǔ)法:
MSET key1 value1 key2 value2 ...
示例:
MSET key1 "value1" key2 "value2"
MGET key1 key2 …
- 用途:獲取多個(gè)鍵的值。
- 語(yǔ)法:
MGET key1 key2 ... - 示例:
MGET key1 key2
SETEX key seconds value
- 用途:設(shè)置鍵
key的值為value,并在seconds秒后過(guò)期。 - 語(yǔ)法:
SETEX key seconds value - 示例:
SETEX session:123 3600 "abc123" # 設(shè)置1小時(shí)后過(guò)期
應(yīng)用場(chǎng)景
- 緩存系統(tǒng):用于存儲(chǔ)用戶會(huì)話信息、網(wǎng)頁(yè)內(nèi)容等,以提高數(shù)據(jù)訪問(wèn)速度。
- 計(jì)數(shù)器:實(shí)現(xiàn)簡(jiǎn)單的計(jì)數(shù)器功能,例如統(tǒng)計(jì)網(wǎng)站訪問(wèn)量、點(diǎn)贊數(shù)等。
- Token 存儲(chǔ):在身份驗(yàn)證系統(tǒng)中存儲(chǔ)用戶的身份令牌。
二、哈希(Hash)
簡(jiǎn)介
哈希是一種存儲(chǔ)鍵值對(duì)的映射,適合存儲(chǔ)對(duì)象。每個(gè)哈希最多支持 2^32-1 個(gè)字段,通常用于表示一個(gè)復(fù)雜的對(duì)象。
常用命令
HSET key field value
- 用途:為哈希表
key中的字段field設(shè)置值value。 - 語(yǔ)法:
HSET key field value - 示例:
HSET user:1000 name "John Doe"
HGET key field
- 用途:獲取哈希表
key中字段field的值。 - 語(yǔ)法:
HGET key field
示例:
HGET user:1000 name
HGETALL key
- 用途:獲取哈希表
key中的所有字段及其對(duì)應(yīng)的值。 - 語(yǔ)法:
HGETALL key - 示例:
HGETALL user:1000
HDEL key field
- 用途:刪除哈希表
key中的字段field。 - 語(yǔ)法:
HDEL key field - 示例:
HDEL user:1000 age
HINCRBY key field increment
- 用途:將哈希表
key中字段field的值加上increment。 - 語(yǔ)法:
HINCRBY key field increment - 示例:
HINCRBY user:1000 age 1
HKEYS key
- 用途:獲取哈希表
key中所有的字段名。 - 語(yǔ)法:
HKEYS key - 示例:
HKEYS user:1000
HVALS key
- 用途:獲取哈希表
key中所有的字段值。 - 語(yǔ)法:
HVALS key - 示例:
HVALS user:1000
HEXISTS key field
- 用途:檢查哈希表
key中是否存在字段field。 - 語(yǔ)法:
HEXISTS key field - 示例:
HEXISTS user:1000 name
HMSET key field1 value1 field2 value2 …
- 用途:同時(shí)設(shè)置多個(gè)字段的值。
- 語(yǔ)法:
HMSET key field1 value1 field2 value2 ... - 示例:
HMSET user:1000 name "John Doe" age 30
HMGET key field1 field2 …
- 用途:獲取哈希表中多個(gè)字段的值。
- 語(yǔ)法:
HMGET key field1 field2 ... - 示例:
HMGET user:1000 name age
應(yīng)用場(chǎng)景
- 用戶信息存儲(chǔ):使用哈希存儲(chǔ)用戶的多個(gè)屬性(如用戶名、年齡、地址等),方便進(jìn)行快速查詢和更新。
- 商品信息管理:在電商系統(tǒng)中,利用哈希存儲(chǔ)商品的詳細(xì)信息(如價(jià)格、庫(kù)存、銷(xiāo)量等)。
三、列表(List)
簡(jiǎn)介
列表是有序的字符串集合,支持重復(fù)元素。列表的長(zhǎng)度可以達(dá)到 2^32-1 個(gè)元素,適合實(shí)現(xiàn)隊(duì)列和棧等數(shù)據(jù)結(jié)構(gòu)。
常用命令
LPUSH key value
- 用途:將一個(gè)或多個(gè)值插入到列表
key的頭部。 - 語(yǔ)法:
LPUSH key value [value ...] - 示例:
LPUSH tasks "Task 1"
RPUSH key value
- 用途:將一個(gè)或多個(gè)值插入到列表
key的尾部。 - 語(yǔ)法:
RPUSH key value [value ...] - 示例:
RPUSH tasks "Task 2"
LPOP key
- 用途:移除并返回列表
key的第一個(gè)元素。 - 語(yǔ)法:
LPOP key - 示例:
LPOP tasks
RPOP key
- 用途:移除并返回列表
key的最后一個(gè)元素。 - 語(yǔ)法:
RPOP key - 示例:
RPOP tasks
LRANGE key start stop
- 用途:獲取列表
key指定范圍內(nèi)的元素,start和stop是索引,負(fù)數(shù)代表從末尾開(kāi)始計(jì)數(shù)。 - 語(yǔ)法:
LRANGE key start stop - 示例:
LRANGE tasks 0 -1 # 獲取整個(gè)任務(wù)列表
LTRIM key start stop
- 用途:修剪列表
key,保留start到stop范圍內(nèi)的元素。 - 語(yǔ)法:
LTRIM key start stop - 示例:
LTRIM tasks 0 4 # 只保留前5個(gè)元素
LINDEX key index
- 用途:獲取列表
key中指定索引index的元素。 - 語(yǔ)法:
LINDEX key index - 示例:
LINDEX tasks 1 # 獲取第二個(gè)任務(wù)
LLEN key
- 用途:獲取列表
key的長(zhǎng)度。 - 語(yǔ)法:
LLEN key - 示例:
LLEN tasks
RPOPLPUSH source destination
- 用途:移除列表
source的最后一個(gè)元素,將其插入到列表destination的頭部。 - 語(yǔ)法:
RPOPLPUSH source destination - 示例:
RPOPLPUSH tasks completed_tasks
BRPOP key [key …] timeout
- 用途:阻塞彈出列表
key的最后一個(gè)元素,直到超時(shí)或有新的元素可用。 - 語(yǔ)法:
BRPOP key [key ...] timeout - 示例:
BRPOP tasks 5 # 等待5秒后返回
應(yīng)用場(chǎng)景
- 消息隊(duì)列:使用列表實(shí)現(xiàn)任務(wù)隊(duì)列,支持 FIFO(先進(jìn)先出)邏輯。
- 時(shí)間序列數(shù)據(jù):存儲(chǔ)用戶操作記錄或日志信息,以便按時(shí)間順序訪問(wèn)。
四、集合(Set)
簡(jiǎn)介
集合是無(wú)序的字符串集合,支持添加、刪除和查找操作。集合中的元素是唯一的,重復(fù)元素會(huì)被自動(dòng)忽略。
常用命令
SADD key member [member …]
- 用途:向集合
key添加一個(gè)或多個(gè)成員。 - 語(yǔ)法:
SADD key member [member ...] - 示例:
SADD myset "apple"
SREM key member [member …]
- 用途:從集合
key移除一個(gè)或多個(gè)成員。 - 語(yǔ)法:
SREM key member [member ...] - 示例:
SREM myset "banana"
SMEMBERS key
- 用途:獲取集合
key中的所有成員。 - 語(yǔ)法:
SMEMBERS key - 示例:
SMEMBERS myset
SISMEMBER key member
- 用途:判斷成員
member是否在集合key中。 - 語(yǔ)法:
SISMEMBER key member - 示例:
SISMEMBER myset "apple"
SINTER key1 key2 [key3 …]
- 用途:返回給定所有集合的交集。
- 語(yǔ)法:
SINTER key1 key2 [key3 ...] - 示例:
SINTER set1 set2
SUNION key1 key2 [key3 …]
- 用途:返回給定所有集合的并集。
- 語(yǔ)法:
SUNION key1 key2 [key3 ...] - 示例:
SUNION set1 set2
SDIFF key1 key2 [key3 …]
- 用途:返回集合
key1與其他集合的差集。 - 語(yǔ)法:
SDIFF key1 key2 [key3 ...] - 示例:
SDIFF set1 set2
SPOP key [count]
- 用途:移除并返回集合
key中的一個(gè)或多個(gè)隨機(jī)成員。 - 語(yǔ)法:
SPOP key [count] - 示例:
SPOP myset 2 # 隨機(jī)移除并返回2個(gè)成員
SCARD key
- 用途:獲取集合
key的成員數(shù)量。 - 語(yǔ)法:
SCARD key - 示例:
SCARD myset
SMOVE source destination member
- 用途:將成員
member從集合source移動(dòng)到集合destination。 - 語(yǔ)法:
SMOVE source destination member
示例:
SMOVE myset other_set "apple"
應(yīng)用場(chǎng)景
- 標(biāo)簽系統(tǒng):使用集合存儲(chǔ)用戶的興趣標(biāo)簽,方便進(jìn)行興趣推薦。
- 統(tǒng)計(jì)獨(dú)立用戶:統(tǒng)計(jì)網(wǎng)站的獨(dú)立訪客數(shù)或活躍用戶數(shù),利用集合的去重特性。
五、有序集合(Sorted Set)
簡(jiǎn)介
有序集合是一個(gè)字符串集合,其中每個(gè)元素都關(guān)聯(lián)一個(gè)分?jǐn)?shù)(score),集合中的元素是有序的。成員是唯一的,但分?jǐn)?shù)可以重復(fù)。
常用命令
ZADD key score member [score member …]
- 用途:向有序集合
key添加一個(gè)或多個(gè)成員及其分?jǐn)?shù)。 - 語(yǔ)法:
ZADD key score member [score member ...]
示例:
ZADD leaderboard 100 "player1"
ZRANGE key start stop [WITHSCORES]
- 用途:返回有序集合
key中指定區(qū)間內(nèi)的成員。 - 語(yǔ)法:
ZRANGE key start stop [WITHSCORES] - 示例:
ZRANGE leaderboard 0 -1 WITHSCORES # 獲取所有玩家及其分?jǐn)?shù)
ZREM key member [member …]
- 用途:移除有序集合
key中的一個(gè)或多個(gè)成員。 - 語(yǔ)法:
ZREM key member [member ...] - 示例:
ZREM leaderboard "player1"
ZRANK key member
- 用途:返回成員
member在有序集合key中的排名(從 0 開(kāi)始)。 - 語(yǔ)法:
ZRANK key member - 示例:
ZRANK leaderboard "player2"
ZCARD key
- 用途:返回有序集合
key的成員數(shù)量。 - 語(yǔ)法:
ZCARD key - 示例:
ZCARD leaderboard
ZSCORE key member
- 用途:獲取有序集合
key中成員member的分?jǐn)?shù)。 - 語(yǔ)法:
ZSCORE key member
示例:
ZSCORE leaderboard "player2"
ZREVRANGE key start stop [WITHSCORES]
- 用途:以分?jǐn)?shù)從高到低的順序返回有序集合
key中指定區(qū)間內(nèi)的成員。 - 語(yǔ)法:
ZREVRANGE key start stop [WITHSCORES] - 示例:
ZREVRANGE leaderboard 0 -1 WITHSCORES # 獲取所有玩家及其分?jǐn)?shù),按分?jǐn)?shù)從高到低
ZINCRBY key increment member
- 用途:將有序集合
key中成員member的分?jǐn)?shù)加上increment。 - 語(yǔ)法:
ZINCRBY key increment member - 示例:
ZINCRBY leaderboard 10 "player1" # player1的分?jǐn)?shù)增加10
ZPOPMIN key [count]
- 用途:移除并返回有序集合
key中分?jǐn)?shù)最低的一個(gè)或多個(gè)成員。 - 語(yǔ)法:
ZPOPMIN key [count] - 示例:
ZPOPMIN leaderboard 1 # 移除并返回分?jǐn)?shù)最低的1個(gè)成員
ZPOPMAX key [count]
- 用途:移除并返回有序集合
key中分?jǐn)?shù)最高的一個(gè)或多個(gè)成員。 - 語(yǔ)法:
ZPOPMAX key [count] - 示例:
ZPOPMAX leaderboard 1 # 移除并返回分?jǐn)?shù)最高的1個(gè)成員
應(yīng)用場(chǎng)景
- 排行榜:用于游戲的得分排行榜、社交媒體的熱度排名等。
- 時(shí)間敏感的數(shù)據(jù):如實(shí)時(shí)推薦系統(tǒng),根據(jù)用戶行為的分?jǐn)?shù)動(dòng)態(tài)更新推薦內(nèi)容。
總結(jié)
通過(guò)詳細(xì)了解 Redis 各種數(shù)據(jù)類(lèi)型及其常用命令,開(kāi)發(fā)者可以更有效地利用 Redis 提供的強(qiáng)大功能。在高并發(fā)和高性能的應(yīng)用場(chǎng)景下,正確選擇和使用 Redis 的數(shù)據(jù)結(jié)構(gòu)和命令將顯著提高應(yīng)用的性能和可擴(kuò)展性。希望本篇文章能為你的 Redis 使用提供幫助!
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
無(wú)法啟動(dòng)Redis打開(kāi)redis-server閃退的問(wèn)題解決辦法
正常開(kāi)啟redis服務(wù),首先要啟動(dòng)redis-server.exe,但是閃退,導(dǎo)致無(wú)法開(kāi)啟redis服務(wù),這篇文章主要給大家介紹了關(guān)于無(wú)法啟動(dòng)Redis打開(kāi)redis-server閃退問(wèn)題的解決辦法,需要的朋友可以參考下2024-07-07
Redis高級(jí)數(shù)據(jù)類(lèi)型Hyperloglog、Bitmap的使用
很多小伙伴在面試中都會(huì)被問(wèn)道 Redis的常用數(shù)據(jù)結(jié)構(gòu)有哪些?可能很大一部分回答都是 string、hash、list、set、zset,但其實(shí)還有Hyperloglog和Bitmap,本文就來(lái)介紹一下2021-05-05
Redis入門(mén)教程_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
Redis是一款開(kāi)源的、高性能的鍵-值存儲(chǔ)(key-value store)。下面通過(guò)本文大家分享Redis入門(mén)教程,感興趣的朋友參考下吧2017-08-08
Redis的Sentinel解決方案介紹與運(yùn)行機(jī)制
這篇文章主要介紹了Redis的Sentinel解決方案介紹與運(yùn)行機(jī)制, Sentinel 是一款面向分布式服務(wù)架構(gòu)的輕量級(jí)流量控制組件,主要以流量為切入點(diǎn),從流量控制、熔斷降級(jí)、系統(tǒng)自適應(yīng)保護(hù)等多個(gè)維度來(lái)保障服務(wù)的穩(wěn)定性,需要的朋友可以參考下2023-07-07
Redis慢查詢?nèi)罩九c監(jiān)視器問(wèn)題
這篇文章主要介紹了Redis慢查詢?nèi)罩九c監(jiān)視器問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
NestJS+Redis實(shí)現(xiàn)手寫(xiě)一個(gè)限流器
限流是大型系統(tǒng)必備的保護(hù)措施,本文將結(jié)合redis , lua 腳本 以及 Nestjs Guard 來(lái)實(shí)現(xiàn) 限流的效果,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11
Redis?哈希Hash底層數(shù)據(jù)結(jié)構(gòu)詳解
這篇文章主要介紹了Redis?哈希Hash底層數(shù)據(jù)結(jié)構(gòu)詳解的相關(guān)資料,需要的朋友可以參考下2022-08-08

