深入聊聊Redis中的5種基本資料類型
本篇文章帶大家詳細了解Redis中的5種基本資料型別(String字串、List列表、Set集合、Hash雜湊、Zset有序集合),希望對大家有幫助!
Redis資料結構簡介
#對redis來說,所有的key(鍵)都是字串。我們在談基礎資料結構時,討論的是儲存值的資料類型,主要包括常見的5種資料類型,分別是:String、List、Set、Zset、Hash。 【相關推薦:Redis影片教學】
#結構類型 | 結構儲存的值 | 結構的讀寫能力 |
---|---|---|
#String字串 | 可以是字串、整數或浮點數 | 對整個字串或字串的一部分進行操作;對整數或浮點數進行自增或自減操作; |
List列表 | 一個鍊錶,鍊錶上的每個節點都包含一個字串 | 對鍊錶的兩端進行push和pop操作,讀取單一或多個元素;根據值尋找或刪除元素; |
Set集合 | #包含字串的無序集合 | ##字串的集合,包含基礎的方法有看是否有新增、取得、刪除;還包含計算交集、並集、差集等|
Hash雜湊 | 包含鍵值對的無序散列表包含方法有新增、取得、刪除單一元素 | |
Zset有序集合 | 和雜湊一樣,用於儲存鍵值對字串成員與浮點數分數之間的有序映射;元素的排列順序由分數的大小決定;包含方法有添加、取得、刪除單一元素、根據分數範圍或成員來取得元素 |
#基礎資料結構詳解
String字串
String是redis中最基本的資料類型,一個key對應一個value。String類型是二進位安全性的,意思是 redis 的 string 可以包含任何資料。如數字,字串,jpg圖片或序列化的物件。
- 指令使用
使用 | ||
---|---|---|
GET | 取得儲存在給定鍵中的值 | GET name |
SET | 設定儲存在給定鍵中的值 | SET name value |
DEL | 刪除儲存在給定鍵中的值 | DEL name |
INCR | 將鍵儲存的值加1 | INCR key |
DECR | 將鍵儲存的值減1 | #DECR key |
INCRBY | 將鍵儲存的值加上整數 | INCRBY key amount |
#DECRBY | 將鍵儲存的值減去整數 | #DECRBY key amount |
- 指令執行
127.0.0.1:6379> set hello world OK 127.0.0.1:6379> get hello "world" 127.0.0.1:6379> del hello (integer) 1 127.0.0.1:6379> get hello (nil) 127.0.0.1:6379> get counter "2" 127.0.0.1:6379> incr counter (integer) 3 127.0.0.1:6379> get counter "3" 127.0.0.1:6379> incrby counter 100 (integer) 103 127.0.0.1:6379> get counter "103" 127.0.0.1:6379> decr counter (integer) 102 127.0.0.1:6379> get counter "102"
- 實戰場景
- 快取:經典使用場景,把常用訊息,字串,圖片或影片等資訊放到redis中,redis作為快取層,mysql做持久化層,降低mysql的讀寫壓力。
- 計數器:redis是單執行緒模型,一個指令執行完才會執行下一個,同時資料可以一步落地到其他的資料來源。
- session:常見方案spring session redis實作session共享,
List清單
Redis中的List其實就是鍊錶(Redis用雙端鍊錶實作List)。
使用List結構,我們可以輕鬆實現最新訊息排隊功能(例如新浪微博的TimeLine)。 List的另一個應用程式就是訊息佇列,可以利用List的 PUSH 操作,將任務存放在List中,然後工作執行緒再用 POP 操作將任務取出執行。
- 指令使用
使用 | ||
---|---|---|
RPUSH | 將給定值推入到清單右端 | RPUSH key value |
#LPUSH | 將給定值推入到列表左端 | LPUSH key value |
##RPOP | #從清單的右端彈出一個值,並傳回被彈出的值 | RPOP key |
#LPOP | 從清單的左端彈出一個值,並傳回被彈出的值 | LPOP key |
LRANGE | 取得清單在給定範圍上的所有值 | LRANGE key 0 -1 |
LINDEX | 透過索引取得清單中的元素。你也可以使用負數下標,以 -1 表示列表的最後一個元素, -2 表示列表的倒數第二個元素,以此類推。 | LINEX key index |
- 使用清單的技巧
- lpush lpop=Stack(堆疊)
- lpush rpop=Queue(隊列)
- lpush ltrim=Capped Collection(有限集合)
- lpush brpop=Message Queue(訊息佇列)
- #指令執行
127.0.0.1:6379> lpush mylist 1 2 ll ls mem (integer) 5 127.0.0.1:6379> lrange mylist 0 -1 1) "mem" 2) "ls" 3) "ll" 4) "2" 5) "1" 127.0.0.1:6379> lindex mylist -1 "1" 127.0.0.1:6379> lindex mylist 10 # index不在 mylist 的区间范围内 (nil)
- 實戰場景
- #微博TimeLine: 有人發佈微博,用lpush加入時間軸,展示新的清單資訊。
- 訊息佇列
Set集合
Redis 的Set 是String 型別的無序集合。集合成員是唯一的,這意味著集合中不能出現重複的資料。
Redis 中集合是透過哈希表實現的,所以添加,刪除,查找的複雜度都是 O(1)。
- 指令使用
使用 | ||
---|---|---|
SADD | 為集合新增一個或多個成員 | SADD key value |
SCARD | 取得集合的成員數 | SCARD key |
SMEMBER | #傳回集合中的所有成員 | SMEMBER key member |
SISMEMBER | 判斷member 元素是否為集合key 的成員 | SISMEMBER key member |
其它一些集合操作,請參考這裡https://www.runoob.com/redis/redis-sets.html
- 指令執行
- 實戰場景
- 標籤 (tag),為使用者新增標籤,或使用者為訊息加上標籤,這樣有相同標籤或類似標籤的可以給推薦關注的事或關注的人。
- 點贊,或點踩,收藏等 ,可以放到set中實現
127.0.0.1:6379> sadd myset ycf ycf1 xiao ycf (integer) 3 127.0.0.1:6379> smember myset 1) "xiao" 2) "ycf1" 3) "ycf" 127.0.0.1:6379> sismember myset ycf (integer) 1
Hash雜湊
Redis hash 是一個string 類型的field(欄位) 和value(值) 的對應表,hash 特別適合用來儲存物件。
- 指令使用
#指令 | 簡單 | |
---|---|---|
##使用 | ||
新增鍵值對 | HSET hash-key sub-key1 value1 | |
取得指定散列鍵的值 | HGET hash-key key1 | |
#取得雜湊中包含的所有鍵值對 | HGETALL hash-key |
- 命令执行
127.0.0.1:6379> hset user name1 ycf (integer) 1 127.0.0.1:6379> hset user email1 ycf@163.com (integer) 1 127.0.0.1:6379> hgetall user 1) "name1" 2) "ycf" 3) "email1" 4) "ycf@163.com" 127.0.0.1:6379> hget user user (nil) 127.0.0.1:6379> hget user name1 "ycf" 127.0.0.1:6379> hset user name2 xiaoycf (integer) 1 127.0.0.1:6379> hset user email2 xiaoycf@163.com (integer) 1 127.0.0.1:6379> hgetall user 1) "name1" 2) "ycf" 3) "email1" 4) "ycf@163.com" 5) "name2" 6) "xiaoycf" 7) "email2" 8) "xiaoycf@163.com"
- 实战场景
- 缓存: 能直观,相比string更节省空间,的维护缓存信息,如用户信息,视频信息等。
Zset有序集合
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
- 命令使用
命令 | 简述 | 使用 |
---|---|---|
ZADD | 将一个带有给定分值的成员添加到哦有序集合里面 | ZADD zset-key 178 member1 |
ZRANGE | 根据元素在有序集合中所处的位置,从有序集合中获取多个元素 | ZRANGE zset-key 0-1 withccores |
ZREM | 如果给定元素成员存在于有序集合中,那么就移除这个元素 | ZREM zset-key member1 |
更多命令请参考这里
https://www.runoob.com/redis/redis-sorted-sets.html
- 命令执行
127.0.0.1:6379> zadd myscoreset 100 ycf 90 xiaoycf (integer) 2 127.0.0.1:6379> ZRANGE myscoreset 0 -1 1) "xiaoycf" 2) "ycf" 127.0.0.1:6379> ZSCORE myscoreset ycf "100"
- 实战场景
- 排行榜:有序集合经典使用场景。例如小说视频等网站需要对用户上传的小说视频做排行榜,榜单可以按照用户关注数,更新时间,字数等打分,做排行。
更多编程相关知识,请访问:编程视频!!
以上是深入聊聊Redis中的5種基本資料類型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Redis集群模式通過分片將Redis實例部署到多個服務器,提高可擴展性和可用性。搭建步驟如下:創建奇數個Redis實例,端口不同;創建3個sentinel實例,監控Redis實例並進行故障轉移;配置sentinel配置文件,添加監控Redis實例信息和故障轉移設置;配置Redis實例配置文件,啟用集群模式並指定集群信息文件路徑;創建nodes.conf文件,包含各Redis實例的信息;啟動集群,執行create命令創建集群並指定副本數量;登錄集群執行CLUSTER INFO命令驗證集群狀態;使

如何清空 Redis 數據:使用 FLUSHALL 命令清除所有鍵值。使用 FLUSHDB 命令清除當前選定數據庫的鍵值。使用 SELECT 切換數據庫,再使用 FLUSHDB 清除多個數據庫。使用 DEL 命令刪除特定鍵。使用 redis-cli 工具清空數據。

要從 Redis 讀取隊列,需要獲取隊列名稱、使用 LPOP 命令讀取元素,並處理空隊列。具體步驟如下:獲取隊列名稱:以 "queue:" 前綴命名,如 "queue:my-queue"。使用 LPOP 命令:從隊列頭部彈出元素並返回其值,如 LPOP queue:my-queue。處理空隊列:如果隊列為空,LPOP 返回 nil,可先檢查隊列是否存在再讀取元素。

在CentOS系統上,您可以通過修改Redis配置文件或使用Redis命令來限制Lua腳本的執行時間,從而防止惡意腳本佔用過多資源。方法一:修改Redis配置文件定位Redis配置文件:Redis配置文件通常位於/etc/redis/redis.conf。編輯配置文件:使用文本編輯器(例如vi或nano)打開配置文件:sudovi/etc/redis/redis.conf設置Lua腳本執行時間限制:在配置文件中添加或修改以下行,設置Lua腳本的最大執行時間(單位:毫秒)

使用 Redis 指令需要以下步驟:打開 Redis 客戶端。輸入指令(動詞 鍵 值)。提供所需參數(因指令而異)。按 Enter 執行指令。 Redis 返迴響應,指示操作結果(通常為 OK 或 -ERR)。

使用Redis進行鎖操作需要通過SETNX命令獲取鎖,然後使用EXPIRE命令設置過期時間。具體步驟為:(1) 使用SETNX命令嘗試設置一個鍵值對;(2) 使用EXPIRE命令為鎖設置過期時間;(3) 當不再需要鎖時,使用DEL命令刪除該鎖。

使用 Redis 命令行工具 (redis-cli) 可通過以下步驟管理和操作 Redis:連接到服務器,指定地址和端口。使用命令名稱和參數向服務器發送命令。使用 HELP 命令查看特定命令的幫助信息。使用 QUIT 命令退出命令行工具。

Redis數據過期策略有兩種:定期刪除:定期掃描刪除過期鍵,可通過 expired-time-cap-remove-count、expired-time-cap-remove-delay 參數設置。惰性刪除:僅在讀取或寫入鍵時檢查刪除過期鍵,可通過 lazyfree-lazy-eviction、lazyfree-lazy-expire、lazyfree-lazy-user-del 參數設置。
