Redis-2.數(shù)據(jù)類型和命令

本文地址: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ù)類型:

  1. String - 二進(jìn)制安全的字符串類型突照,可以存儲(chǔ)文本帮非,圖片等信息。
  2. List - 基本上是一個(gè)存儲(chǔ)字符串元素的雙向鏈表讹蘑。
  3. Hash - 哈希類型末盔,是由鍵值對(duì)組成的集合。里面存儲(chǔ)的鍵值對(duì)的keyvalue都是字符串類型座慰。
  4. Set - 元素唯一且無(wú)序的集合類型陨舱。
  5. 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ī)則需要遵守:

  1. 同一個(gè)數(shù)據(jù)庫(kù)中的key不可重名。
  2. key的最大值為512MB又沾。
  3. 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的比較上励饵。
  4. 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ì)組成的集合九杂。其中fieldvalue都是字符串類型。

眾所周知代兵,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è)混合了SetHash兩種類型特點(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)的元素
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末陵叽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子丛版,更是在濱河造成了極大的恐慌巩掺,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件页畦,死亡現(xiàn)場(chǎng)離奇詭異胖替,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)豫缨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門独令,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人好芭,你說(shuō)我怎么就攤上這事燃箭。” “怎么了舍败?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵招狸,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我邻薯,道長(zhǎng)瓢颅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任弛说,我火速辦了婚禮,結(jié)果婚禮上翰意,老公的妹妹穿的比我還像新娘木人。我一直安慰自己,他們只是感情好冀偶,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布醒第。 她就那樣靜靜地躺著,像睡著了一般进鸠。 火紅的嫁衣襯著肌膚如雪稠曼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天客年,我揣著相機(jī)與錄音霞幅,去河邊找鬼漠吻。 笑死,一個(gè)胖子當(dāng)著我的面吹牛司恳,可吹牛的內(nèi)容都是我干的途乃。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼扔傅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼耍共!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起猎塞,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤试读,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后荠耽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钩骇,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年骇塘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了伊履。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡款违,死狀恐怖唐瀑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情插爹,我是刑警寧澤哄辣,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站赠尾,受9級(jí)特大地震影響力穗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜气嫁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一当窗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧寸宵,春花似錦崖面、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至甲棍,卻和暖如春简识,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工七扰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奢赂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓戳寸,卻偏偏與公主長(zhǎng)得像呈驶,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疫鹊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345