本文地址:http://www.reibang.com/p/9942f1d65adc
一囤锉、簡(jiǎn)介
在Redis
之中婶博,使用的是key-value
來(lái)存儲(chǔ)數(shù)據(jù)榔昔,但實(shí)際上蜈项,Redis并不是一個(gè)簡(jiǎn)單的鍵值對(duì)存儲(chǔ)數(shù)據(jù)庫(kù)聘殖。在key-value
中的value
晨雳,不僅僅可以存儲(chǔ)字符串,還可以支持多種數(shù)據(jù)結(jié)構(gòu)奸腺,這使得Redis中的鍵值對(duì)餐禁,其所扮演的角色其實(shí)與關(guān)系型數(shù)據(jù)庫(kù)中的表類似。
Redis中主要支持五種常見數(shù)據(jù)類型:
-
String
- 二進(jìn)制安全的字符串類型突照,可以存儲(chǔ)文本帮非,圖片等信息。 -
List
- 基本上是一個(gè)存儲(chǔ)字符串元素的雙向鏈表讹蘑。 -
Hash
- 哈希類型末盔,是由鍵值對(duì)組成的集合。里面存儲(chǔ)的鍵值對(duì)的key
和value
都是字符串類型座慰。 -
Set
- 元素唯一且無(wú)序的集合類型陨舱。 -
Sorted Set
- 一個(gè)有序的集合,順序由插入時(shí)的浮點(diǎn)數(shù)分?jǐn)?shù)決定角骤。
二隅忿、Key
Redis存儲(chǔ)的鍵值對(duì)中的key
,是二進(jìn)制安全的邦尊,也就是說(shuō)你既可以使用普通的字符串來(lái)做key
背桐,也可以使用二進(jìn)制的數(shù)據(jù),例如圖片蝉揍,甚至空字符也是有效的链峭。
但是依然有幾條規(guī)則需要遵守:
- 同一個(gè)數(shù)據(jù)庫(kù)中的key不可重名。
- key的最大值為512MB又沾。
- key不應(yīng)該過(guò)長(zhǎng)弊仪。這不僅僅是因?yàn)閮?nèi)存上的考慮熙卡,當(dāng)key過(guò)長(zhǎng)時(shí),查詢等命令將會(huì)因?yàn)閗ey過(guò)長(zhǎng)而花費(fèi)更多的時(shí)間在key的比較上励饵。
- key同樣不應(yīng)該太短驳癌。key的命名同樣需要考慮可讀性,例如
"user:1000:followers"
就比"u1000flw"
好役听,需要在key命名的長(zhǎng)度上找到一個(gè)平衡點(diǎn)颓鲜。
在Redis中,基本上每種數(shù)據(jù)類型都有自己獨(dú)特的命令典予,這部分命令是不能混著用的甜滨。但是也有一部分命令是每個(gè)類型的key都可以使用的。
命令:
命令 | 作用 |
---|---|
DEL key |
key存在時(shí)刪除key |
EXISTS key |
檢查key是否存在 |
TYPE key |
查看key的類型 |
RENAME key newkey |
將key重命名 |
RENAMENX key newkey |
只有當(dāng)newkey不存在時(shí)瘤袖,才進(jìn)行重命名 |
KEYS pattern |
查找key |
RANDOMKEY |
從當(dāng)前數(shù)據(jù)庫(kù)隨機(jī)獲取一個(gè)key |
MOVE key db |
將這個(gè)key移動(dòng)到指定的另一個(gè)數(shù)據(jù)庫(kù) |
DUMP key |
序列化key衣摩,并返回被序列化的值 |
EXPIRE key second |
以秒為單位給key設(shè)定過(guò)期時(shí)間 |
PEXPIRE key milliseconds |
以豪秒為單位給key設(shè)定過(guò)期時(shí)間 |
EXPIREAT key timestamp |
把一個(gè)時(shí)間戳設(shè)置為key的過(guò)期時(shí)間 |
PEXPIREAT key mill-timestamp |
把一個(gè)毫秒級(jí)別的時(shí)間戳設(shè)置為key的過(guò)期時(shí)間 |
PERSIST key |
移除key的過(guò)期時(shí)間 |
TTL key |
以秒為單位返回key的過(guò)期時(shí)間 |
PTTL key |
以豪秒為單位返回key的過(guò)期時(shí)間 |
三、String類型
字符串類型時(shí)Redis中最為基礎(chǔ)的類型捂敌,且是二進(jìn)制安全的艾扮,所以可以存儲(chǔ)字符串、圖片占婉、數(shù)字等各種數(shù)據(jù)栏渺。
如果字符串中存儲(chǔ)的為純數(shù)字的話,還可以做一定的簡(jiǎn)單計(jì)算锐涯。
命令:
命令 | 作用 |
---|---|
SET key value |
給key設(shè)定或更新值 |
SETNX key value |
只有當(dāng)key不存在時(shí)才給key設(shè)定值 |
SETEX key second value |
給key設(shè)定值,并且設(shè)定一個(gè)秒為單位的過(guò)期時(shí)間 |
PSETEX key milliseconds value |
給key設(shè)定值填物,并且設(shè)定一個(gè)豪秒為單位的過(guò)期時(shí)間 |
SETRANGE key offset value |
從offset開始纹腌,覆蓋key的一部分 |
MSET key value [key value ...] |
同時(shí)設(shè)置多個(gè)鍵值對(duì) |
MSETNX key value [key value ...] |
僅當(dāng)列出的key都不存在時(shí),同時(shí)設(shè)置多個(gè)鍵值對(duì) |
GET key |
獲取key的value |
MGET key1 [key2..] |
一次獲取多個(gè)key的value |
GETSET key value |
給key設(shè)定一個(gè)新的value滞磺,獲取舊的value并返回 |
GETRANGE key start end |
獲取value中指定位置的內(nèi)容 |
STRLEN key |
返回key中value的長(zhǎng)度 |
APPEND key value |
將值添加到 |
INCR key |
將key存儲(chǔ)的數(shù)字加1 |
INCRBY key increment |
將key存儲(chǔ)的數(shù)字加上指定的數(shù)值 |
INCRBYFLOAT key increment |
將key存儲(chǔ)的數(shù)字加上指定的浮點(diǎn)數(shù)數(shù)值 |
DECR key |
將key存儲(chǔ)的數(shù)字減1 |
DECRBY key decrement |
將key存儲(chǔ)的數(shù)字減去指定的數(shù)值 |
四升薯、List類型
簡(jiǎn)單來(lái)說(shuō),Redis的List
基本上就是一個(gè)雙向鏈表击困,可以分別在頭部或者尾部添加刪除數(shù)據(jù)涎劈,每一個(gè)List
類型的key最多可以存儲(chǔ)4294967295個(gè)元素。
基于這樣的特性阅茶,Redis中的List
常常被用來(lái)做消息隊(duì)列之類的事情蛛枚。
命令:
命令 | 作用 |
---|---|
LPUSH key value1 [value2] |
在List頭部插入一個(gè)或多個(gè)值 |
RPUSH key value1 [value2] |
在List尾部插入一個(gè)或多個(gè)值 |
LPUSHX key value |
在List頭部插入一個(gè)或多個(gè)值,key不存在則報(bào)錯(cuò) |
RPUSHX key value |
在List尾部插入一個(gè)或多個(gè)值脸哀,key不存在則報(bào)錯(cuò) |
LPOP key |
移除并返回List頭部第一個(gè)元素 |
RPOP key |
移除并返回List尾部最后一個(gè)元素 |
RPOPLPUSH source destination |
移除列表尾部最后一個(gè)元素蹦浦,添加到另一個(gè)列表頭部 |
LINDEX key index |
根據(jù)列表索引查看元素的值 |
LLEN key |
查看List的長(zhǎng)度 |
LRANGE key start stop |
查看一定索引范圍內(nèi)的元素 |
LREM key count value |
刪除等于value的元素,如果count為0撞蜂,則刪除所有相等元素 |
LINSERT key BEFORE|AFTER pivot value |
將value插入到列表中盲镶,位于pivot之前或之后 |
LSET key index value |
根據(jù)index指定修改元素 |
LTRIM key start stop |
切片裁剪List |
BLPOP key1 [key2 ] timeout |
移除并返回列表頭部第一個(gè)元素侥袜,如果沒有元素則阻塞列表直到有元素為止 |
BRPOP key1 [key2 ] timeout |
移除并返回列表尾部最后一個(gè)元素,如果沒有元素則阻塞列表直到有元素為止 |
BRPOPLPUSH source destination timeout |
移除列表尾部最后一個(gè)元素溉贿,添加到另一個(gè)列表頭部枫吧,如果沒有元素則阻塞列表直到有元素為止 |
五、Hash類型
Redis的Hash
類型則跟人們所期望的傳統(tǒng)'hash'
類型基本相同宇色,是一個(gè)由field-value
鍵值對(duì)組成的集合九杂。其中field
和value
都是字符串類型。
眾所周知代兵,hash
類型都非常適合用于保存對(duì)象尼酿。而且值得注意的是,大小較小的hash
(元素較少植影、值比較短)以特殊的方式存儲(chǔ)在內(nèi)存中裳擎,使得其讀寫效率非常之高。
命令:
命令 | 作用 |
---|---|
HSET key field value |
添加或修改一個(gè)字段的值 |
HMSET key field1 value1 [field2 value2 ] |
同時(shí)添加或修改一個(gè)或多個(gè)字段的值 |
HSETNX key field value |
只有當(dāng)字段不存在時(shí)思币,才添加一個(gè)字段的值 |
HLEN key |
獲取所有字段的數(shù)量 |
HSTRLEN key field |
c查看key中指定字段的value的長(zhǎng)度 |
HEXISTS key field |
查看字段是否存在 |
HDEL key field1 [field2] |
刪除一個(gè)或多個(gè)字段 |
HGET key field |
獲取某一個(gè)字段的值 |
HMGET key field1 [field2] |
獲取一個(gè)或多個(gè)字段的值 |
HKEYS key |
獲取一個(gè)key中所有的field |
HVALS key |
獲取一個(gè)key中所有的value |
HGETALL key |
獲取一個(gè)key中所有field和value |
HINCRBY key field increment |
給指定字段的value加上指定的increment數(shù)值 |
HINCRBYFLOAT key field increment |
給指定字段的value加上指定的increment浮點(diǎn)數(shù)數(shù)值 |
六鹿响、Set類型
Set
類型是由字符串類型元素構(gòu)成的無(wú)序集合,其元素必須是唯一的谷饿。由于Redis中的集合類型都是通過(guò)HASH表實(shí)現(xiàn)的惶我,所以其添加、查找博投、刪除的復(fù)雜度都是O(1)绸贡。
Redis中還給集合類型提供了求交集、并集毅哗、差集等操作听怕。
命令:
命令 | 作用 |
---|---|
SADD key member1 [member2] |
給集合添加一個(gè)或多個(gè)元素 |
SCARD key |
返回集合的成員數(shù)量 |
SISMEMBER key member |
判斷元素是否是集合的成員 |
SMEMBERS key |
返回集合中所有的成員 |
SRANDMEMBER key [count] |
隨機(jī)返回集合中一個(gè)或多個(gè)元素 |
SREM key member1 [member2] |
移除集合中的一個(gè)或多個(gè)元素 |
SPOP key |
隨機(jī)移除并返回集合中的一個(gè)元素 |
SMOVE source destination member |
將一個(gè)元素member從source集合移動(dòng)到destination集合 |
SDIFF key1 [key2] |
返回給定的所有集合的差集 |
SDIFFSTORE destination key1 [key2] |
返回給定的所有集合的差集,并存儲(chǔ)到destination集合中 |
SINTER key1 [key2] |
返回給定的所有集合的交集 |
SINTERSTORE destination key1 [key2] |
返回給定的所有集合的交集虑绵,并存儲(chǔ)到destination集合中 |
SUNION key1 [key2] |
返回給定的所有集合的并集 |
SUNIONSTORE destination key1 [key2] |
返回給定的所有集合的并集尿瞭,并存儲(chǔ)到destination集合中 |
七、Sorted Set類型
在Redis中翅睛,Sorted Set
比較像是一個(gè)混合了Set
和Hash
兩種類型特點(diǎn)的數(shù)據(jù)類型声搁。首先,在Sorted Set
中捕发,存儲(chǔ)的元素是唯一不可重復(fù)的字符串類型疏旨,所以說(shuō)其在某種意義上是一種集合。
但是Set
中的元素是無(wú)序的爬骤,而Sorted Set
中的每個(gè)元素都與一個(gè)浮點(diǎn)數(shù)相關(guān)聯(lián)充石,這個(gè)浮點(diǎn)數(shù)被稱為Score(分?jǐn)?shù))
,通過(guò)這個(gè)分?jǐn)?shù),Sorted Set
實(shí)現(xiàn)了有序排列骤铃。這是其與Hash
類型類似的地方拉岁,每一個(gè)元素都映射著一個(gè)Score
。
Sorted Set
中的順序主要由兩個(gè)規(guī)則決定:
- 首先惰爬,一般情況下由
Score
決定順序喊暖。 - 如果出現(xiàn)有兩個(gè)或者兩個(gè)以上元素的
Score
相同,這個(gè)時(shí)候由元素字符串的字典順序決定先后撕瞧。
命令:
命令 | 作用 |
---|---|
ZADD key score1 member1 [score2 member2] |
添加或更新一個(gè)或多個(gè)元素及其分?jǐn)?shù) |
ZCARD key |
獲取集合中元素的數(shù)量 |
ZCOUNT key min max |
獲取指定分?jǐn)?shù)范圍內(nèi)元素的數(shù)量 |
ZSCORE key member |
獲取某個(gè)元素的分?jǐn)?shù) |
ZRANK key member |
獲取某個(gè)元素的排名 |
ZLEXCOUNT key min max |
獲取指定區(qū)間內(nèi)元素的數(shù)量 |
ZRANGE key start stop [WITHSCORES] |
返回指定排名區(qū)間內(nèi)的元素 |
ZRANGEBYLEX key min max [LIMIT offset count] |
返回指定區(qū)間內(nèi)的元素 |
ZRANGEBYSCORE key min max [WITHSCORES][LIMIT] |
返回指定分?jǐn)?shù)區(qū)間內(nèi)的元素 |
ZINCRBY key increment member |
給指定元素的分?jǐn)?shù)加上increment數(shù)值 |
ZREM key member [member ...] |
移除一個(gè)或多個(gè)元素 |
ZREMRANGEBYRANK key start stop |
移除排名區(qū)間內(nèi)的元素 |
ZREMRANGEBYSCORE key min max |
移除分?jǐn)?shù)區(qū)間內(nèi)的元素 |