Redis數(shù)據(jù)類型

在Redis中有五種數(shù)據(jù)類型


  • String----------字符串
  • Hash------------字典
  • List-------------列表
  • Set--------------集合
  • Sorted Set------有序集合

一 數(shù)據(jù)類型

String—字符串

string是redis最基本的類型忧便,你可以理解成與Memcached一模一樣的類型凭涂,一個(gè)key對(duì)應(yīng)一個(gè)value垒棋。string類型是二進(jìn)制安全的。意思是redis的string可以包含任何數(shù)據(jù)。比如jpg圖片或者序列化的對(duì)象 。string類型是Redis最基本的數(shù)據(jù)類型,一個(gè)鍵最大能存儲(chǔ)512MB莽龟。

String 數(shù)據(jù)結(jié)構(gòu)是簡(jiǎn)單的 key-value 類型,value 不僅可以是 String蚜点,也可以是數(shù)字(當(dāng)數(shù)字類型用 Long 可以表示的時(shí)候encoding 就是整型轧房,其他都存儲(chǔ)在 sdshdr 當(dāng)做字符串)。使用 Strings 類型绍绘,可以完全實(shí)現(xiàn)目前 Memcached 的功能奶镶,并且效率更高迟赃。還可以享受 Redis 的定時(shí)持久化(可以選擇 RDB 模式或者 AOF 模式),操作日志及 Replication 等功能厂镇。除了提供與 Memcached 一樣的 get纤壁、set、incr捺信、decr 等操作外酌媒,Redis 還提供了下面一些操作:

  1. LEN:O(1)獲取字符串長(zhǎng)度
  2. APPEND :往字符串 append 內(nèi)容,而且采用智能分配內(nèi)存(每次2倍)
  3. 設(shè)置和獲取字符串的某一段內(nèi)容
  4. 設(shè)置及獲取字符串的某一位(bit)
  5. 批量設(shè)置一系列字符串的內(nèi)容
  6. 原子計(jì)數(shù)器
  7. GET SET 命令的妙用迄靠,請(qǐng)于清空舊值的同時(shí)設(shè)置一個(gè)新值秒咨,配合原子計(jì)數(shù)器使用

Hash——字典(哈希)

Hash是一個(gè)健值對(duì)集合,是一個(gè)String類型的key與value的映射表掌挚,特別適合用于存儲(chǔ)對(duì)象雨席。
使用場(chǎng)景:存儲(chǔ)、讀取吠式、修改用戶屬性

在 Memcached 中陡厘,我們經(jīng)常將一些結(jié)構(gòu)化的信息打包成 hashmap,在客戶端序列化后存儲(chǔ)為一個(gè)字符串的值(一般是 JSON 格式)特占,比如用戶的昵稱糙置、年齡、性別是目、積分等谤饭。這時(shí)候在需要修改其中某一項(xiàng)時(shí),通常需要將字符串(JSON)取出來胖笛,然后進(jìn)行反序列化网持,修改某一項(xiàng)的值宜岛,再序列化成字符串(JSON)存儲(chǔ)回去长踊。簡(jiǎn)單修改一個(gè)屬性就干這么多事情,消耗必定是很大的萍倡,也不適用于一些可能并發(fā)操作的場(chǎng)合(比如兩個(gè)并發(fā)的操作都需要修改積分)身弊。而 Redis 的 Hash 結(jié)構(gòu)可以使你像在數(shù)據(jù)庫(kù)中 Update 一個(gè)屬性一樣只修改某一項(xiàng)屬性值。

List——列表

使用場(chǎng)景:微博 TimeLine列敲、消息隊(duì)列

List 說白了就是鏈表(redis 使用雙端鏈表實(shí)現(xiàn)的 List)阱佛,相信學(xué)過數(shù)據(jù)結(jié)構(gòu)知識(shí)的人都應(yīng)該能理解其結(jié)構(gòu)。使用 List 結(jié)構(gòu)戴而,我們可以輕松地實(shí)現(xiàn)最新消息排行等功能(比如新浪微博的 TimeLine )凑术。List 的另一個(gè)應(yīng)用就是消息隊(duì)列,可以利用 List 的 *PUSH 操作所意,將任務(wù)存在 List 中淮逊,然后工作線程再用 POP 操作將任務(wù)取出進(jìn)行執(zhí)行催首。Redis 還提供了操作 List 中某一段元素的 API,你可以直接查詢泄鹏,刪除 List 中某一段的元素

Set——集合

集合是通過哈希表實(shí)現(xiàn)的郎任,所以添加,刪除备籽,查找的復(fù)雜度都是O(1)
使用場(chǎng)景:
**1. 共同好友舶治、二度好友 **
**2. 利用唯一性,可以統(tǒng)計(jì)訪問網(wǎng)站的所有獨(dú)立 IP **
3. 好友推薦的時(shí)候车猬,根據(jù) tag 求交集霉猛,大于某個(gè) threshold 就可以推薦

Set 就是一個(gè)集合,集合的概念就是一堆不重復(fù)值的組合珠闰。利用 Redis 提供的 Set 數(shù)據(jù)結(jié)構(gòu)韩脏,可以存儲(chǔ)一些集合性的數(shù)據(jù)。比如在微博應(yīng)用中铸磅,可以將一個(gè)用戶所有的關(guān)注人存在一個(gè)集合中赡矢,將其所有粉絲存在一個(gè)集合。因?yàn)?Redis 非常人性化的為集合提供了求交集阅仔、并集吹散、差集等操作,那么就可以非常方便的實(shí)現(xiàn)如共同關(guān)注八酒、共同喜好空民、二度好友等功能,對(duì)上面的所有集合操作羞迷,你還可以使用不同的命令選擇將結(jié)果返回給客戶端還是存集到一個(gè)新的集合中界轩。

Sorted Set——有序集合

使用場(chǎng)景:
**1. 帶有權(quán)重的元素,比如一個(gè)游戲的用戶得分排行榜 **
2. 比較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)衔瓮,一般用到的場(chǎng)景不算太多

和Sets相比浊猾,Sorted Sets是將 Set 中的元素增加了一個(gè)權(quán)重參數(shù) score,使得集合中的元素能夠按 score 進(jìn)行有序排列热鞍,比如一個(gè)存儲(chǔ)全班同學(xué)成績(jī)的 Sorted Sets葫慎,其集合 value 可以是同學(xué)的學(xué)號(hào),而 score 就可以是其考試得分薇宠,這樣在數(shù)據(jù)插入集合的時(shí)候偷办,就已經(jīng)進(jìn)行了天然的排序。另外還可以用 Sorted Sets 來做帶權(quán)重的隊(duì)列澄港,比如普通消息的 score 為1椒涯,重要消息的 score 為2,然后工作線程可以選擇按 score 的倒序來獲取工作任務(wù)回梧。讓重要的任務(wù)優(yōu)先執(zhí)行

二 redis 其他功能使用場(chǎng)景

訂閱-發(fā)布系統(tǒng)

Pub/Sub 從字面上理解就是發(fā)布(Publish)與訂閱(Subscribe)废岂,在 Redis 中铡溪,你可以設(shè)定對(duì)某一個(gè) key 值進(jìn)行消息發(fā)布及消息訂閱,當(dāng)一個(gè) key 值上進(jìn)行了消息發(fā)布后泪喊,所有訂閱它的客戶端都會(huì)收到相應(yīng)的消息棕硫。這一功能最明顯的用法就是用作實(shí)時(shí)消息系統(tǒng),比如普通的即時(shí)聊天袒啼,群聊等功能哈扮。

事務(wù)——Transactions

誰(shuí)說 NoSQL 都不支持事務(wù),雖然 Redis 的 Transactions 提供的并不是嚴(yán)格的 ACID 的事務(wù)(比如一串用 EXEC 提交執(zhí)行的命令蚓再,在執(zhí)行中服務(wù)器宕機(jī)滑肉,那么會(huì)有一部分命令執(zhí)行了,剩下的沒執(zhí)行)摘仅,但是這個(gè) Transactions 還是提供了基本的命令打包執(zhí)行的功能(在服務(wù)器不出問題的情況下靶庙,可以保證一連串的命令是順序在一起執(zhí)行的,中間不會(huì)有其它客戶端命令插進(jìn)來執(zhí)行)娃属。Redis 還提供了一個(gè) Watch 功能六荒,你可以對(duì)一個(gè) key 進(jìn)行 Watch,然后再執(zhí)行 Transactions矾端,在這過程中掏击,如果這個(gè) Watched 的值進(jìn)行了修改,那么這個(gè) Transactions 會(huì)發(fā)現(xiàn)并拒絕執(zhí)行秩铆。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末砚亭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子殴玛,更是在濱河造成了極大的恐慌捅膘,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滚粟,死亡現(xiàn)場(chǎng)離奇詭異寻仗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)坦刀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門愧沟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鲤遥,你說我怎么就攤上這事×炙遥” “怎么了盖奈?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)狐援。 經(jīng)常有香客問我钢坦,道長(zhǎng)究孕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任爹凹,我火速辦了婚禮厨诸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘禾酱。我一直安慰自己微酬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布颤陶。 她就那樣靜靜地躺著颗管,像睡著了一般。 火紅的嫁衣襯著肌膚如雪滓走。 梳的紋絲不亂的頭發(fā)上垦江,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音搅方,去河邊找鬼比吭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛姨涡,可吹牛的內(nèi)容都是我干的梗逮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼绣溜,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼慷彤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起怖喻,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤底哗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后锚沸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跋选,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年哗蜈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了前标。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡距潘,死狀恐怖炼列,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情音比,我是刑警寧澤俭尖,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響稽犁,放射性物質(zhì)發(fā)生泄漏焰望。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一已亥、第九天 我趴在偏房一處隱蔽的房頂上張望熊赖。 院中可真熱鬧,春花似錦虑椎、人聲如沸震鹉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)足陨。三九已至,卻和暖如春娇未,著一層夾襖步出監(jiān)牢的瞬間墨缘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工零抬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留镊讼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓平夜,卻偏偏與公主長(zhǎng)得像蝶棋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子忽妒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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