Redis常用數(shù)據(jù)結(jié)構(gòu)和命令

1. Redis數(shù)據(jù)結(jié)構(gòu)

Redis可以存儲(chǔ)鍵與5種不同數(shù)據(jù)結(jié)構(gòu)類型之間的映射,分別為string(字符串)、list(列表)、set(集合)宿崭、hash(散列)和zset(有序集合)。日常使用的基本上就是如上的五種常見(jiàn)數(shù)據(jù)結(jié)構(gòu)才写。此外葡兑,Redis還支持bitmaps(位圖), hyperloglogs(超級(jí)日志), geospatial indexes with radius queries and streams(具有半徑查詢和流的地理空間索引)。

下面引用《Redis實(shí)戰(zhàn)》的表格赞草,介紹五種常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)

結(jié)構(gòu)類型 結(jié)構(gòu)存儲(chǔ)的值 結(jié)構(gòu)的讀寫(xiě)能力
STRING 可以是字符串讹堤、整數(shù)或浮點(diǎn)數(shù) 對(duì)整個(gè)字符串或者字符串的其中一部分執(zhí)行操作;對(duì)整數(shù)和浮點(diǎn)數(shù)執(zhí)行自增(increment)或者自減(decrement)
LIST 一個(gè)鏈表房资,鏈表上的每個(gè)節(jié)點(diǎn)都包含一個(gè)字符串 從鏈表的兩端推入或者彈出元素蜕劝;根據(jù)偏移量對(duì)鏈表進(jìn)行修剪(trim);讀取單個(gè)或者多個(gè)元素轰异;根據(jù)值查找或者移除元素岖沛。
SET 包含字符串的無(wú)序收集器(unordered collection),并且被包含的每個(gè)字符串都是獨(dú)一無(wú)二搭独、各不相同的 添加婴削、獲取、移除單個(gè)元素牙肝;檢查一個(gè)元素是否存在于集合中唉俗;計(jì)算交集、并集配椭、差集虫溜;從集合里面隨機(jī)獲取元素。
HASH 包含鍵值對(duì)的無(wú)序散列表 添加股缸、獲取衡楞、移除單個(gè)鍵值對(duì);獲取所有鍵值對(duì)瘾境。
ZSET(有序集合) 字符串成員(member)與浮點(diǎn)數(shù)分值(score)之間的有序映射,元素的排列順序由分值的大小決定 添加镰惦、獲取迷守、刪除單個(gè)元素;根據(jù)分值范圍(range)或者成員來(lái)或許元素旺入。
  • string:字符串類型是非常常見(jiàn)的一種類型兑凿,Redis中的字符串類型和很多編程語(yǔ)言里的字符串類型差不多凯力,但相對(duì)要靈活些。字符串可以存儲(chǔ)以下三種類型:

    • 字符串(字節(jié)組成的序列)
    • 整數(shù)
    • 浮點(diǎn)數(shù)

    當(dāng)字符串中的值可以被解釋成十進(jìn)制數(shù)或者浮點(diǎn)數(shù)的時(shí)候礼华,Redis就會(huì)發(fā)現(xiàn)這一點(diǎn)沮协,并允許用戶對(duì)這個(gè)字符串進(jìn)行各種增(incr*)、減(decr*)操作卓嫂。如果對(duì)一個(gè)不存在的鍵或者保存了空串的鍵進(jìn)行增減操作,則Redis會(huì)將其值當(dāng)做0來(lái)處理聘殖。如果值無(wú)法被解釋為整數(shù)或浮點(diǎn)數(shù)晨雳,Redis將向用戶返回一個(gè)錯(cuò)誤。

  • list:列表可以看作是個(gè)雙端隊(duì)列奸腺,可以在列表兩端推入和彈出元素餐禁。對(duì)列表的不同操作可以實(shí)現(xiàn)其他編程語(yǔ)言中的堆棧(同一端進(jìn)出)和隊(duì)列(一端進(jìn),另一端出)數(shù)據(jù)結(jié)構(gòu)突照。

  • set:集合最顯著的特點(diǎn)應(yīng)該就是其中的元素互不相同帮非。用戶可以快速對(duì)集合進(jìn)行插入,刪除讹蘑,檢查某元素是否在集合中的操作末盔。此外,多個(gè)集合間也能很方便的執(zhí)行交座慰、并陨舱、差集運(yùn)算。

  • zset:有序集合存儲(chǔ)著成員與分值(權(quán)值版仔,在Redis中以IEEE 754雙精度浮點(diǎn)數(shù)的格式存儲(chǔ))之間的映射游盲,并且提供了分值處理命令。適用于按照權(quán)值獲取元素的情況蛮粮。如熱門(mén)帖子獲取益缎、基于投票數(shù)排序文章等。

  • hash:Redis中的散列可以讓用戶將多個(gè)鍵值對(duì)存儲(chǔ)到一個(gè)Redis鍵中然想,可以把這種數(shù)據(jù)聚集看作是關(guān)系數(shù)據(jù)庫(kù)中的行莺奔,或者文檔數(shù)據(jù)庫(kù)中的文檔。

2. Redis常用命令

2.1 key的有關(guān)命令

命令 操作
exists key 測(cè)試指定key是否存在
del key1 [key2 ...] 刪除給定key
type key 返回給定key的類型
keys pattern 以正則表達(dá)式的形式又沾,返回匹配的所有key
rename oldkey newkey 修改key的名字
dbsize 查看數(shù)據(jù)庫(kù)中key的數(shù)量(并不是所謂的大斜滓恰)
expire key seconds 為key指定過(guò)期時(shí)間,到期自動(dòng)刪除
ttl key 查看key的剩余時(shí)間
select index 選擇數(shù)據(jù)庫(kù)(默認(rèn)16個(gè)數(shù)據(jù)庫(kù)杖刷,index為0-15)
move key index 將key移動(dòng)到指定數(shù)據(jù)庫(kù)
flushdb 清空當(dāng)前數(shù)據(jù)庫(kù)key
flushall 清空所有數(shù)據(jù)庫(kù)key

2.2 string的有關(guān)命令

命令 操作
set key value 設(shè)置key對(duì)應(yīng)的值為string類型的value
mset key1 value1 [key2 value2...] 一次設(shè)置多個(gè)key
get key 獲取指定key的value值
mget key1 [key2 ...] 一次獲取多個(gè)key的value值
incr key 對(duì)key的值做自增操作励饵,返回新的值
decr key 對(duì)key的值做自減操作,返回新的值
incrby key integer 對(duì)key的value加指定integer
decrby key integer 對(duì)key的value減指定integer
append key value 給指定key的字符串追加value
substr key start end 截取key滑燃,從start(包含)到end(包含)役听。注意只是返回截取的value,源value并沒(méi)改變

2.3 list的有關(guān)命令

命令 操作
lpush key value1 [value2...] 在key對(duì)應(yīng)的list的頭部(左端)添加元素
rpush key value1 [value2...] 在key對(duì)應(yīng)的list的尾部(右端)添加元素
lpop key 移除并返回key對(duì)應(yīng)的list的頭部(左端)元素
rpop key 移除并返回key對(duì)應(yīng)的list的尾部(右端)元素
lindex key offset 返回列表中偏移量為offset的元素
lrange key start end 返回列表中從start偏移量到end偏移量中的元素,包含兩個(gè)端點(diǎn)元素(只返回典予,原list不變)
ltrim key start end 對(duì)列表進(jìn)行修剪甜滨,只保留從start偏移量到end偏移量的元素,包含兩個(gè)端點(diǎn)
llen key 返回對(duì)應(yīng)列表的長(zhǎng)度

此外瘤袖,list還包含一些阻塞式的命令以及在列表之間移動(dòng)元素的命令:

命令 操作
blpop key1 [key2...] timeout 從第一個(gè)非空列表中彈出位于頭部(左端)的元素衣摩,或者在timeout秒內(nèi)阻塞并等待可彈出元素的出現(xiàn)
brpop key1 [key2...] timeout 從第一個(gè)非空列表中彈出位于尾部(右端)的元素,或者在timeout秒內(nèi)阻塞并等待可彈出元素的出現(xiàn)
rpoplpush source-key dest-key 從source-key列表中彈出位于最右端的元素捂敌,然后把這個(gè)元素插入dest-key列表的最左端艾扮,并向用戶返回該元素
brpoplpush source-key dest-key timeout 從source-key列表中彈出位于最右端的元素,然后把這個(gè)元素插入dest-key列表的最左端占婉,并向用戶返回該元素泡嘴。如果source-key為空,則在timeout秒內(nèi)阻塞并等待可彈出元素的出現(xiàn)

2.4 set的有關(guān)命令

命令 操作
sadd key value1 [value2...] 將一個(gè)或多個(gè)元素添加到集合中逆济,并返回添加成功的元素的個(gè)數(shù)
srem key value1 [value2...] 從集合中移除一個(gè)或多個(gè)元素酌予,返回移除成功的元素的個(gè)數(shù)
sismember key value 檢查元素value是否在集合key中,存在返回1奖慌,不存在返回0
scard key 返回集合包含的元素個(gè)數(shù)
smembers key 返回集合包含的全部元素
srandmember key [count] 隨機(jī)返回集合中的一個(gè)或多個(gè)元素抛虫。當(dāng)count為正數(shù)時(shí),返回的元素不會(huì)重復(fù)简僧;當(dāng)count為負(fù)數(shù)時(shí)莱褒,返回的元素有可能會(huì)重復(fù)
spop key 隨機(jī)移除集合中的某個(gè)元素,被返回給用戶
smove source-key des-key value 如果集合source-key中包含元素value涎劈,則移除它广凸,并添加到dest-key中;成功移除并添加則返回1蛛枚,否則返回0

處理多個(gè)集合的常用命令:

命令 操作
sdiff key1 [key2...] 返回所有集合的差集
sdiffstore dest-key key1 [key2...] 將計(jì)算所得的差集中的元素添加到dest-key中
sinter key1 [key2...] 返回所有集合的交集
sinterstore dest-key key1 [key2...] 將計(jì)算所得的交集中的元素添加到dest-key中
sunion key1 [key2...] 返回所有集合的并集
sunionstore dest-key key1 [key2...] 將計(jì)算所得的并集中的元素添加到dest-key中

2.5 zset的有關(guān)命令

命令 操作
zadd key score1 member1 [score2 member2 ... ] 將帶有給定分值的成員你添加到有序集合中谅海。注意分值在前,成員在后
zrem key member1 [member2 ... ] 從有序集合中刪除指定成員蹦浦,并返回成功刪除的元素個(gè)數(shù)
zcard key 返回有序集合包含的成員個(gè)數(shù)
zincrby key increment member 給指定成員的分值加上increment
zcount key min max 返回分值介于min和max之間的成員數(shù)量
zrank key memeber 返回指定成員在有序集合中的排名扭吁,成員按照score從小到大排序
zrevrank key memeber 返回指定成員在有序集合中的排名 ,成員按照score從大到小排序
zscore key member 返回指定成員的分值
zrange key start stop [WITHSCORES] 返回有序集合中排名介于start和stop之間的成員盲镶,如果給定了可選的 WITHSCORES選項(xiàng)侥袜,則連帶成員分值一并返回
zrevrange key start stop [WITHSCORES] 同上,結(jié)果按score逆序
zrangebyscore key min max [WITHSCORES] 返回分值介于min和max之間的成員
zremrangebyrank key start stop 刪除集合中排名在start和stop之間的成員
zremrangebyscore key min max 刪除集合中分值在min和max之間的成員

2.6 hash的有關(guān)命令

命令 操作
hset key field value 向散列key中添加一個(gè)鍵值對(duì)
hget key field 獲取散列key中的一個(gè)鍵的值
hmset key field1 value1 [field2 value2 ...] 向散列key中添加一個(gè)或多個(gè)鍵值對(duì)
hmget key field1 [field2 ... ] 獲取散列key中的一個(gè)或多個(gè)鍵的值
hdel key field1 [field2 ... ] 刪除散列中的一個(gè)或多個(gè)鍵值對(duì)溉贿,返回成功刪除的鍵值對(duì)數(shù)量
hlen key 返回散列包含的鍵值對(duì)數(shù)量
hincrby key field integer 給散列中指定field的值加上integer
hexists key field 測(cè)試指定field是否在散列中存在
hkeys key 返回散列中所有field
hvals key 返回散列中所有value
hgetall key 返回散列中所有鍵值對(duì)

2.7 其他命令

Redis還有許多其他的命令枫吧,如發(fā)布訂閱相關(guān)的命令,排序命令宇色,更完整的命令介紹可以查看Redis官網(wǎng)文檔中文版地址九杂。

此外颁湖,Redis客戶端還提供了 command 命令,可以用來(lái)查看命令數(shù)組例隆。如:

command命令

特別推薦:Redis客戶端還提供了 help 命令甥捺,可以查看數(shù)據(jù)結(jié)構(gòu)的描述( help set ),查看某個(gè)命令的具體用法( help zadd )镀层,以及通過(guò) help @group 語(yǔ)法來(lái)查看某個(gè)命令組( help @set 查看set所有命令)镰禾。如:

help命令

此外,Redis客戶端還提供了命令智能提示唱逢,可以提示用戶該命令的具體格式羡微,如,當(dāng)鍵入 zadd 時(shí)惶我,客戶端的智能提示如下:

客戶端的智能提示

單純的記憶命令是沒(méi)有意義的,應(yīng)該著重去學(xué)習(xí)Redis數(shù)據(jù)結(jié)構(gòu)的概念和含義博投,具體應(yīng)用的時(shí)候配合使用 help 命令以及官方文檔即可绸贡。而且Redis的命令基本都是自解釋的,基本從字面上就能夠了解到該命令的作用毅哗。習(xí)慣了之后甚至可以自己去猜測(cè)需要的命令听怕。

======返回目錄======

<<< 上一篇:Redis的安裝與配置說(shuō)明

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市虑绵,隨后出現(xiàn)的幾起案子尿瞭,更是在濱河造成了極大的恐慌,老刑警劉巖翅睛,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件声搁,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡捕发,警方通過(guò)查閱死者的電腦和手機(jī)疏旨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)扎酷,“玉大人檐涝,你說(shuō)我怎么就攤上這事》òぃ” “怎么了谁榜?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)凡纳。 經(jīng)常有香客問(wèn)我窃植,道長(zhǎng),這世上最難降的妖魔是什么荐糜? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任撕瞧,我火速辦了婚禮陵叽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丛版。我一直安慰自己巩掺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布页畦。 她就那樣靜靜地躺著胖替,像睡著了一般。 火紅的嫁衣襯著肌膚如雪豫缨。 梳的紋絲不亂的頭發(fā)上独令,一...
    開(kāi)封第一講書(shū)人閱讀 49,741評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音好芭,去河邊找鬼燃箭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛舍败,可吹牛的內(nèi)容都是我干的招狸。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼邻薯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼裙戏!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起厕诡,我...
    開(kāi)封第一講書(shū)人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤累榜,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后灵嫌,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體壹罚,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年寿羞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了渔嚷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡稠曼,死狀恐怖形病,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情霞幅,我是刑警寧澤漠吻,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站司恳,受9級(jí)特大地震影響途乃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扔傅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一耍共、第九天 我趴在偏房一處隱蔽的房頂上張望烫饼。 院中可真熱鬧,春花似錦试读、人聲如沸杠纵。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)比藻。三九已至,卻和暖如春倘屹,著一層夾襖步出監(jiān)牢的瞬間银亲,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工纽匙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留务蝠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓烛缔,卻偏偏與公主長(zhǎng)得像馏段,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子力穗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • redis是一個(gè)以key-value存儲(chǔ)的非關(guān)系型數(shù)據(jù)庫(kù)。有五種數(shù)據(jù)類型气嫁,string当窗、hashes、list寸宵、s...
    林ze宏閱讀 986評(píng)論 0 0
  • 0 概述 1 通用命令 2 數(shù)據(jù)結(jié)構(gòu)和內(nèi)部編碼 2.1 Redis 沒(méi)有傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)的Table 模型 sc...
    JavaEdge閱讀 2,916評(píng)論 0 5
  • NOSQL類型簡(jiǎn)介鍵值對(duì):會(huì)使用到一個(gè)哈希表崖面,表中有一個(gè)特定的鍵和一個(gè)指針指向特定的數(shù)據(jù),如redis梯影,volde...
    MicoCube閱讀 3,961評(píng)論 2 27
  • 《Redis 入門(mén)指南》(第二版) 第一章 Redis 是什么 Redis (REmote Dictionary ...
    EdenPP閱讀 67,292評(píng)論 3 10
  • Redis的內(nèi)存優(yōu)化 聲明:本文內(nèi)容來(lái)自《Redis開(kāi)發(fā)與運(yùn)維》一書(shū)第八章巫员,如轉(zhuǎn)載請(qǐng)聲明。 Redis所有的數(shù)據(jù)都...
    meng_philip123閱讀 18,878評(píng)論 2 29