快取 Redis 資料結構

2021-08-20 11:10:41 字數 1729 閱讀 6595

redis中的value有五種不同的資料結構

最簡單的redis型別,通過set key value 或者 get key 來操作此類資料,值可以是任務種類的字串(包括二進位制資料),可以保持乙個的二進位製流,但是最大長度不能超過512mb

redis lists是基於linked lists實現,鍊錶上每個節點都包含了乙個字串,使用lpush在十個元素的list頭部和百萬個元素的list頭部新增新元素速度是相同的,但是查詢效率就相當差了。

lpush在list的左邊(頭部)新增乙個新元素,rpush在list的右邊(尾部)新增乙個新元素;

lpop彈出list的左邊第乙個元素,rpop在list右邊彈出乙個元素;

lrange範圍列印list中的值。(實際應用中可以獲得最近關注的人)

可以使用list來實現生產者和消費者模型,如果使用lpush和rpop來實現該功能,若list是空,這時候消費者就需要輪詢來獲取資料,這樣就會增加redis訪問壓力、增加消費端的cpu時間,而很多訪問都是無用的。為此redis提供了阻塞式訪問blpop和brpop, 消費者可以在獲取資料時指定如果資料不存在阻塞的時間,如果在時限內獲得資料則立即返回,如果超時還沒有資料則返回null。timeout引數為0表示一直阻塞。

redis set 是string的無序排列

> sadd myset 1 2 3

(integer) 3

> smembers myset

1. 3

2. 1

3. 2

scard key 返回 key的基數,就是key對應的value有多少元素

sinner key1 key2 求集合key1和key2的交集(例如微博的共同好友)

sunion求並集,sdiff求差集(不同元素)

smember 返回key集合中所有元素

sismember 是否存在key的元素(1存在,0不存在)

redis有序集合和集合一樣,是string型別元素集合,且不允許重複,不同的是每個元素都會關聯乙個double型別的分數,redis正是通過分數來為集合中成員進行從小到大的排序,成員唯一但分數可以重複。

zadd key score1 member1 [score2 member2] 

向有序集合新增乙個或多個成員,或者更新已存在成員的分數

zcardkey 

獲取有序集合的成員數

zrange key 0 2 按從小到大的順序取前三(排行榜的排名)

zrevrange key 0 2 按從大到小的順序取

redis中的hash型別的value可以看成map容器,可以用來儲存使用者的資訊,key為user1,value中包含了username、password、age等鍵值對。每個hash可以儲存 232 - 1 個鍵值對。

同樣是快取,在memcached中,我們經常將一些結構化的資訊打包成hashmap,在客戶端序列化後儲存為乙個字串的值,比如使用者的暱稱、年齡、性別、積分等,這時候在需要修改其中某一項時,通常需要將所有值取出反序列化後,修改某一項的值,再序列化儲存回去。這樣不僅增大了開銷,也不適用於一些可能併發操作的場合(比如兩個併發的操作都需要修改積分)。而redis的hash結構可以使你像在資料庫中update乙個屬性一樣只修改某一項屬性值。

hset key field 獲取儲存在雜湊表中指定欄位的值

hgetall key 獲取在雜湊表中指定 key 的所有欄位和值

hexists key field 檢視雜湊表 key 中,指定的字段是否存在

Redis資料結構

字典 dict 是redis裡最核心的資料結構,正如其全稱remote dictionary service所說,redis其實就是乙個字典服務,字典以key value的形式呈現給使用者,key是簡單的字串,而value可以是各種資料結構,比如字串 string 鍊錶 list 集合 set 排序...

Redis 資料結構

最近接觸到了redis的使用,借這個機會深入的了解一下redis的實現和設計原理。下面先介紹一下redis底層所用到的資料結構。redis的實現幾乎都是基於下面的幾個資料結構之上的。struct sdshdr struct listnode struct list struct dictentry ...

redis 資料結構

今天學習了redis的列表型別 lpush ltrim lrange lpush mylist content ltrim 0,99 lrange 0,1 lrange 兩個引數 分別代表第乙個元素和最後乙個元素 redis的列表型別,可以用來做訊息佇列 使用乙個程序 用lpush命名作為生產者 使...