本篇文章帶大家詳細了解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
- 指令執行
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
- 實戰場景
- 標籤 (tag),為使用者新增標籤,或使用者為訊息加上標籤,這樣有相同標籤或類似標籤的可以給推薦關注的事或關注的人。
- 點贊,或點踩,收藏等 ,可以放到set中實現
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中文網其他相關文章!

REDISACTSASBOTHADATASTOREANDASERVICE.1)ASADATASTORE,ITUSESIN-MEMORYSTOOGATOFORFOFFASTESITION,支持VariousDatharptructuresLikeKey-valuepairsandsortedsetsetsetsetsetsetsets.2)asaservice,ItprovidespunctionslikeItionitionslikepunikeLikePublikePublikePlikePlikePlikeAndluikeAndluAascriptingiationsmpleplepleclexplectiations

Redis與其他數據庫相比,具有以下獨特優勢:1)速度極快,讀寫操作通常在微秒級別;2)支持豐富的數據結構和操作;3)靈活的使用場景,如緩存、計數器和發布訂閱。選擇Redis還是其他數據庫需根據具體需求和場景,Redis在高性能、低延遲應用中表現出色。

Redis在數據存儲和管理中扮演著關鍵角色,通過其多種數據結構和持久化機製成為現代應用的核心。 1)Redis支持字符串、列表、集合、有序集合和哈希表等數據結構,適用於緩存和復雜業務邏輯。 2)通過RDB和AOF兩種持久化方式,Redis確保數據的可靠存儲和快速恢復。

Redis是一種NoSQL數據庫,適用於大規模數據的高效存儲和訪問。 1.Redis是開源的內存數據結構存儲系統,支持多種數據結構。 2.它提供極快的讀寫速度,適合緩存、會話管理等。 3.Redis支持持久化,通過RDB和AOF方式確保數據安全。 4.使用示例包括基本的鍵值對操作和高級的集合去重功能。 5.常見錯誤包括連接問題、數據類型不匹配和內存溢出,需注意調試。 6.性能優化建議包括選擇合適的數據結構和設置內存淘汰策略。

Redis在現實世界中的應用包括:1.作為緩存系統加速數據庫查詢,2.存儲Web應用的會話數據,3.實現實時排行榜,4.作為消息隊列簡化消息傳遞。 Redis的多功能性和高性能使其在這些場景中大放異彩。

Redis脫穎而出是因為其高速、多功能性和豐富的數據結構。 1)Redis支持字符串、列表、集合、散列和有序集合等數據結構。 2)它通過內存存儲數據,支持RDB和AOF持久化。 3)從Redis6.0開始引入多線程處理I/O操作,提升了高並發場景下的性能。

RedisisclassifiedasaNoSQLdatabasebecauseitusesakey-valuedatamodelinsteadofthetraditionalrelationaldatabasemodel.Itoffersspeedandflexibility,makingitidealforreal-timeapplicationsandcaching,butitmaynotbesuitableforscenariosrequiringstrictdataintegrityo

Redis通過緩存數據、實現分佈式鎖和數據持久化來提升應用性能和可擴展性。 1)緩存數據:使用Redis緩存頻繁訪問的數據,提高數據訪問速度。 2)分佈式鎖:利用Redis實現分佈式鎖,確保在分佈式環境中操作的安全性。 3)數據持久化:通過RDB和AOF機制保證數據安全性,防止數據丟失。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Dreamweaver CS6
視覺化網頁開發工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能