本篇文章帶大家詳細了解Redis中的5種基本資料型別(String字串、List列表、Set集合、Hash雜湊、Zset有序集合),希望對大家有幫助!
#對redis來說,所有的key(鍵)都是字串。我們在談基礎資料結構時,討論的是儲存值的資料類型,主要包括常見的5種資料類型,分別是:String、List、Set、Zset、Hash。 【相關推薦:Redis影片教學】
#結構類型 | 結構儲存的值 | 結構的讀寫能力 |
---|---|---|
#String字串 | 可以是字串、整數或浮點數 | 對整個字串或字串的一部分進行操作;對整數或浮點數進行自增或自減操作; |
List列表 | 一個鍊錶,鍊錶上的每個節點都包含一個字串 | 對鍊錶的兩端進行push和pop操作,讀取單一或多個元素;根據值尋找或刪除元素; |
Set集合 | #包含字串的無序集合 | ##字串的集合,包含基礎的方法有看是否有新增、取得、刪除;還包含計算交集、並集、差集等|
Hash雜湊 | 包含鍵值對的無序散列表包含方法有新增、取得、刪除單一元素 | |
Zset有序集合 | 和雜湊一樣,用於儲存鍵值對字串成員與浮點數分數之間的有序映射;元素的排列順序由分數的大小決定;包含方法有添加、取得、刪除單一元素、根據分數範圍或成員來取得元素 |
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中的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 |
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)
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
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"
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中文網其他相關文章!