首頁 >資料庫 >Redis >深入聊聊Redis中的5種基本資料類型

深入聊聊Redis中的5種基本資料類型

青灯夜游
青灯夜游轉載
2021-11-23 18:56:552379瀏覽

本篇文章帶大家詳細了解Redis中的5種基本資料型別(String字串、List列表、Set集合、Hash雜湊、Zset有序集合),希望對大家有幫助!

深入聊聊Redis中的5種基本資料類型

Redis資料結構簡介

#對redis來說,所有的key(鍵)都是字串。我們在談基礎資料結構時,討論的是儲存值的資料類型,主要包括常見的5種資料類型,分別是:String、List、Set、Zset、Hash。 【相關推薦:Redis影片教學

深入聊聊Redis中的5種基本資料類型

##字串的集合,包含基礎的方法有看是否有新增、取得、刪除;還包含計算交集、並集、差集等包含鍵值對的無序散列表包含方法有新增、取得、刪除單一元素和雜湊一樣,用於儲存鍵值對字串成員與浮點數分數之間的有序映射;元素的排列順序由分數的大小決定;包含方法有添加、取得、刪除單一元素、根據分數範圍或成員來取得元素
#結構類型 結構儲存的值 結構的讀寫能力
#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 valueSCARD取得集合的成員數SCARD keySMEMBER#傳回集合中的所有成員SMEMBER key memberSISMEMBER判斷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新增鍵值對HSET hash-key sub-key1 value1#HGET取得指定散列鍵的值HGET hash-key key1##HGETALL#HDEL
#取得雜湊中包含的所有鍵值對 HGETALL hash-key
如果給定鍵存在於雜湊中,那麼就移除這個鍵######HDEL hash-key sub-key1#############
  • 命令执行
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中文網其他相關文章!

陳述:
本文轉載於:juejin.cn。如有侵權,請聯絡admin@php.cn刪除