一、背景:
最近做項目用到了redis作為緩存,來保證查詢的響應時間,避免給數據庫巨大的查詢壓力,就了解了下redis的相關信息。
二、我眼中的redis:
redis是一個開源的支持網絡、并可基于內存可持久化的Key-Value的數據庫,它提供多種語言的API(這里我用的是go的redis客戶端)。redis本質也是一種鍵值的數據庫
,但他在保持鍵值數據庫簡單快捷特點的同時,又吸收了部分關系型數據庫的優點。所以redis可以說是處于關系數據庫和鍵值數據庫之間的一種數據庫。下面就介紹下redis都能存儲哪些數據類型。
三、redis的幾種常用數據類型:
(1)String
String是最常用的一種數據類型,一般的key-value存儲都可采用String的數據類型來存儲。(這里value不僅僅可以是String也可以是數字,INCRBY可以通過原子遞增保持計數)
常用命令:get、set、incrby等。同時還提供獲取字符串長度、獲取字符串某一段內容等功能。
(2)Hash
Redis Hash是一種string類型的filed和value的映射表,hash特別適合存儲對象,redis中每個hash可以存儲2的32次方-1個鍵值對。
常用命令:
1.hset:設定指定的hash field (hset "hash1" "field" "test")
2.hmset:同時設定hash多個filed(hmset "hash1" "field1" "test1" "field2" "test2")
3.hget:獲取指定的hash值的field(hget "hash1" "field1")
4.hgetall:獲取所有的hash值數據(hgetall "hash1")
5.hmget:獲取hash值的多個field(hmget "hash1" "field1" "field2")
(3) List列表
列表類型可以存儲一個有序的字符串列表,常用的操作是向列表的兩端添加元素或獲得列表的某個片段;列表類型內部是用使用雙向鏈表實現的,故向列表的兩端插入元素時間復雜度都是O(1),獲取越接近兩端的元素,速度越快。
常用命令:
1.lpush:從左邊(即列表的頭)向list列表中插入數據(lpush "list1" "test1")
2.rpush: 從右邊(即列表的尾)向list列表中插入數據(rpush "list" "test1")
3.lpop:從列表左側(即列表的頭)彈出數據(lpop "list1")
4.rpop:從列表右側(即列表的尾)彈出數據(rpop "list1")
(4)Set集合
集合中的元素都是不同的,且沒有順序。一個集合類型一個鍵可以存儲2的32次方-1個字符串。集合類型的常用操作是向集合中加入或者刪除元素、判斷某個元素是否存在等,由于集合類型在redis內部是使用值為空的散列表實現,所以這些操作的時間復雜度是O(1)。值得一提的是多個集合類型的鍵值之間可以進行并集、交集、差集的運算。
常用命令:
(1)sadd:用來向集合中添加一個或者多個元素,如果鍵不存在則會自動創建。集合中不會有相同的元素,故若加入的元素已經存在則會忽略這個元素(sadd "set1" "test1" "test2")
(2)smembers:返回集合中的所有元素(smembers "set1")
(3)sdiff:計算差集(sdiff "set1" "set2")
(4)sinter:計算交集(sinter "set1" "set2")
(5)sunion:計算并集(sunion "set1" "set2")
(5)zset(Sorted set:有序集合)
在集合類型的基礎上有序集合類型為集合中的元素關聯了一個分數可以理解為權重,我們不僅可以完成插入,刪除和盤算元素是否存在等集合類型支持的操作,還能活著分數最高(或最低)的前N個元素,獲得指定分數范圍內的元素等于分數相關的操作。集合中的元素不同,但是分數可以相同。
常用命令:
(1)zadd:向有序集合中加入一個元素和該元素的分數,如果該元素已經存在則會用新的分數替換原來的分數。zadd返回值為新加入到集合中的元素個數(zadd scoreboard 89 test1 67 test2 80 test3)
(2)zscore key member:獲取元素的分數(zscore scoreboard test)
(3)zrange key start stop:按照元素分數從小到大順序返回索引從start到stop之間的所有元素(zrange scoreboard 0 -1)
新聞熱點
疑難解答