国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Redis - redis通過位圖法記錄在線用戶的狀態詳解

redis通過位圖法記錄在線用戶的狀態詳解

2019-11-19 18:49小草莓子桑 Redis

這篇文章主要給大家介紹了關于redis如何通過位圖法記錄在線用戶的狀態的相關資料,文中先對位圖進行了一個簡單的介紹,而后通過示例代碼將實現的方法介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的

前言

在進入今天的主題前,先簡單地解釋下Redis中的位圖到底是什么。Redis官方文檔對于位圖的介紹如下:

位圖不是一個真實的數據類型,而是定義在字符串類型上的面向位的操作的集合。由于字符串類型是二進制安全的二進制大對象,并且最大長度是 512MB,適合于設置 2^32個不同的位。

位操作分為兩組:常量時間單個位的操作,像設置一個位為 1 或者 0,或者獲取該位的值。對一組位的操作,例如計算指定范圍位的置位數量。

位圖的最大優勢是有時是一種非常顯著的節省空間來存儲信息的方式。例如,在一個系統中,不同用戶由遞增的用戶 ID 來表示,可以使用 512MB 的內存來表示 400 萬用戶的單個位信息(例如他們是否需要接收信件)。

簡而言之,位圖操作是用來操作比特位的,其優點是節省內存空間。為什么可以節省內存空間呢?假如我們需要存儲100萬個用戶的登錄狀態,使用位圖的話最少只需要100萬個比特位(比特位1表示登錄,比特位0表示未登錄)就可以存儲了,而如果以字符串的形式存儲,比如說以userId為key,是否登錄(字符串“1”表示登錄,字符串“0”表示未登錄)為value進行存儲的話,就需要存儲100萬個字符串了,相比之下使用位圖存儲占用的空間要小得多,這就是位圖存儲的優勢。

這幾天在工作中,遇到一個case,就是需要自己實現一個IM在線用戶狀態的記錄,當時查了很多中實現方式,今天來分享一下

主要思想

構造一個位圖,里面存的是二進制數據,如:1 0 1 0 1 0 1,通過修改userId對應位置上的0和1來修改用戶在線狀態,由于默認值為0,所以1代表用戶處于在線狀態,0代表用戶處于離線狀態,如圖:

redis通過位圖法記錄在線用戶的狀態詳解
構造了Mon、Thus、Web三個位圖

構造了Mon、Thus、Web三個位圖,對于Mon來說,userId=1的用戶處于在線狀態,userId=2的用戶處于離線狀態,userId=3的用戶處于在線狀態,當userId=10的用戶上線后,就把第10位上值變成1

空間預估

二進制數據1位為1bit

1千兆字節(gb)=8589934592比特(bit)

理論上1G的內存可以記錄85億多的用戶狀態,如果userId不連貫,有的userId位數超過85億位,可以使用一些算法、或者對userId按位分段來解決

使用命令

setbit key offset value 修改key中,第offset位的值為value

redis通過位圖法記錄在線用戶的狀態詳解

Setbit

getbit key offset 獲取key中,第offset位上的value

redis通過位圖法記錄在線用戶的狀態詳解

getbit

bitcount key 統計key中,1的個數

redis通過位圖法記錄在線用戶的狀態詳解

bitcount

bitop op destKey key1 key2 ….. 其中op可以為AND(于)、OR(或)、NOT(非)、XOR(異或)
命令的主要作用是,給key1、key2..等,這種二進制數據,按位做邏輯運算,結果付到destkey中,沒有setbit的位置默認為0

舉個栗子

構造了Mon、Thus、Web三個位圖,作為近三天登錄狀態的位圖

redis通過位圖法記錄在線用戶的狀態詳解
構造了Mon、Thus、Web三個位圖

第一天
userId=10000,userId=9999,userId=8888的用戶登錄了

?
1
2
3
setbit mon 10000 1;
setbit mon 9999 1;
setbit mon 8888 1;

統計第一天在線用戶量

?
1
bitcount mon

redis通過位圖法記錄在線用戶的狀態詳解

有三個用戶登錄

第一天有三個用戶登錄

第二天

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

?
1
2
setbit thus 9999 1;
setbit thus 7777 1;

獲取userId=7777用戶在線狀態

?
1
getbit thus 7777

redis通過位圖法記錄在線用戶的狀態詳解

7777用戶處于登錄狀態

第三天
userId=9999,userId=6666的用戶登錄了

?
1
2
setbit web 9999 1
setbit web 6666 1;

獲取三天都登錄的用戶數

?
1
bitop and resultand mon thus web;

redis通過位圖法記錄在線用戶的狀態詳解

獲取三天都登錄的用戶數

獲取三天內登陸過的用戶數

?
1
bitop or resultor mon thus web;

redis通過位圖法記錄在線用戶的狀態詳解

獲取三天內登陸過的用戶數

redis使用位圖法記錄在線用戶的狀態就為大家說到這里,歡迎大家來交流,指出文中一些說錯的地方,讓我加深認識。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://www.jianshu.com/p/2348e2d4a213

延伸 · 閱讀

精彩推薦
  • RedisRedis如何實現數據庫讀寫分離詳解

    Redis如何實現數據庫讀寫分離詳解

    Redis的主從架構,能幫助我們實現讀多,寫少的情況,下面這篇文章主要給大家介紹了關于Redis如何實現數據庫讀寫分離的相關資料,文中通過示例代碼介紹...

    羅兵漂流記6092019-11-11
  • RedisRedis的配置、啟動、操作和關閉方法

    Redis的配置、啟動、操作和關閉方法

    今天小編就為大家分享一篇Redis的配置、啟動、操作和關閉方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    大道化簡5312019-11-14
  • Redisredis 交集、并集、差集的具體使用

    redis 交集、并集、差集的具體使用

    這篇文章主要介紹了redis 交集、并集、差集的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    xiaojin21cen10152021-07-27
  • RedisRedis全量復制與部分復制示例詳解

    Redis全量復制與部分復制示例詳解

    這篇文章主要給大家介紹了關于Redis全量復制與部分復制的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis爬蟲具有一定的參考學習...

    豆子先生5052019-11-27
  • Redisredis實現排行榜功能

    redis實現排行榜功能

    排行榜在很多地方都能使用到,redis的zset可以很方便地用來實現排行榜功能,本文就來簡單的介紹一下如何使用,具有一定的參考價值,感興趣的小伙伴們...

    乘月歸5022021-08-05
  • Redis詳解Redis復制原理

    詳解Redis復制原理

    與大多數db一樣,Redis也提供了復制機制,以滿足故障恢復和負載均衡等需求。復制也是Redis高可用的基礎,哨兵和集群都是建立在復制基礎上實現高可用的...

    李留廣10222021-08-09
  • Redisredis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    redis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    這篇文章主要給大家介紹了關于redis中如何使用lua腳本讓你的靈活性提高5個逼格的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具...

    一線碼農5812019-11-18
  • RedisRedis 事務知識點相關總結

    Redis 事務知識點相關總結

    這篇文章主要介紹了Redis 事務相關總結,幫助大家更好的理解和學習使用Redis,感興趣的朋友可以了解下...

    AsiaYe8232021-07-28
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 精品少妇一区二区三区日产乱码 | 国产伦乱 | 国产高清精品在线 | 久久中文字幕一区二区 | 久久婷婷丁香 | 久久99精品国产麻豆婷婷洗澡 | www.99re | 国产精品一区二区三区四区 | 精品黄色国产 | 欧美日韩成人在线 | 51ⅴ精品国产91久久久久久 | 黄色免费高清网站 | 国产精品成人国产乱一区 | a级三四级黄大片 | 亚洲成人久久久 | 中文一区 | 亚洲精品91 | 色视频在线播放 | 精品福利一区二区三区免费视频 | 精品一区二区三区四区 | 国产三级毛片 | 欧美日韩一级二级三级 | 精品96久久久久久中文字幕无 | 亚洲精品久久久久久动漫 | 亚洲在线视频 | av在线干 | 亚洲视频中文字幕 | 国精品一区 | 欧美色综合天天久久综合精品 | 精品视频在线播放 | av网站免费看 | 天天摸天天操 | 国产精品成人3p一区二区三区 | 日韩成人免费在线 | 日韩欧美一区二区三区 | 国产成人精品一区二区三区四区 | 日本不卡一区二区三区在线观看 | 精品一区二区三区免费 | 国产一区二区三区不卡在线观看 | 成人午夜在线视频 | 亚洲成av人片一区二区梦乃 |