Redis有序集合

Redis是一個(gè)高性能的key-value數(shù)據(jù)庫,處理數(shù)據(jù)的效率高窿春。Redis的優(yōu)點(diǎn)有以下幾方面:

  1. 性能極高:Redis的讀取速度是11萬次/s得问,寫的速度是8.1萬/s砍聊。
  2. 數(shù)據(jù)類型豐富:Redis相比其他key-value數(shù)據(jù)庫页藻,能夠支持很多豐富的數(shù)據(jù)結(jié)構(gòu)如Strings桨嫁、Hashes、Lists惕橙、Sets和Sorted Sets瞧甩。
  3. 原子性:Redis支持事務(wù)钉跷,能夠?qū)λ胁僮鬟M(jìn)行原子操作弥鹦。
  4. 數(shù)據(jù)持久化:Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存到磁盤中爷辙,避免丟失彬坏。

Sorted Sets與Sets類似之處是它不允許有重復(fù)的成員存在,不同的是每個(gè)元素都會關(guān)聯(lián)一個(gè)double類型的分?jǐn)?shù)膝晾。通過分?jǐn)?shù)栓始,Redis可以對集合中的成員進(jìn)行從小到大的排序。Sorted Set的成員是唯一的血当,但是分?jǐn)?shù)卻是可以重復(fù)的幻赚,集合是通過哈希表實(shí)現(xiàn)的,因此臊旭,對Sorted Set進(jìn)行添加落恼、刪除和查找時(shí)的時(shí)間復(fù)雜度都是O(1)。Sorted Sets中最大的成員數(shù)為2^32-1(4294967295离熏,差不多40多億)佳谦,score是一個(gè)64位浮點(diǎn)類型,范圍在-9007199254740992到9007199254740992之間滋戳。

有序集合的value可作為時(shí)間戳钻蔑,常用于處理延遲任務(wù)(比如多長時(shí)間之后數(shù)據(jù)失效或者觸發(fā)什么事件)

由于key是唯一的,而每個(gè)用戶的userId都是唯一的奸鸯,因此可以用userId作為key來標(biāo)識咪笑,但因?yàn)镽edis不止一個(gè)工程用到,可能其他工程也共用該Redis集群娄涩,因此將使用“expose:userId”作為key窗怒。因?yàn)橹槐A粲脩糇罱鼉芍艿钠毓鈹?shù)據(jù),所以需要定時(shí)去刪除兩周前的數(shù)據(jù),如果當(dāng)前時(shí)間戳作為score兜粘,可以調(diào)用Redis的zremrangebyscore命令對兩周前的數(shù)據(jù)進(jìn)行清理申窘。value結(jié)構(gòu)保存用戶的曝光具體數(shù)據(jù),如內(nèi)容的id孔轴,內(nèi)容的類型剃法,曝光的時(shí)間戳,手機(jī)的型號等信息路鹰,由于value是字符串類型贷洲,因此將這些數(shù)據(jù)轉(zhuǎn)化成json格式封裝

redis有序集合命令可參考: Redis 命令參考

說一下Redis為什么這么快晋柱?

Redis本質(zhì)上是一個(gè)Server优构,服務(wù)器編程的幾點(diǎn)常識:

  1. 所有命令和請求都有網(wǎng)絡(luò)開銷,都有消耗在網(wǎng)絡(luò)協(xié)議上面(RTT雁竞,Round-Trip Time)

  2. 當(dāng)讀寫(或傳輸)的數(shù)據(jù)較多時(shí)(比如大對象)钦椭,帶寬就容易成為瓶頸。

再說下Server慢的幾個(gè)常見因素:

  1. 服務(wù)端線程數(shù)量過多碑诉,占據(jù)大量資源彪腔,頻繁切換上下文

  2. 鎖的濫用,大量CPU用在線程調(diào)度上

  3. 非必要的內(nèi)存拷貝

Redis避免了以上方面的問題:

  1. 單進(jìn)程單線程进栽,無鎖德挣,串行操作,沒有多線程切換和競爭快毛。

  2. 數(shù)據(jù)在內(nèi)存中(也可持久化)格嗅,操作迅速

  3. 非阻塞IO:采用了epoll + 事件框架。epoll中的讀唠帝、寫屯掖、關(guān)閉、連接等動(dòng)作都轉(zhuǎn)化成了事件没隘,然后利用epoll的多路復(fù)用特性懂扼,不在IO上浪費(fèi)時(shí)間。

Redis在CPU右蒲,內(nèi)存和IO方面都大大提升了效率阀湿。

最后再說一個(gè)使用的redis命令:

-x 表示從標(biāo)準(zhǔn)輸入(stdin)讀取數(shù)據(jù)

cat file.txt | redis-cli -p 6379 -x set key 
redis-cli -p 6379 -x set key 0<file.txt

以上兩種方式結(jié)果相同。更多命令選項(xiàng)請參考redis-cli --help.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瑰妄,一起剝皮案震驚了整個(gè)濱河市陷嘴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌间坐,老刑警劉巖灾挨,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邑退,死亡現(xiàn)場離奇詭異,居然都是意外死亡劳澄,警方通過查閱死者的電腦和手機(jī)地技,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秒拔,“玉大人莫矗,你說我怎么就攤上這事∩八酰” “怎么了作谚?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長庵芭。 經(jīng)常有香客問我妹懒,道長,這世上最難降的妖魔是什么双吆? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任眨唬,我火速辦了婚禮,結(jié)果婚禮上伊诵,老公的妹妹穿的比我還像新娘单绑。我一直安慰自己,他們只是感情好曹宴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著歉提,像睡著了一般笛坦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上苔巨,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天版扩,我揣著相機(jī)與錄音,去河邊找鬼侄泽。 笑死礁芦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的悼尾。 我是一名探鬼主播柿扣,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼闺魏!你這毒婦竟也來了未状?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤析桥,失蹤者是張志新(化名)和其女友劉穎司草,沒想到半個(gè)月后艰垂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡埋虹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年猜憎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搔课。...
    茶點(diǎn)故事閱讀 39,773評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拉宗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辣辫,到底是詐尸還是另有隱情旦事,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布急灭,位于F島的核電站姐浮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏葬馋。R本人自食惡果不足惜卖鲤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望畴嘶。 院中可真熱鬧蛋逾,春花似錦、人聲如沸窗悯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蒋院。三九已至亏钩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間欺旧,已是汗流浹背姑丑。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辞友,地道東北人栅哀。 一個(gè)月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像称龙,于是被迫代替她去往敵國和親留拾。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評論 2 354

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

  • Redis 有序集合(sorted set) 命令 下表列出了 redis 有序集合的基本命令: 1> zadd ...
    stakeing閱讀 1,438評論 0 0
  • 我們知道redis集合計(jì)算差集的命令是 sdiff茵瀑。那么有序集合的差集是用 zdiff 命令嗎间驮?redis api...
    babycomeon閱讀 4,953評論 0 0
  • 有序集合:有序集合保留了集合不能有重復(fù)元素的特性,但不同的是马昨,有序集合中的元素可以通過設(shè)置一個(gè)分?jǐn)?shù)(score)來...
    Audience0閱讀 373評論 0 0
  • 分布式緩存技術(shù)PK:選擇Redis還是Memcached? 經(jīng)平臺同意授權(quán)轉(zhuǎn)載 作者:田京昆(騰訊后臺研發(fā)工程師)...
    meng_philip123閱讀 68,926評論 7 60
  • 一次顛簸的旅程 一生婆娑的路人 生死長短 長不過一人孤獨(dú) 短不過一日傷感 路上的凡塵過往 偌大的戲臺上 演繹相聚屹篓,...
    三條命的貓閱讀 271評論 0 0