NoSQL-Redis入門(二)

Redis要點(diǎn):

1.關(guān)鍵字(keys)用于標(biāo)識(shí)一段數(shù)據(jù)的字符串
2.值(values)是一段任意的字節(jié)序列,Redis不會(huì)關(guān)注他們實(shí)質(zhì)是什么
3.Redis展示了5種專門的數(shù)據(jù)結(jié)構(gòu)
4.上面幾點(diǎn)使得Redis快速而且容易使用,但Redis不適用于所有的應(yīng)用場(chǎng)景

1.Redis的數(shù)據(jù)結(jié)構(gòu)


每種數(shù)據(jù)結(jié)構(gòu)的要點(diǎn)包括:

1.是什么?
2.包含的有效方法
3.使用這些數(shù)據(jù)結(jié)構(gòu)能處理哪些類型的特性和數(shù)據(jù)

1.1 字符串(String)
在Redis里,字符串是最基本的數(shù)據(jù)結(jié)構(gòu)。
for example

set users:leto "{name: leto, planet: dune, likes: [spice]}"

Redis是怎么知道我們是在使用哪個(gè)數(shù)據(jù)結(jié)構(gòu)?其解決方法是,每個(gè)命令都相對(duì)應(yīng)于一種特定的數(shù)據(jù)結(jié)構(gòu)。例如,當(dāng)你使用 set 命令,你就是將值存儲(chǔ)到一個(gè)字符串?dāng)?shù)據(jù)結(jié)構(gòu)里。而當(dāng)你使用 hset 命令,你就是將值存儲(chǔ)到一個(gè)散列數(shù)據(jù)結(jié)構(gòu)里。考慮到Redis的關(guān)鍵字集很小,這樣的機(jī)制具有相當(dāng)?shù)目晒芾硇浴?br> 正如上述:
我們已經(jīng)看到了一個(gè)常見(jiàn)的字符串使用案例,即通過(guò)關(guān)鍵字存儲(chǔ)對(duì)象的實(shí)例。
我們可以通過(guò)下面的命令進(jìn)行實(shí)操:

127.0.0.1:6379> set user:liutao "{name:liutao,age:23,likes[ad,dd]}"
OK
127.0.0.1:6379> get user:liutao
"{name:liutao,age:23,likes[ad,dd]}"
127.0.0.1:6379> strlen user:liutao
(integer) 33
127.0.0.1:6379> getrange user:liutao 27 40
"d,dd]}"
127.0.0.1:6379> append user:liutao ",sex:male"
(integer) 42
127.0.0.1:6379>

get: 根據(jù)關(guān)鍵字獲取關(guān)鍵字對(duì)應(yīng)的值
strlen:獲取關(guān)鍵字對(duì)應(yīng)的值的長(zhǎng)度
getrange:獲取關(guān)鍵字對(duì)應(yīng)的值從起始索引到末尾索引的值
append: 在關(guān)鍵字對(duì)應(yīng)值末尾添加新的字符串

string類型是Redis最基本的數(shù)據(jù)類型,一個(gè)鍵最大能存儲(chǔ)512MB。

1.2 Hash(哈希)
Redis hash 是一個(gè)鍵值對(duì)集合
Redis hash是一個(gè)string類型的field和value的映射表,hash特別適合用于存儲(chǔ)對(duì)象。


for example

127.0.0.1:6379> hmset user name zhangxiao age 23 sex famale
OK
127.0.0.1:6379> hgetall user
1) "name"
2) "zhangxiao"
3) "age"
4) "23"
5) "sex"
6) "famale"
127.0.0.1:6379>

以上實(shí)例中 hash 數(shù)據(jù)類型存儲(chǔ)了包含用戶腳本信息的用戶對(duì)象。 實(shí)例中我們使用了 Redis hmset,hgetall 命令,user 為鍵值。
每個(gè) hash 可以存儲(chǔ) 232
-1 鍵值對(duì)(40多億)。

1.3 List(列表)
Redis 列表是簡(jiǎn)單的字符串列表,按照插入順序排序。你可以添加一個(gè)元素到列表的頭部(左邊)或者尾部(右邊)。
for example

127.0.0.1:6379> lpush zhangxiao 13 175cm
(integer) 4
127.0.0.1:6379> lrange zhangxiao 0 1
1) "175cm"
2) "13"
127.0.0.1:6379>

lpush 向redis集合中存儲(chǔ)一系列字符串,使用lrange [start][end] 獲取相應(yīng)的元素值。
列表最多可存儲(chǔ) 232

  • 1 元素 (4294967295, 每個(gè)列表可存儲(chǔ)40多億)。

1.4 Set(集合)
Redis的Set是string類型的無(wú)序集合。
集合是通過(guò)哈希表實(shí)現(xiàn)的,所以添加,刪除,查找的復(fù)雜度都是O(1)。
for example

127.0.0.1:6379> sadd ages 11
(integer) 1
127.0.0.1:6379> add ages 12
(error) ERR unknown command 'add'
127.0.0.1:6379> sadd ages 14
(integer) 1
127.0.0.1:6379> sadd ages 14
(integer) 0
127.0.0.1:6379> sadd ages 15
(integer) 1
127.0.0.1:6379> smembers ages
1) "11"
2) "14"
3) "15"
127.0.0.1:6379>

可以看到我們?yōu)閍ges集合添加了兩次14 ,但是最終set集合中只存在一個(gè)14,這是因?yàn)閟et集合中的元素唯一性導(dǎo)致的,第二次插入的元素將被忽略。集合中最大的成員數(shù)為 2的32次方 - 1(4294967295, 每個(gè)集合可存儲(chǔ)40多億個(gè)成員)。

** 1.5 zset(sorted set:有序集合)**
Redis zset 和 set 一樣也是string類型元素的集合,且不允許重復(fù)的成員。
不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類型的分?jǐn)?shù)。redis正是通過(guò)分?jǐn)?shù)來(lái)為集合中的成員進(jìn)行從小到大的排序。
zset的成員是唯一的,但分?jǐn)?shù)(score)卻可以重復(fù)。
for example

127.0.0.1:6379> zadd nums 0 11
(integer) 0
127.0.0.1:6379> zadd nums 1 12
(integer) 1
127.0.0.1:6379> zadd nums 2 13
(integer) 1
127.0.0.1:6379> zrangebyscore nums 0 2
1) "11"
2) "12"
3) "13"

Redis zset 和 set 一樣也是string類型元素的集合,且不允許重復(fù)的成員。
不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類型的分?jǐn)?shù)。redis正是通過(guò)分?jǐn)?shù)來(lái)為集合中的成員進(jìn)行從小到大的排序。
zset的成員是唯一的,但分?jǐn)?shù)(score)卻可以重復(fù)。
基本的數(shù)據(jù)結(jié)構(gòu)就是這些,接下來(lái)我會(huì)更加詳細(xì)的來(lái)進(jìn)行記錄。

博客搬家:大坤的個(gè)人博客
歡迎評(píng)論哦~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Redis 數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)介 Redis 可以存儲(chǔ)鍵與5種不同數(shù)據(jù)結(jié)構(gòu)類型之間的映射,這5種數(shù)據(jù)結(jié)構(gòu)類型分別為Stri...
    DreamerRzc閱讀 237,471評(píng)論 26 273
  • Redis的內(nèi)存優(yōu)化 聲明:本文內(nèi)容來(lái)自《Redis開(kāi)發(fā)與運(yùn)維》一書第八章,如轉(zhuǎn)載請(qǐng)聲明。 Redis所有的數(shù)據(jù)都...
    meng_philip123閱讀 19,071評(píng)論 2 29
  • 本文為筆者對(duì)在學(xué)習(xí)Redis過(guò)程中所收集資料的一個(gè)總結(jié),目的是為了以后方便回顧相關(guān)的知識(shí),大部分為非原創(chuàng)內(nèi)容。特此...
    EakonZhao閱讀 14,634評(píng)論 0 9
  • ——· 關(guān)于本書 ·—— 《影響力》是經(jīng)過(guò)多年的實(shí)驗(yàn)研究得出的結(jié)論,作者深入銷售員、籌款家、廣告商等人的世界,從內(nèi)...
    玲玲A閱讀 655評(píng)論 0 2
  • 女兒的積分制獎(jiǎng)勵(lì)
    倆千金的媽閱讀 185評(píng)論 0 0

友情鏈接更多精彩內(nèi)容