前言
Redis是一個(gè)key-value的數(shù)據(jù)庫(kù),key一般是String類(lèi)型,但是value的類(lèi)型多種多樣
在學(xué)習(xí)Redis不同數(shù)據(jù)類(lèi)型時(shí),我們可以在官網(wǎng)( Redis官網(wǎng))查看不同的命令:
也可以使用使用help @xxx 命令的方式查看
一、Redis通用命令
通用命令是部分?jǐn)?shù)據(jù)類(lèi)型都可以使用的指令,常見(jiàn)的有:
-
KEYS:查看符合模板的所有key(支持*或?的模糊查詢(xún)),不建議在生產(chǎn)環(huán)境設(shè)備使用
-
DEL:刪除一個(gè)指定的key
-
EXISTS:判斷key是否存在
-
EXPIRE:給一個(gè)key設(shè)置有效期,有效期到期后該key會(huì)自動(dòng)刪除
-
TTL:查看一個(gè)KEY的剩余有效期
那我們不設(shè)置expire它的默認(rèn)有效期是多久呢?
-1代表永久有效
二、String類(lèi)型
String類(lèi)型也就是字符串類(lèi)型,是Redis最簡(jiǎn)單的存儲(chǔ)類(lèi)型,其value是字符串,不過(guò)根據(jù)字符串的格式不同,又可以分為以下三類(lèi):
- String:普通字符串
- int:整型類(lèi)型,可以自增自減操作
- float:浮點(diǎn)類(lèi)型,可以自增自減操作
不管那種格式,底層都是字節(jié)數(shù)組形式存儲(chǔ),只不過(guò)編碼方式不同。字符串類(lèi)型最大空間不能超過(guò)512m
String常見(jiàn)命令:
命令 | 作用 |
---|---|
SET | 添加或修改一個(gè)已經(jīng)存在的String類(lèi)型的鍵值對(duì) |
GET | 根據(jù)key獲取String類(lèi)型的value |
MSET | 批量添加多個(gè)String 類(lèi)型的鍵值對(duì) |
MGET | 根據(jù)多個(gè)key獲取多個(gè)String類(lèi)型的value |
INCR | 讓一個(gè)整型的key自增1 |
INCRBY | 讓一個(gè)整型的key自增并指定步長(zhǎng) incrby age 2 讓age自增2 |
INCRBYFLOAT | 讓一個(gè)浮點(diǎn)類(lèi)型的數(shù)字自增并指定步長(zhǎng) |
SETNX | 添加一個(gè)String類(lèi)型的鍵值對(duì),前提是key不存在,否則不執(zhí)行 |
SETEX | 添加一個(gè)String類(lèi)型的鍵值對(duì),并指定有效期 |
SET與GET:
MSET與MGET:
INCR:
INCRBY:
INCRBYFLOAT:
SETNX:
SETEX:
三、Key的層級(jí)結(jié)構(gòu)
Redis中沒(méi)有MySQL中Table的概念,我們?nèi)绾螀^(qū)別不同類(lèi)型的key呢?
Redis的Key允許有多個(gè)單詞形成層級(jí)結(jié)構(gòu),多個(gè)單詞之間用 : 隔開(kāi),如下:項(xiàng)目名:業(yè)務(wù)名:類(lèi)型:id,這個(gè)格式不是固定的,我們可以根據(jù)實(shí)際需要來(lái)調(diào)整
比如:student的key:snut:student:1,teacher的key:snut:teacher:1
我們?cè)诳蛻?hù)端看起來(lái)好像沒(méi)什么區(qū)別,我們?cè)趫D形化工具查看一下
四、Hash類(lèi)型
Hash類(lèi)型,也叫散列,其value是一個(gè)無(wú)序字典,類(lèi)似于Java中的HashMap結(jié)構(gòu)
String結(jié)構(gòu)是將Java對(duì)象序列化為JSON字符串進(jìn)行存儲(chǔ),如果我們想要去修改對(duì)象某個(gè)字段時(shí)會(huì)很不方便
Hash結(jié)構(gòu)可以將每個(gè)對(duì)象的每個(gè)字段獨(dú)立存儲(chǔ),針對(duì)每個(gè)字段可以進(jìn)行CRUD
Hash的常見(jiàn)命令:
命令 | 作用 |
---|---|
HSET key field value | 添加或修改hash類(lèi)型的key的field的值 |
HSET key field | 獲取一個(gè)hash類(lèi)型key的field的值 |
HMSET | 批量添加多個(gè)hash類(lèi)型key的field的值 |
HMGET | 批量獲取多個(gè)hash類(lèi)型key的field的值 |
HGETALL | 獲取一個(gè)hash類(lèi)型的key中所有的field和value |
HKEYS | 獲取一個(gè)hash類(lèi)型的key中所有的field |
HVALS | 獲取一個(gè)hash類(lèi)型的key中所有的value |
HINCRBY | 讓一個(gè)hash類(lèi)型的key字段自增并指定步長(zhǎng) |
HSETNX | 添加一個(gè)hash類(lèi)型key的field值,前提是field不存在,否則不執(zhí)行 |
HSET與HGET:
HMSET與HMGET:
HGETALL:
HKEYS與KVALS:
HINCRBY:
HSETNX:
五、List類(lèi)型
Redis中的List類(lèi)型與Java中的LinkedList類(lèi)似,可以看作是一個(gè)雙向鏈表結(jié)構(gòu),支持正向檢索也支持反向檢索。有以下特征:
- 有序
- 元素可重復(fù)
- 插入和刪除速度快
- 查詢(xún)速度一般
經(jīng)常用來(lái)存儲(chǔ)一個(gè)有序的集合,比如評(píng)論區(qū)列表,微博點(diǎn)贊列表等
List常見(jiàn)命令:
命令 | 作用 |
---|---|
LPUSH Key element | 向列表左插入一個(gè)或多個(gè)元素 |
LPOP Key | 移除并返回左側(cè)第一個(gè)元素,沒(méi)有則返回nil |
RPUSH Key element | 向列表右插入一個(gè)或多個(gè)元素 |
RPOP Key | 移除并返回右側(cè)第一個(gè)元素 |
LRANGE key star end | 返回一段范圍內(nèi)的所有元素 |
BLPOP和BRPOP | 與LPOP與RPOP類(lèi)似,不過(guò)在沒(méi)有元素時(shí)等待指定時(shí)間,而不是直接返回nil |
大家需要理清楚LPUSH與RPUSH的區(qū)別:
LPOP與RPOP:
LRANGE:
大家需要注意我們這里的下標(biāo)是從0開(kāi)始的
如何使用List結(jié)構(gòu)模擬一個(gè)棧?
入口和出口設(shè)置在同一邊
如何使用List結(jié)構(gòu)模擬一個(gè)隊(duì)列?
入口和出口在不同邊
如何使用List結(jié)構(gòu)模擬一個(gè)阻塞隊(duì)列?
入口和出口在不同邊,出隊(duì)時(shí)采用BLPOP或BRPOP
六、Set類(lèi)型
Redis的Set結(jié)構(gòu)與Java中的HashSet類(lèi)型,可以背看作是一個(gè)value為null的HashMap。有以下特征:
- 無(wú)序
- 元素不可重復(fù)
- 查找快
- 支持交集、并集、差集等功能
Set單個(gè)集合常見(jiàn)命令:
命令 | 作用 |
---|---|
SADD key member | 向set中添加一個(gè)或多個(gè)元素 |
SREM key member | 移除set中指定元素 |
SCARD key | 返回set中元素的個(gè)數(shù) |
SISMEMBER key member | 判斷一個(gè)元素是否存在于set中 |
SMEMBERS | 獲取set中的所有元素 |
Set多個(gè)集合常見(jiàn)命令:
命令 | 作用 |
---|---|
SINTER key1 key2 | 求key1與key2的交集 |
SDIFF key1 key2 | 求key1與key2的差集 |
SUNION key1 key2 | 求key1與key2的并集 |
七、SortedSet類(lèi)型
Redis的SortedSet是一個(gè)可排序的set集合,與Java的TreeSet有些類(lèi)似,但底層數(shù)據(jù)結(jié)構(gòu)差別很大,SortedSet中的每一個(gè)元素帶有一個(gè)score屬性,可以針對(duì)score屬性進(jìn)行排序,底層的實(shí)現(xiàn)是一個(gè)跳表+hash表,有以下特性:
- 可排序
- 元素不重復(fù)
- 查詢(xún)速度快
SortedSet常見(jiàn)命令:
命令 | 作用 |
---|---|
ZADD key score member | 添加一個(gè)或多個(gè)元素到SortedSet,如果已經(jīng)存在更新score |
ZREM key member | 刪除SortedSet中的指定元素 |
ZSCORE key member | 獲取SortedSet中指定元素的score值 |
ZRANK key member | 獲取SortedSet中指定元素的排名 |
ZCARD key | 獲取SortedSet中元素的個(gè)數(shù) |
ZCOUNT key min max | 統(tǒng)計(jì)score值在給定范圍內(nèi)的個(gè)數(shù) |
ZINCRBY key increment member | 讓SortedSet中指定元素自增,步長(zhǎng)為指定的increment |
ZRANGE key min max | 按照score排序后,獲取指定排名范圍內(nèi)的元素 |
ZDIFF、ZINTER、ZUNION | 求差集、交集、并集 |
上述命令練習(xí):
-
將下列學(xué)生得分存入Redis的SortedSet中:Jack 85,Lucy 89,Rose 82,Tom 95,Jerry 78,Amy 92,Miles 76
-
刪除Tom同學(xué)
-
獲取Amy同學(xué)的分?jǐn)?shù)
-
獲取Rose同學(xué)的排名
需要注意的是我們Sorted是升序,想要獲取排名需要逆序(ZREVRANK),并且下標(biāo)是從0開(kāi)始的 -
給Amy同學(xué)加2分
-
查詢(xún)成績(jī)前三的同學(xué)
我們?nèi)孕枰嫘虿樵?xún) -
查詢(xún)80分以下有幾個(gè)學(xué)生
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-534288.html
-
查詢(xún)80分以下的所有同學(xué)
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-534288.html
到了這里,關(guān)于Redis常見(jiàn)數(shù)據(jù)結(jié)構(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!