最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis五種核心數(shù)據(jù)類型與命令示例

 更新時間:2026年01月26日 16:39:00   作者:不吃冰  
本文介紹了Redis的五種核心數(shù)據(jù)類型:String、Hash、List、Set和SortedSet,每種類型都有其獨特的存儲結(jié)構(gòu)、應(yīng)用場景和時間復(fù)雜度,同時,還提供了Java示例代碼和命令示例,感興趣的朋友跟隨小編一起看看吧

一、Redis數(shù)據(jù)類型概述

Redis支持五種核心數(shù)據(jù)結(jié)構(gòu),每種結(jié)構(gòu)都針對特定場景優(yōu)化:

數(shù)據(jù)類型

存儲結(jié)構(gòu)

主要應(yīng)用場景

時間復(fù)雜度

String?

簡單動態(tài)字符串(SDS)

緩存、計數(shù)器、分布式鎖

O(1)

Hash?

鍵值對集合

對象存儲、購物車、用戶屬性

O(1)

List?

雙向鏈表

消息隊列、最新列表、關(guān)注列表

頭尾操作O(1)

Set?

無序集合

標(biāo)簽、共同好友、隨機(jī)推薦

O(1)

Sorted Set?

有序集合

排行榜、延遲隊列、范圍查詢

O(logN)

二、String(字符串類型)

核心特性

// Redis底層使用SDS(簡單動態(tài)字符串)
struct sdshdr {
    unsigned int len;    // 字符串長度
    unsigned int free;   // 未使用字節(jié)數(shù)
    char buf[];         // 字節(jié)數(shù)組
};

二進(jìn)制安全:可存儲任何二進(jìn)制數(shù)據(jù),包括圖片、序列化對象等。

常用命令

# 基本操作
SET key value        # 設(shè)置鍵值
GET key             # 獲取值
APPEND key value    # 追加值
STRLEN key          # 獲取長度
# 批量操作
MSET k1 v1 k2 v2     # 批量設(shè)置
MGET k1 k2          # 批量獲取
# 數(shù)值操作
INCR key            # 自增1
INCRBY key 5        # 增加指定數(shù)值
DECR key            # 自減1
SETNX key value     # 不存在時設(shè)置(實現(xiàn)分布式鎖基礎(chǔ))
# 過期時間
SETEX key 10 value  # 設(shè)置值并指定10秒過期
SET key value EX 10 # 同上
PSETEX key 1000 value # 毫秒級過期

Java示例

Jedis jedis = new Jedis("localhost");
// 基本操作
jedis.set("username", "minxr");
String name = jedis.get("username");
// 追加操作
jedis.append("username", "jintao");
// 設(shè)置過期
jedis.setex("session_token", 3600, "abc123");
// 批量操作
jedis.mset("user:1:name", "Alice", "user:1:age", "25");
List<String> values = jedis.mget("user:1:name", "user:1:age");

三、Hash(哈希類型)

適用場景

存儲對象,如用戶信息、商品詳情。相比JSON字符串存儲,可獨立更新單個字段。

常用命令

# 字段操作
HSET user:1001 name "張三" age 25  # 設(shè)置字段
HGET user:1001 name              # 獲取字段
HMSET user:1001 email "a@b.com" phone "13800138000"  # 批量設(shè)置
HMGET user:1001 name age         # 批量獲取
HGETALL user:1001               # 獲取所有字段
HDEL user:1001 email            # 刪除字段
# 判斷與計數(shù)
HEXISTS user:1001 name          # 檢查字段是否存在
HLEN user:1001                  # 字段數(shù)量
HSETNX user:1001 name "李四"    # 字段不存在時設(shè)置
# 獲取鍵/值
HKEYS user:1001                 # 所有字段名
HVALS user:1001                 # 所有字段值
HINCRBY user:1001 score 10      # 數(shù)值字段增加

商品信息存儲示例

# 商品ID為1001的信息
HMSET items:1001 id 1001 name "iPhone" price 5999.00 stock 100
HGET items:1001 name          # 獲取商品名
HINCRBY items:1001 stock -1   # 減少庫存
HGETALL items:1001            # 獲取完整信息

Java示例

// 存儲用戶信息
Map<String, String> user = new HashMap<>();
user.put("name", "Akshi");
user.put("age", "2");
user.put("sex", "Female");
jedis.hmset("user:1001", user);
// 獲取操作
String name = jedis.hget("user:1001", "name");
List<String> fields = jedis.hmget("user:1001", "name", "age");
Map<String, String> allFields = jedis.hgetAll("user:1001");
// 字段操作
jedis.hincrBy("user:1001", "age", 1);  // 年齡+1
jedis.hdel("user:1001", "sex");        // 刪除字段

四、List(列表類型)

數(shù)據(jù)結(jié)構(gòu)

基于雙向鏈表實現(xiàn),兩端操作O(1),中間操作O(n)。

常用命令

# 增加元素
LPUSH list:1 a b c    # 左側(cè)插入
RPUSH list:1 d e f    # 右側(cè)插入
LINSERT list:1 BEFORE b x  # 指定位置插入
# 彈出元素
LPOP list:1          # 左側(cè)彈出
RPOP list:1          # 右側(cè)彈出
RPOPLPUSH list:1 list:2  # 原子移動
# 查詢操作
LRANGE list:1 0 2     # 獲取片段(包含兩端)
LINDEX list:1 2       # 獲取指定索引元素
LLEN list:1          # 列表長度
# 刪除操作
LREM list:1 2 "a"    # 刪除前2個"a"
LTRIM list:1 0 3     # 只保留0-3索引元素
LSET list:1 0 "new"  # 設(shè)置指定索引值

商品評論系統(tǒng)示例

# 商品1001的評論列表
LPUSH items:comment:1001 '{"id":1,"content":"商品不錯","time":1630295077289}'
LPUSH items:comment:1001 '{"id":2,"content":"物流很快","time":1630295077290}'
# 獲取最新10條評論
LRANGE items:comment:1001 0 9

Java示例

// 消息隊列實現(xiàn)
jedis.lpush("messages", "Hello");
jedis.lpush("messages", "World");
jedis.rpush("messages", "!");
// 獲取所有消息
List<String> messages = jedis.lrange("messages", 0, -1);
// 阻塞式彈出(實現(xiàn)任務(wù)隊列)
String task = jedis.brpop(5, "task_queue");  // 最多等待5秒
// 最新動態(tài)列表
jedis.lpush("news:latest", "新聞1", "新聞2", "新聞3");
jedis.ltrim("news:latest", 0, 9);  // 只保留最新10條

五、Set(集合類型)

特性

無序、唯一元素,基于哈希表實現(xiàn),操作O(1)。

常用命令

# 基本操作
SADD tags java redis python  # 添加元素
SMEMBERS tags               # 獲取所有元素
SREM tags python           # 刪除元素
SISMEMBER tags java        # 判斷是否存在
# 集合運(yùn)算
SINTER set1 set2           # 交集
SUNION set1 set2           # 并集
SDIFF set1 set2            # 差集(set1有set2無)
SCARD tags                 # 元素個數(shù)
SPOP tags                  # 隨機(jī)彈出一個
SRANDMEMBER tags 2         # 隨機(jī)獲取2個(不刪除)

社交應(yīng)用示例

# 用戶標(biāo)簽
SADD user:1001:tags 音樂 電影 編程
SADD user:1002:tags 電影 游戲 攝影
# 共同興趣
SINTER user:1001:tags user:1002:tags
# 返回: 電影
# 推薦標(biāo)簽(你有我無的)
SDIFF user:1002:tags user:1001:tags
# 返回: 游戲 攝影

六、Sorted Set(有序集合)

特性

元素唯一,每個元素關(guān)聯(lián)一個分?jǐn)?shù)(score),按分?jǐn)?shù)排序。

常用命令

# 添加元素
ZADD rank 95 "張三" 89 "李四" 78 "王五"
ZADD rank 97 "李四"  # 更新分?jǐn)?shù)
# 查詢操作
ZRANGE rank 0 2              # 升序前3名
ZREVRANGE rank 0 2           # 降序前3名
ZRANGE rank 0 2 WITHSCORES   # 帶分?jǐn)?shù)
ZSCORE rank "張三"          # 獲取分?jǐn)?shù)
ZRANK rank "張三"           # 升序排名
ZREVRANK rank "張三"        # 降序排名
# 分?jǐn)?shù)范圍操作
ZRANGEBYSCORE rank 90 100   # 90-100分
ZCOUNT rank 80 90           # 80-90分人數(shù)
ZINCRBY rank 5 "張三"        # 增加5分
# 刪除操作
ZREM rank "王五"            # 刪除元素
ZREMRANGEBYRANK rank 0 2    # 刪除排名0-2
ZREMRANGEBYSCORE rank 0 60  # 刪除0-60分
ZCARD rank                  # 元素總數(shù)

排行榜實現(xiàn)

# 游戲積分榜
ZADD game:rank 1500 "玩家A" 1200 "玩家B" 1800 "玩家C"
# 獲取前十名
ZREVRANGE game:rank 0 9 WITHSCORES
# 增加積分
ZINCRBY game:rank 100 "玩家B"
# 查詢我的排名(從0開始)
ZREVRANK game:rank "玩家A"
# 查詢分?jǐn)?shù)段人數(shù)
ZCOUNT game:rank 1000 2000

Java示例

// 黑客排名(按出生年份)
jedis.zadd("hackers", 1940, "Alan Kay");
jedis.zadd("hackers", 1953, "Richard Stallman");
// 按分?jǐn)?shù)升序獲取
Set<String> asc = jedis.zrange("hackers", 0, -1);
// 按分?jǐn)?shù)降序獲取
Set<String> desc = jedis.zrevrange("hackers", 0, -1);
// 分?jǐn)?shù)范圍查詢
Set<String> range = jedis.zrangeByScore("hackers", 1950, 1970);

七、鍵管理命令

常用鍵操作

# 鍵查詢
KEYS user:*           # 匹配user:開頭的鍵
EXISTS key           # 鍵是否存在
TYPE key             # 鍵的數(shù)據(jù)類型
DEL key1 key2       # 刪除鍵
UNLINK key          # 非阻塞刪除(Redis 4.0+)
# 重命名
RENAME old new      # 重命名
RENAMENX old new    # 新名不存在時才重命名
# 過期時間
EXPIRE key 60       # 60秒后過期
TTL key             # 查看剩余時間(秒)
PTTL key            # 剩余毫秒數(shù)
PERSIST key         # 移除過期時間
EXPIREAT key 1630345600  # 指定時間戳過期

批量操作示例

# 批量設(shè)置帶過期
MSET k1 v1 k2 v2
EXPIRE k1 3600
EXPIRE k2 3600
# 掃描所有鍵(代替KEYS,不阻塞)
SCAN 0 MATCH user:* COUNT 10

八、服務(wù)器管理命令

# 連接測試
PING          # 返回PONG表示正常
ECHO "hello"  # 回顯字符串
# 數(shù)據(jù)庫操作
SELECT 1      # 切換到1號庫(0-15)
DBSIZE        # 當(dāng)前庫鍵數(shù)量
FLUSHDB       # 清空當(dāng)前庫
FLUSHALL      # 清空所有庫
# 服務(wù)器信息
INFO          # 詳細(xì)服務(wù)器信息
INFO memory   # 內(nèi)存信息
INFO stats    # 統(tǒng)計信息
CLIENT LIST   # 客戶端列表
TIME          # 服務(wù)器時間
# 持久化
SAVE          # 同步保存(阻塞)
BGSAVE        # 后臺保存
LASTSAVE     # 上次保存時間

到此這篇關(guān)于Redis五種核心數(shù)據(jù)類型與命令示例的文章就介紹到這了,更多相關(guān)Redis數(shù)據(jù)類型與命令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • K8S部署Redis(單機(jī)、集群)的超詳細(xì)步驟

    K8S部署Redis(單機(jī)、集群)的超詳細(xì)步驟

    redis是一款基于BSD協(xié)議,開源的非關(guān)系型數(shù)據(jù)庫(nosql數(shù)據(jù)庫)這篇文章主要給大家介紹了關(guān)于K8S部署Redis(單機(jī)、集群)的超詳細(xì)步驟,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • Redis主從復(fù)制作用及搭建過程

    Redis主從復(fù)制作用及搭建過程

    Redis?的主從復(fù)制是實現(xiàn)數(shù)據(jù)備份、讀寫分離和水平擴(kuò)展的核心機(jī)制之一,通過主從復(fù)制,一個主節(jié)點(Master)可以將數(shù)據(jù)同步到多個從節(jié)點(Slave),從節(jié)點還可以級聯(lián)創(chuàng)建自己的從節(jié)點,從而形成樹狀結(jié)構(gòu),本文給大家介紹Redis主從復(fù)制的相關(guān)知識,感興趣的朋友一起看看吧
    2025-06-06
  • Redis中過期鍵刪除的三種方法

    Redis中過期鍵刪除的三種方法

    Redis中可以設(shè)置鍵的過期時間,并且通過取出過期字典(expires dict)中鍵的過期時間和當(dāng)前時間比較來判斷是否過期,那么一個過期的鍵是怎么被刪除的呢?本文給大家總結(jié)了三種方法,選了其中兩種給大家詳細(xì)的介紹一下,需要的朋友可以參考下
    2024-05-05
  • redis適合場景八點總結(jié)

    redis適合場景八點總結(jié)

    在本篇文章中我們給大家整理了關(guān)于redis適合什么場景的8點知識點內(nèi)容,需要的朋友們參考下。
    2019-06-06
  • 簡單聊一聊redis過期時間的問題

    簡單聊一聊redis過期時間的問題

    在使用redis的過期時間時不由想到設(shè)置了過期時間,下面這篇文章主要給大家介紹了關(guān)于redis過期時間問題的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • 在redhat6.4安裝redis集群【教程】

    在redhat6.4安裝redis集群【教程】

    這篇文章主要介紹了在redhat6.4安裝redis集群【教程】,需要的朋友可以參考下
    2016-05-05
  • 利用redis實現(xiàn)分布式鎖,快速解決高并發(fā)時的線程安全問題

    利用redis實現(xiàn)分布式鎖,快速解決高并發(fā)時的線程安全問題

    這篇文章主要介紹了利用redis實現(xiàn)分布式鎖,快速解決高并發(fā)時的線程安全問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 深入理解 Redis Template及4種序列化方式

    深入理解 Redis Template及4種序列化方式

    這篇文章主要介紹了深入理解 Redis Template及4種序列化方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 使用Redis獲取數(shù)據(jù)轉(zhuǎn)json,解決動態(tài)泛型傳參的問題

    使用Redis獲取數(shù)據(jù)轉(zhuǎn)json,解決動態(tài)泛型傳參的問題

    這篇文章主要介紹了使用Redis獲取數(shù)據(jù)轉(zhuǎn)json,解決動態(tài)泛型傳參的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 利用Redis實現(xiàn)爬蟲URL去重與隊列管理的實戰(zhàn)指南

    利用Redis實現(xiàn)爬蟲URL去重與隊列管理的實戰(zhàn)指南

    傳統(tǒng)爬蟲開發(fā)中,URL去重和任務(wù)隊列管理是兩大難題,本文將以實戰(zhàn)為導(dǎo)向,拆解Redis在爬蟲中的兩大核心應(yīng)用場景:URL去重與任務(wù)隊列管理,用代碼片段和場景化案例說明實現(xiàn)邏輯,最后附上常見問題解決方案,需要的朋友可以參考下
    2025-11-11

最新評論

衡水市| 宁德市| 汤阴县| 镇雄县| 扎兰屯市| 伊宁县| 伊春市| 黄大仙区| 大荔县| 贡觉县| 长泰县| 云安县| 苍南县| 志丹县| 修水县| 延吉市| 武清区| 南乐县| 南投县| 崇阳县| 禄丰县| 塔城市| 九龙城区| 合江县| 金塔县| 武义县| 南岸区| 图片| 铁力市| 安达市| 兰西县| 牙克石市| 太和县| 汉寿县| 绥滨县| 凌源市| 迁西县| 邻水| 浦城县| 大埔区| 封开县|