Redis指令詳解 – 高性能的開源鍵值存儲系統

Redis作為一個高性能的開源鍵值存儲系統,廣泛應用於緩存、排行榜、計數器、實時消息、任務隊列等場景。Redis也是一個非常靈活的數據存儲系統,支持多種數據結構,包括字符串、列表、哈希、集合、有序集合等,同時也支持諸如發布/訂閱、Lua擴展、事務等功能。

一、鍵值對命令

在Redis中,最基本的操作就是獲取或設置某個鍵的值。鍵值對命令由兩部分組成,鍵和值。

1. SET key value [EX seconds] [PX milliseconds] [NX|XX]

設置給定鍵的值,如果鍵不存在則創建新的鍵值對,如果鍵已經存在,則更新其值。此外,SET命令還可以設置過期時間、毫秒級過期時間以及只有在鍵不存在時才執行SET命令。

# 示例:創建新鍵
SET mykey "hello world"

# 示例:更新已存在的鍵
SET mykey "goodbye"

# 示例:設置過期時間
SET mykey "hello" EX 10

# 示例:設置毫秒級過期時間
SET mykey "hello" PX 10000

# 示例:只有當鍵不存在時才執行SET命令
SET mykey "hello" NX

2. GET key

返回給定鍵的值,如果鍵不存在,則返回nil。

# 示例:獲取鍵值
GET mykey

3. DEL key [key …]

刪除給定鍵及其對應的值。

# 示例:刪除鍵值
DEL mykey

4. EXISTS key

判斷給定鍵是否存在,如果鍵存在,則返回1,否則返回0。

# 示例:判斷鍵是否存在
EXISTS mykey

二、字符串命令

Redis中的字符串命令用於處理字符串類型的值,相比於其他數據存儲系統,Redis的字符串類型支持更多的特性,例如,Redis的字符串類型可以是二進制安全的,即可以包含任意類型的數據,而且支持對字符串類型的值進行原子性的操作。

1. SETEX key seconds value

設置給定鍵的值,並同時設置鍵的過期時間。如果鍵已經存在,則更新其值。此外,SETEX命令還可以設置只有當鍵不存在時才執行SET命令。

# 示例:添加新鍵
SETEX mykey 10 "hello"

# 示例:更新已存在的鍵
SETEX mykey 10 "goodbye"

# 示例:只有當鍵不存在時才執行SET命令
SETEX mykey 10 "hello" NX

2. MSET key value [key value …]

同時設置多個鍵值對,如果給定的鍵已經存在,則覆蓋原有的值。

# 示例:同時設置多個鍵值對
MSET key1 "hello" key2 "world"

3. MGET key [key …]

返回給定多個鍵的值。

# 示例:獲取多個鍵的值
MGET key1 key2

4. INCR key / INCRBY key increment / DECR key / DECRBY key decrement

對給定鍵的值進行原子性的自增/自減操作,其中DECR命令用於對鍵的值進行自減操作,而DECRBY命令用於對鍵的值進行減去指定數值的操作。

# 示例:自增/自減操作
INCR mykey
INCRBY mykey 10
DECR mykey
DECRBY mykey 5

三、列表命令

列表命令用於處理列表類型的值,Redis的列表類型非常靈活,支持向列表中添加元素、獲取列表中任意一個位置上的元素、獲取列表中的多個元素、刪除列表中指定元素等操作。

1. LPUSH key value [value …]

往列表的開頭插入一個或多個值。

# 示例:往列表開頭插入多個值
LPUSH mylist "world" "hello"

2. RPUSH key value [value …]

往列表的末尾插入一個或多個值。

# 示例:往列表末尾插入多個值
RPUSH mylist "hello" "world"

3. LINDEX key index / LLEN key

LINDEX用於返回列表中給定位置的元素,而LLEN命令返回列表的長度。

# 示例:獲取列表中任意位置上的元素
LINDEX mylist 0

# 示例:獲取列表長度
LLEN mylist

4. LPOP key / RPOP key

LPOP命令用於移除並返回列表的第一個元素,而RPOP命令用於移除並返回列表的最後一個元素。

# 示例:移除並返回列表的第一個元素
LPOP mylist

# 示例:移除並返回列表的最後一個元素
RPOP mylist

5. LRANGE key start stop

返回列表中指定範圍內的元素,其中start和stop表示列表中元素的下標,其中0表示列表的開頭位置。當start和stop的值大於等於列表的長度時,Redis會自動將這兩個值加以截取。

# 示例:獲取列表中的多個元素
LRANGE mylist 0 2 

四、哈希命令

哈希命令用於處理哈希類型的值,哈希類型類似於關係型數據庫中的表,通過鍵來對存儲多個鍵值對。

1. HSET key field value / HMSET key field value [field value …]

HSET命令用於為哈希類型的鍵設置字段和對應的值,而HMSET命令則可以一次性為哈希類型的鍵設置多個字段和對應的值。

# 示例:為哈希類型鍵創建字段
HSET myhash field1 "hello"
HMSET myhash field2 "world" field3 "redis"

2. HGET key field / HMGET key field [field …]

HGET命令用於獲取哈希類型的鍵指定字段的值,而HMGET命令則可以獲取哈希類型鍵多個字段的值。

# 示例:獲取指定字段的值
HGET myhash field1

# 示例:獲取多個字段的值
HMGET myhash field1 field2

3. HEXISTS key field

如果給定哈希類型的鍵中存在指定字段,則返回1,否則返回0。

# 示例:判斷是否存在指定字段
HEXISTS myhash field1

4. HDEL key field [field …]

刪除給定哈希類型鍵的一個或多個字段。

# 示例:刪除一個字段
HDEL myhash field1

# 示例:刪除多個字段
HDEL myhash field2 field3

五、集合命令

集合命令用於處理集合類型的值,集合類型類似於一個無序的數組,且其中的元素都是唯一的。

1. SADD key member [member …]

SADD命令用於向集合中添加一個或多個元素。

# 示例:向集合中添加元素
SADD myset "hello" "world"

2. SMEMBERS key

SMEMBERS命令用於獲取集合中的所有元素。

# 示例:獲取集合中的所有元素
SMEMBERS myset

3. SISMEMBER key member

如果給定的元素是集合中的成員,則返回1,否則返回0。

# 示例:判斷給定元素是否是集合成員
SISMEMBER myset "hello"

4. SREM key member [member …]

SREM命令用於從集合中刪除一個或多個元素。

# 示例:從集合中刪除元素
SREM myset "hello"

六、有序集合命令

有序集合命令用於處理有序集合類型的值,有序集合類型類似於集合類型,但是其中的元素可以進行排序。Redis中的有序集合是通過將集合中的元素和對應的分數構建一個有序字典來實現的。

1. ZADD key score member [score member …]

ZADD命令用於向有序集合中添加一個或多個元素,其中score用於指定元素的分數。

# 示例:向有序集合中添加元素
ZADD myzset 1 "one" 2 "two"

2. ZRANGE key start stop [WITHSCORES]

ZRANGE命令用於獲取有序集合中下標在給定範圍內的元素,並按照元素分數從小到大排序。如果指定了WITHSCORES選項,則同時返回元素的分數。

# 示例:獲取有序集合中下標在給定範圍內的元素
ZRANGE myzset 0 -1

# 示例:同時返回元素的分數
ZRANGE myzset 0 -1 WITHSCORES

3. ZREVRANGE key start stop [WITHSCORES]

ZREVRANGE命令用於獲取有序集合中下標在給定範圍內的元素,並按照元素分數從大到小排序。如果指定了WITHSCORES選項,則同時返回元素的分數。

# 示例:獲取有序集合中下標在給定範圍內的元素,按照元素分數從大到小排序
ZREVRANGE myzset 0 -1

# 示例:同時返回元素的分數
ZREVRANGE myzset 0 -1 WITHSCORES

4. ZRANK key member / ZREVRANK key member

ZRANK命令用於獲取有序集合中給定元素的下標,其中下標按照元素分數從小到大排序,而ZREVRANK命令則返回下標按照元素分數從大到小排序的結果。

# 示例:獲取有序集合中指定元素的下標
ZRANK myzset "one"

# 示例:返回下標按照元素分數從大到小排序的結果
ZREVRANK myzset "one"

5. ZREM key member [member …]

ZREM命令用於從有序集合中刪除一個或多個元素。

# 示例:從有序集合中刪除元素
ZREM myzset "one"

七、發布/訂閱命令

發布/訂閱命令被用於實現消息的一對多廣播。在Redis中,發布者將消息發送到指定的頻道,只有訂閱了該頻道的所有客戶端才能接收到該消息。

1. PUBLISH channel message

PUBLISH命令用於向指定頻道發布一條新消息

原創文章,作者:TNEI,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/131408.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
TNEI的頭像TNEI
上一篇 2024-10-03 23:45
下一篇 2024-10-03 23:45

相關推薦

  • SDN開源組織中ONOS起步最早

    ONOS是一個開源軟件定義網絡(SDN)操作系統,由ON.Lab創建並一直在開發。該平台旨在通過使用網絡虛擬化技術使工程師能夠快速靈活地創建和管理網絡服務。 一、ONOS的優勢 在…

    編程 2025-04-29
  • GitHub好玩的開源項目

    本文旨在介紹GitHub上一些好玩的開源項目,並提供代碼示例供讀者參考和學習。 一、Emoji列表 GitHub上有一份完整的Emoji列表,它支持各種平台和設備,方便用戶在Git…

    編程 2025-04-28
  • leveldb和unqlite:兩個高性能的數據庫存儲引擎

    本文將介紹兩款高性能的數據庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • 雲盤開源系統哪個好?

    本文將會介紹幾種目前主流的雲盤開源系統,從不同方面對它們做出分析比較,以此來確定哪個雲盤開源系統是最適合您的。 一、Seafile Seafile是一款非常出色的雲盤開源系統,它的…

    編程 2025-04-28
  • 鍵值存儲(kvs):從基礎概念到實戰應用

    本文將從基礎概念入手,介紹鍵值存儲(kvs)的概念、原理以及實戰應用,並給出代碼實現。通過閱讀本文,您將了解鍵值存儲的優缺點,如何選擇最適合的鍵值存儲方案,以及如何使用鍵值存儲解決…

    編程 2025-04-28
  • Mapster:一個高性能的對象映射庫

    本文將深入介紹furion.extras.objectmapper.mapster,一個高性能的對象映射庫,解釋它是如何工作的以及如何在你的項目中使用它。 一、輕鬆地實現對象之間的…

    編程 2025-04-28
  • 開源Python CMS的優勢和應用範圍

    開源Python CMS是一種基於Python架構的內容管理系統。它不僅具有高效可靠的核心框架,還有大量的插件和現成的模板,可以充分滿足各種網站需求,使開發人員輕鬆地進行網站設計和…

    編程 2025-04-28
  • 開源軟件授權使用證明

    開源軟件在現今的軟件開發領域中發揮了非常重要的作用。但是,開源軟件的免費使用並不意味着用戶可以隨意使用,因為開源軟件本身也有授權的問題。本文將從多個方面闡述開源軟件授權使用證明的相…

    編程 2025-04-28
  • Spark開源項目-大數據處理的新星

    Spark是一款開源的大數據分布式計算框架,它能夠高效地處理海量數據,並且具有快速、強大且易於使用的特點。本文將從以下幾個方面闡述Spark的優點、特點及其相關使用技巧。 一、Sp…

    編程 2025-04-27
  • 開源腦電波技術

    本文將會探討開源腦電波技術的應用、原理和示例。 一、腦電波簡介 腦電波(Electroencephalogram,簡稱EEG),是一種用於檢測人腦電活動的無創性技術。它通過在頭皮上…

    編程 2025-04-27

發表回復

登錄後才能評論