redis使用位圖法記錄在線用戶的狀態(tài)

這幾天在工作中,遇到一個case,就是需要自己實現(xiàn)一個IM在線用戶狀態(tài)的記錄葱弟,當(dāng)時查了很多中實現(xiàn)方式,今天來分享一下

主要思想

構(gòu)造一個位圖猜丹,里面存的是二進(jìn)制數(shù)據(jù)芝加,如:1 0 1 0 1 0 1,通過修改userId對應(yīng)位置上的0和1來修改用戶在線狀態(tài)射窒,由于默認(rèn)值為0藏杖,所以1代表用戶處于在線狀態(tài),0代表用戶處于離線狀態(tài)脉顿,如圖:


構(gòu)造了Mon蝌麸、Thus、Web三個位圖

構(gòu)造了Mon艾疟、Thus来吩、Web三個位圖,對于Mon來說蔽莱,userId=1的用戶處于在線狀態(tài)弟疆,userId=2的用戶處于離線狀態(tài),userId=3的用戶處于在線狀態(tài)盗冷,當(dāng)userId=10的用戶上線后怠苔,就把第10位上值變成1

空間預(yù)估

二進(jìn)制數(shù)據(jù)1位為1bit
1千兆字節(jié)(gb)=8589934592比特(bit)
理論上1G的內(nèi)存可以記錄85億多的用戶狀態(tài),如果userId不連貫仪糖,有的userId位數(shù)超過85億位柑司,可以使用一些算法、或者對userId按位分段來解決

使用命令

setbit key offset value 修改key中乓诽,第offset位的值為value
Setbit
getbit key offset 獲取key中帜羊,第offset位上的value
getbit
bitcount key 統(tǒng)計key中咒程,1的個數(shù)
bitcount
bitop op destKey key1 key2 ….. 其中op可以為AND(于)鸠天、OR(或)、NOT(非)帐姻、XOR(異或)

命令的主要作用是稠集,給key1、key2..等饥瓷,這種二進(jìn)制數(shù)據(jù)剥纷,按位做邏輯運算,結(jié)果付到destkey中呢铆,沒有setbit的位置默認(rèn)為0

舉個栗子

構(gòu)造了Mon晦鞋、Thus、Web三個位圖,作為近三天登錄狀態(tài)的位圖


構(gòu)造了Mon悠垛、Thus线定、Web三個位圖
第一天

userId=10000,userId=9999确买,userId=8888的用戶登錄了

setbit mon 10000 1;     
setbit mon 9999 1;       
setbit mon 8888 1; 
統(tǒng)計第一天在線用戶量
bitcount mon
有三個用戶登錄

第一天有三個用戶登錄

第二天

userId=9999,userId=7777的用戶登錄了

setbit thus 9999 1;       
setbit thus 7777 1;
獲取userId=7777用戶在線狀態(tài)
getbit thus 7777
7777用戶處于登錄狀態(tài)
第三天

userId=9999斤讥,userId=6666的用戶登錄了

setbit web 9999 1;       
setbit web 6666 1;
獲取三天都登錄的用戶數(shù)
bitop and resultand mon thus web;
獲取三天都登錄的用戶數(shù)
獲取三天內(nèi)登陸過的用戶數(shù)
bitop or resultor mon thus web;
獲取三天內(nèi)登陸過的用戶數(shù)

redis使用位圖法記錄在線用戶的狀態(tài)就為大家說到這里,歡迎大家來交流湾趾,指出文中一些說錯的地方芭商,讓我加深認(rèn)識。
謝謝大家搀缠!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铛楣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子胡嘿,更是在濱河造成了極大的恐慌蛉艾,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衷敌,死亡現(xiàn)場離奇詭異勿侯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)缴罗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門助琐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人面氓,你說我怎么就攤上這事兵钮。” “怎么了舌界?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵掘譬,是天一觀的道長。 經(jīng)常有香客問我呻拌,道長葱轩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任藐握,我火速辦了婚禮靴拱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘猾普。我一直安慰自己袜炕,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布初家。 她就那樣靜靜地躺著偎窘,像睡著了一般乌助。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上陌知,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天眷茁,我揣著相機(jī)與錄音,去河邊找鬼纵诞。 笑死上祈,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的浙芙。 我是一名探鬼主播登刺,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嗡呼!你這毒婦竟也來了纸俭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤南窗,失蹤者是張志新(化名)和其女友劉穎揍很,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體万伤,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡窒悔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了敌买。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片简珠。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖虹钮,靈堂內(nèi)的尸體忽然破棺而出聋庵,到底是詐尸還是另有隱情,我是刑警寧澤芙粱,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布祭玉,位于F島的核電站,受9級特大地震影響春畔,放射性物質(zhì)發(fā)生泄漏脱货。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一拐迁、第九天 我趴在偏房一處隱蔽的房頂上張望蹭劈。 院中可真熱鬧疗绣,春花似錦线召、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哈打。三九已至,卻和暖如春讯壶,著一層夾襖步出監(jiān)牢的瞬間料仗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工伏蚊, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留立轧,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓躏吊,卻偏偏與公主長得像氛改,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子比伏,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理胜卤,服務(wù)發(fā)現(xiàn),斷路器赁项,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • 1葛躏、redis是什么: Redis is an open source, BSD licensed, advanc...
    huangxiongbiao閱讀 1,657評論 0 2
  • 親歷靈異事件 作者 / 狼煙詩影 我是一個喜歡新事物的人,喜歡故事悠菜,喜歡歷史舰攒,...
    狼煙詩影閱讀 1,091評論 2 4
  • 簡書新居改舊詩,遙看斷橋題詠時悔醋。 風(fēng)騷盛況連波起芒率,法博閑話自成席。 諸友爭題題不限篙顺,依韻續(xù)句句有奇偶芍。 接龍互先殘荷...
    夜語可書閱讀 1,537評論 57 51