>[info] Redis 支持豐富的數(shù)據(jù)類(lèi)型:string(字符串)、list(列表)、set(集合)、hash(哈希)、zset(有序集合)
## **String (字符串)**
string 是 redis 最基本的類(lèi)型,string 類(lèi)型是二進(jìn)制安全的,意思是 redis 的 string 可以包含任何數(shù)據(jù),比如jpg圖片或者序列化的對(duì)象,string 類(lèi)型的值最大能存儲(chǔ) `512MB`。
### 實(shí)例
~~~
redis 127.0.0.1:6379> set runoob "菜鳥(niǎo)教程"
OK
redis 127.0.0.1:6379> get runoob
"菜鳥(niǎo)教程"
~~~
## **Hash (哈希)**
Redis hash 是一個(gè)鍵值(key=>value)對(duì)集合。鍵值對(duì)集合,理解為JS語(yǔ)言的對(duì)象即可: `{'name':'張三','age':18}`
### 實(shí)例
~~~
redis 127.0.0.1:6379> hmset runoob name 'jony' age '18' // 存儲(chǔ)一個(gè)對(duì)象{'name':'張三','age':18}
"OK"
redis 127.0.0.1:6379> hget runoob name //獲取hash類(lèi)型key為runoob的name字段
"jony"
redis 127.0.0.1:6379> hget runoob age
"18"
~~~
## **List(列表)**
Redis 列表是簡(jiǎn)單的字符串列表,按照插入順序排序。你可以添加一個(gè)元素到列表的頭部(左邊)或者尾部(右邊)。
理解為JS語(yǔ)言的數(shù)組即可:
```
["1","2","3","4","5"]
```
~~~
redis 127.0.0.1:6379> lpush runoob 1 //lpush 類(lèi)似于向數(shù)組的頭部添加元素,即js數(shù)組的unshift方法
(integer) 1
redis 127.0.0.1:6379> lpush runoob 2
(integer) 2
redis 127.0.0.1:6379> lpush runoob 3
(integer) 3
redis 127.0.0.1:6379> lrange runoob 0 10
1) "3"
2) "2"
3) "1"
//向list尾部添加數(shù)據(jù)
redis 127.0.0.1:6379>del runoob
(integer) 1
redis 127.0.0.1:6379>rpush runoob 1 //rpush 類(lèi)似于向數(shù)組的尾部添加元素,即js數(shù)組的push方法
(integer) 1
redis 127.0.0.1:6379>rpush runoob 2
(integer) 2
redis 127.0.0.1:6379>rpush runoob 3
(integer) 3
redis 127.0.0.1:6379> lrange runoob 0 10
1) "1"
2) "2"
3) "3"
~~~
## **Set(無(wú)序集合)**
Redis 的 Set 是 string 類(lèi)型的`無(wú)序集合`。
類(lèi)型JS語(yǔ)言的Set類(lèi)型
Set和List的區(qū)別:
* Set是可以自動(dòng)去重的,即值不會(huì)出現(xiàn)重復(fù)的
* Set提供了判斷某個(gè)成員是否在一個(gè)Set集合內(nèi)的重要接口,這個(gè)也是list所不能提供的。
* Set可以計(jì)算交集,并集,差集
添加一個(gè) string 元素到 key 對(duì)應(yīng)的 set 集合中,成功返回 1,如果元素已經(jīng)在集合中返回 0。
~~~
sadd key member
~~~
### 實(shí)例
~~~
redis 127.0.0.1:6379> sadd runoob redis
(integer) 1
redis 127.0.0.1:6379> sadd runoob mongodb
(integer) 1
redis 127.0.0.1:6379> sadd runoob redis //重復(fù)的值不會(huì)寫(xiě)入
(integer) 0
redis 127.0.0.1:6379> smembers runoob
1) "redis"
2) "mongodb"
~~~
## **Zset(sorted set:有序集合)**
Redis zset 和 set 一樣也是string類(lèi)型元素的集合,且不允許重復(fù)的成員。
**與Set的區(qū)別是:**
> Zset每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類(lèi)型的分?jǐn)?shù)權(quán)值。redis正是通過(guò)分?jǐn)?shù)權(quán)值來(lái)為集合中的成員進(jìn)行從小到大的排序。 zset的成員是唯一的,但分?jǐn)?shù)權(quán)值(score)卻可以重復(fù)。
~~~
redis 127.0.0.1:6379> zadd runoobkey 1 redis //帶有權(quán)重
(integer) 1
redis 127.0.0.1:6379> zadd runoobkey 2 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd runoobkey 3 mysql
(integer) 1
redis 127.0.0.1:6379> zadd runoobkey 3 mysql
(integer) 0
redis 127.0.0.1:6379> zadd runoobkey 4 mysql
(integer) 0
redis 127.0.0.1:6379> zrange runoobkey 0 10 withscores
1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "mysql"
6) "4"
~~~
### **各個(gè)數(shù)據(jù)類(lèi)型應(yīng)用場(chǎng)景:**
| 類(lèi)型 | 簡(jiǎn)介 | 特性 | 場(chǎng)景 |
| --- | --- | --- | --- |
| String(字符串) | 二進(jìn)制安全 | 可以包含任何數(shù)據(jù),比如jpg圖片或者序列化的對(duì)象,一個(gè)鍵最大能存儲(chǔ)512M | \--- |
| Hash(哈希) | 鍵值對(duì)集合,即編程語(yǔ)言中的Map類(lèi)型 | 適合存儲(chǔ)對(duì)象,并且可以像數(shù)據(jù)庫(kù)中update一個(gè)屬性一樣只修改某一項(xiàng)屬性值(Memcached中需要取出整個(gè)字符串反序列化成對(duì)象修改完再序列化存回去) | 存儲(chǔ)、讀取、修改用戶(hù)屬性 |
| List(列表) | 鏈表(雙向鏈表) | 增刪快,提供了操作某一段元素的API | 1,最新消息排行等功能(比如朋友圈的時(shí)間線) 2,消息隊(duì)列 |
| Set(集合) | 哈希表實(shí)現(xiàn),元素不重復(fù) | 1、添加、刪除,查找的復(fù)雜度都是O(1) 2、為集合提供了求交集、并集、差集等操作 | 1、共同好友 2、利用唯一性,統(tǒng)計(jì)訪問(wèn)網(wǎng)站的所有獨(dú)立ip 3、好友推薦時(shí),根據(jù)tag求交集,大于某個(gè)閾值就可以推薦 |
| Sorted Set(有序集合) | 將Set中的元素增加一個(gè)權(quán)重參數(shù)score,元素按score有序排列 | 數(shù)據(jù)插入集合時(shí),已經(jīng)進(jìn)行天然排序 | 1、排行榜 2、帶權(quán)重的消息隊(duì)列 |
- PHP
- 面向?qū)ο?/a>
- 設(shè)計(jì)模式
- 單例模式
- 工廠模式
- 觀察者模式
- 正則表達(dá)式
- 容器和依賴(lài)注入
- 消息隊(duì)列
- 什么是消息隊(duì)列
- 消息隊(duì)列的作用和使用場(chǎng)景
- 消息隊(duì)列實(shí)現(xiàn)原理
- 消息隊(duì)列的常見(jiàn)問(wèn)題
- Redis
- Mac下安裝Redis
- Redis的配置
- Redis數(shù)據(jù)類(lèi)型
- Redis數(shù)據(jù)持久化
- phpredis
- 安裝
- 使用
- redis緩存穿透、緩存擊穿、緩存雪崩
- redis和mysql數(shù)據(jù)一致性
- 定時(shí)任務(wù)
- 鎖機(jī)制
- Mysql
- Liunx
- LNMP
- 進(jìn)程和線程
