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