欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis基本數(shù)據(jù)類型示例詳解

 更新時(shí)間:2025年09月06日 08:57:28   作者:xclic  
本文給大家介紹了Redis基本數(shù)據(jù)類型示例詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

Redis 的所有數(shù)據(jù)都是以 key-value(鍵值對(duì))的形式存儲(chǔ)的,我們所說(shuō)的數(shù)據(jù)類型指的是 value 的數(shù)據(jù)類型。key 永遠(yuǎn)都是一個(gè)字符串(String)。

0、通用命令

keys:查看當(dāng)前庫(kù)所有key (匹配:keys *1)
exists key:判斷某個(gè)key是否存在
type key:查看你的key是什么類型
del key:刪除指定的key數(shù)據(jù)
expire key 10:10秒鐘:為給定的key設(shè)置過(guò)期時(shí)間
ttl key:查看還有多少秒過(guò)期,-1表示永不過(guò)期,-2表示已過(guò)期
select:命令切換數(shù)據(jù)庫(kù)
dbsize:查看當(dāng)前數(shù)據(jù)庫(kù)的key的數(shù)量
flushdb:清空當(dāng)前庫(kù)
flushall:清空全部庫(kù)

1、String(字符串)

String是Redis最基礎(chǔ)的數(shù)據(jù)類型,可存儲(chǔ)字符串、數(shù)字和二進(jìn)制數(shù)據(jù)(如圖片),單個(gè)值最大512MB。對(duì)于整數(shù)和浮點(diǎn)數(shù)類型,可以直接執(zhí)行原子性的自增/自減操作。

數(shù)據(jù)結(jié)構(gòu):簡(jiǎn)單動(dòng)態(tài)字符串(Simple Dynamic String,縮寫SDS)。是可以修改的字符串,內(nèi)部結(jié)構(gòu)實(shí)現(xiàn)上類似于Java的ArrayList,采用預(yù)分配冗余空間的方式來(lái)減少內(nèi)存的頻繁分配

常用命令示例

# 基礎(chǔ)操作
127.0.0.1:6379> SET user:name "Alice"   # 設(shè)置鍵值對(duì)
OK
127.0.0.1:6379> GET user:name           # 獲取值
"Alice"
127.0.0.1:6379> DEL user:name           # 刪除鍵
(integer) 1
127.0.0.1:6379> GET user:name
(nil)
# 數(shù)字操作(原子性)
127.0.0.1:6379> SET article:100:views 0
OK
127.0.0.1:6379> INCR article:100:views  # 自增1
(integer) 1
127.0.0.1:6379> INCRBY article:100:views 10 # 增加10
(integer) 11
127.0.0.1:6379> DECR article:100:views      # 自減1
(integer) 10
# 批量操作(節(jié)省網(wǎng)絡(luò)開(kāi)銷)
127.0.0.1:6379> MSET user:1:name "Bob" user:1:email "bob@example.com"
OK
127.0.0.1:6379> MGET user:1:name user:1:email
1) "Bob"
2) "bob@example.com"
# 設(shè)置過(guò)期時(shí)間(常用于緩存)
127.0.0.1:6379> SET session:xyz123 "user_data" EX 3600 # 3600秒后自動(dòng)過(guò)期
OK
# 不存在時(shí)設(shè)置(分布式鎖常用)
127.0.0.1:6379> SETNX lock:order 1  # 成功返回 1,失敗返回 0

應(yīng)用場(chǎng)景

  • 緩存:存儲(chǔ)數(shù)據(jù)庫(kù)查詢結(jié)果
  • 計(jì)數(shù)器:網(wǎng)站訪問(wèn)量、點(diǎn)贊數(shù)
  • 會(huì)話存儲(chǔ):用戶登錄令牌
  • 分布式鎖:使用 SETNX 實(shí)現(xiàn)

2、Hash(哈希)

Hash 是一個(gè)鍵值對(duì)集合,適合存儲(chǔ)對(duì)象。每個(gè) Hash 可以存儲(chǔ) 2³² - 1 個(gè)字段-值對(duì)。

數(shù)據(jù)結(jié)構(gòu):ziplist(壓縮列表),hashtable(哈希表)。當(dāng)field-value長(zhǎng)度較短且個(gè)數(shù)較少時(shí),使用ziplist,否則使用hashtable。

常用命令示例

# 存儲(chǔ)一個(gè)用戶對(duì)象
127.0.0.1:6379> HSET user:1000 name "Alice" age 30 email "alice@example.org" # 設(shè)置多個(gè)field
(integer) 3
127.0.0.1:6379> HGET user:1000 name # 獲取一個(gè)field的值
"Alice"
127.0.0.1:6379> HGETALL user:1000   # 獲取整個(gè)哈希
1) "name"
2) "Alice"
3) "age"
4) "30"
5) "email"
6) "alice@example.org"
127.0.0.1:6379> HKEYS user:1000     # 獲取所有field名
1) "name"
2) "age"
3) "email"
127.0.0.1:6379> HVALS user:1000     # 獲取所有value
1) "Alice"
2) "30"
3) "alice@example.org"
# 批量獲取字段
127.0.0.1:6379> HMGET user:1001 name age # ["Alice", "30"]
# 統(tǒng)計(jì)字段數(shù)量
127.0.0.1:6379> HLEN user:1001  # 2
# 單獨(dú)操作某個(gè)field
127.0.0.1:6379> HINCRBY user:1000 age 1 # 給age字段的值增加1
(integer) 31
127.0.0.1:6379> HSET user:1000 age 32   # 直接設(shè)置age字段
(integer) 0
127.0.0.1:6379> HDEL user:1000 email    # 刪除email字段
(integer) 1

應(yīng)用場(chǎng)景

  • 對(duì)象存儲(chǔ):用戶信息、商品信息
  • 購(gòu)物車:用戶ID為鍵,商品ID為字段,數(shù)量為值
  • 配置存儲(chǔ):系統(tǒng)配置項(xiàng)

3、List(列表)

List 是簡(jiǎn)單的字符串列表,按照插入順序排序。元素可以重復(fù)??梢詮念^部或尾部添加元素。

它的底層實(shí)際是個(gè)雙向鏈表,對(duì)兩端的操作性能很高,通過(guò)索引下標(biāo)的操作中間的節(jié)點(diǎn)性能會(huì)較差。

常用命令示例

# 像一個(gè)隊(duì)列(FIFO:先進(jìn)先出)
127.0.0.1:6379> LPUSH orders:queue "order1001" # 從左邊插入
(integer) 1
127.0.0.1:6379> LPUSH orders:queue "order1002"
(integer) 2
127.0.0.1:6379> RPOP orders:queue # 從右邊取出,得到最早進(jìn)入的"order1001"
"order1001"
127.0.0.1:6379> RPOP orders:queue # 取出"order1002"
"order1002"
# 像一個(gè)棧(LIFO:后進(jìn)先出)
127.0.0.1:6379> LPUSH my:stack "task1"
127.0.0.1:6379> LPUSH my:stack "task2"
127.0.0.1:6379> LPOP my:stack # 從左邊取出,得到最后進(jìn)入的"task2"
"task2"
# 獲取列表范圍
127.0.0.1:6379> RPUSH news:latest "news_id_555" # 從右邊插入,構(gòu)建時(shí)間順序列表
127.0.0.1:6379> RPUSH news:latest "news_id_556"
127.0.0.1:6379> RPUSH news:latest "news_id_557"
127.0.0.1:6379> LRANGE news:latest 0 2 # 獲取前3個(gè)元素
1) "news_id_555"
2) "news_id_556"
3) "news_id_557"
127.0.0.1:6379> LRANGE news:latest 0 -1 # 獲取所有元素,-1表示最后一個(gè)
1) "news_id_555"
2) "news_id_556"
3) "news_id_557"

典型場(chǎng)景

  • 消息隊(duì)列(LPUSH + BRPOP 實(shí)現(xiàn)生產(chǎn)者 - 消費(fèi)者模型)
  • 最新列表(如用戶最新動(dòng)態(tài)、商品評(píng)論)
  • 棧(LPUSH + LPOP)和隊(duì)列(LPUSH + RPOP)

4、Set(集合)

Set 是 String 類型的無(wú)序集合,元素唯一不重復(fù),支持交集、并集、差集等操作

數(shù)據(jù)結(jié)構(gòu):它底層其實(shí)是一個(gè)value為nullhash表,所以添加,刪除,查找的復(fù)雜度都是O(1)。

常用命令示例

# 添加成員并自動(dòng)去重
127.0.0.1:6379> SADD article:800:tags "tech" "redis" "database" "tech"
(integer) 3 # 返回成功添加的數(shù)量,重復(fù)的"tech"被忽略
127.0.0.1:6379> SMEMBERS article:800:tags # 獲取集合所有成員(無(wú)序)
1) "database"
2) "redis"
3) "tech"
# 集合運(yùn)算
127.0.0.1:6379> SADD user:alice:follows "user:ben" "user:charlie" "user:diana"
(integer) 3
127.0.0.1:6379> SADD user:bob:follows "user:alice" "user:diana" "user:evan"
(integer) 3
127.0.0.1:6379> SINTER user:alice:follows user:bob:follows # 交集:共同關(guān)注
1) "user:diana"
127.0.0.1:6379> SUNION user:alice:follows user:bob:follows # 并集:所有關(guān)注的人
1) "user:alice"
2) "user:ben"
3) "user:charlie"
4) "user:diana"
5) "user:evan"
127.0.0.1:6379> SISMEMBER user:alice:follows "user:ben" # 檢查ben是否在alice的關(guān)注列表中
(integer) 1
# 隨機(jī)元素(抽獎(jiǎng))
127.0.0.1:6379> SADD lottery:users "user1" "user2" "user3" "user4" "user5"
(integer) 5
127.0.0.1:6379> SRANDMEMBER lottery:users 2 # 隨機(jī)抽取2個(gè)用戶,不刪除
1) "user3"
2) "user1"
127.0.0.1:6379> SPOP lottery:users 1 # 隨機(jī)抽取1個(gè)用戶,并從集合中刪除(防止重復(fù)中獎(jiǎng))
1) "user2"

典型場(chǎng)景

  • 去重存儲(chǔ)(如用戶瀏覽歷史、點(diǎn)贊記錄)
  • 好友關(guān)系(共同好友、好友推薦)
  • 標(biāo)簽系統(tǒng)(文章標(biāo)簽、商品分類)
  • 隨機(jī)推薦(抽獎(jiǎng))

5、ZSet (Sorted Set - 有序集合)

Sorted Set 類似 Set,但每個(gè)元素都關(guān)聯(lián)一個(gè)分?jǐn)?shù)(score),元素按分?jǐn)?shù)從小到大排序。

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

  • hash:hash的作用就是關(guān)聯(lián)元素value和權(quán)重score,保障元素value的唯一性,可以通過(guò)元素value找到相應(yīng)的score值。
  • 跳躍表:跳躍表的目的在于給元素value排序,根據(jù)score的范圍獲取元素列表。
# 添加成員和分?jǐn)?shù)
127.0.0.1:6379> ZADD leaderboard 100 "player1" 85 "player2" 120 "player3"
(integer) 3

# 按分?jǐn)?shù)升序獲?。ǖ偷礁?,WITHSCORES選項(xiàng)會(huì)返回分?jǐn)?shù))
127.0.0.1:6379> ZRANGE leaderboard 0 -1 WITHSCORES
1) "player2"
2) "85"
3) "player1"
4) "100"
5) "player3"
6) "120"

# 按分?jǐn)?shù)降序獲?。ǜ叩降?,獲取Top 2)
127.0.0.1:6379> ZREVRANGE leaderboard 0 1 WITHSCORES
1) "player3"
2) "120"
3) "player1"
4) "100"

# 按分?jǐn)?shù)范圍查詢
127.0.0.1:6379> ZRANGEBYSCORE leaderboard 90 110 WITHSCORES # 獲取90<=score<=110的成員
1) "player1"
2) "100"

# 更新玩家分?jǐn)?shù)(原子操作)
127.0.0.1:6379> ZINCRBY leaderboard 15 "player2" # 給player2加15分
"100"
127.0.0.1:6379> ZREVRANK leaderboard "player2" # 查看player2的排名(降序排名,0是第一名)
(integer) 1

典型場(chǎng)景

  • 排行榜(用戶積分、商品銷量)
  • 優(yōu)先級(jí)隊(duì)列(按分?jǐn)?shù)排序任務(wù))
  • 范圍查詢(篩選分?jǐn)?shù)在特定區(qū)間的元素)

6、總結(jié)

Redis 的五種核心數(shù)據(jù)類型各有其優(yōu)勢(shì)和應(yīng)用場(chǎng)景:

  • String:最簡(jiǎn)單靈活,適用于大多數(shù)簡(jiǎn)單場(chǎng)景
  • Hash:適合存儲(chǔ)對(duì)象,可以部分更新字段
  • List:提供順序存儲(chǔ),適合隊(duì)列和堆棧場(chǎng)景
  • Set:提供唯一性和集合運(yùn)算,適合標(biāo)簽和社交關(guān)系
  • Sorted Set:結(jié)合了Set和排序功能,適合排行榜和優(yōu)先級(jí)隊(duì)列

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

相關(guān)文章

  • SpringMVC集成redis配置的多種實(shí)現(xiàn)方法

    SpringMVC集成redis配置的多種實(shí)現(xiàn)方法

    這篇文章主要介紹了SpringMVC集成redis配置的多種實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • 關(guān)于redigo中PubSub的一點(diǎn)小坑分析

    關(guān)于redigo中PubSub的一點(diǎn)小坑分析

    這篇文章主要給大家介紹了關(guān)于redigo中PubSub的一點(diǎn)小坑的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • ?Redis 串行生成順序編碼的方法實(shí)現(xiàn)

    ?Redis 串行生成順序編碼的方法實(shí)現(xiàn)

    本文主要介紹了?Redis 串行生成順序編碼的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Redis高并發(fā)問(wèn)題的解決方法

    Redis高并發(fā)問(wèn)題的解決方法

    這篇文章主要介紹了Redis高并發(fā)問(wèn)題的解決辦法,具有很好的參考價(jià)值,感興趣的小伙伴們可以參考一下,具體如下:
    2018-05-05
  • Redis字符串對(duì)象實(shí)用筆記

    Redis字符串對(duì)象實(shí)用筆記

    這篇文章主要給大家介紹了關(guān)于Redis字符串對(duì)象的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Redis的五種基本類型和業(yè)務(wù)場(chǎng)景和使用方式

    Redis的五種基本類型和業(yè)務(wù)場(chǎng)景和使用方式

    Redis是一種高性能的鍵值存儲(chǔ)數(shù)據(jù)庫(kù),支持多種數(shù)據(jù)結(jié)構(gòu)如字符串、列表、集合、哈希表和有序集合等,它提供豐富的API和持久化功能,適用于緩存、消息隊(duì)列、排行榜等多種場(chǎng)景,Redis能夠?qū)崿F(xiàn)高速讀寫操作,尤其適合需要快速響應(yīng)的應(yīng)用
    2024-10-10
  • Windows下Redis安裝配置教程

    Windows下Redis安裝配置教程

    這篇文章主要為大家詳細(xì)介紹了Windows下Redis安裝配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Redis Sorted Set 跳表的實(shí)現(xiàn)示例

    Redis Sorted Set 跳表的實(shí)現(xiàn)示例

    本文詳細(xì)解析了Redis中SortedSet跳表的實(shí)現(xiàn)原理,闡述了跳表的基本概念、結(jié)構(gòu)及其在SortedSet中的應(yīng)用,同時(shí)也指出了跳表在實(shí)際使用中的優(yōu)勢(shì)和局限,可以更好地運(yùn)用Redis的SortedSet,優(yōu)化高并發(fā)環(huán)境中的數(shù)據(jù)查詢與操作,感興趣的可以了解一下
    2024-10-10
  • Redis?持久化原理分析和使用建議詳解

    Redis?持久化原理分析和使用建議詳解

    本文主要介紹了Redis提供的三大持久化機(jī)制,即AOF日志、RDB快照以及混合持久化機(jī)制,結(jié)合圖文實(shí)例給大家講解的非常詳細(xì),感興趣的朋友一起看看吧
    2025-02-02
  • Redis 對(duì)比 Memcached 并在 CentOS 下進(jìn)行安裝配置詳解

    Redis 對(duì)比 Memcached 并在 CentOS 下進(jìn)行安裝配置詳解

    Redis 是一個(gè)開(kāi)源、支持網(wǎng)絡(luò)、基于內(nèi)存、鍵值對(duì)的 Key-Value 數(shù)據(jù)庫(kù),本篇文章主要介紹了Redis 對(duì)比 Memcached 并在 CentOS 下進(jìn)行安裝配置詳解,有興趣的可以了解一下。
    2016-11-11

最新評(píng)論