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)論哦~