激情久久久_欧美视频区_成人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
主站蜘蛛池模板: 国产视频导航 | 国产视频精品在线 | 一级大片一级一大片 | 久久久成人一区二区免费影院 | 久草手机在线视频 | 成人毛片视频免费看 | 色七七久久影院 | www久久艹 | 国产精品久久久久久久久久尿 | 中文字幕精品在线视频 | 午夜视频导航 | 精品国产一区在线 | 国产精品久久久久久久娇妻 | 国产黄色一级大片 | 国产精品18久久久久久久久 | 久久这里只有精品1 | 国产免费人做人爱午夜视频 | 久久成人激情视频 | 免费观看一级淫片 | 欧美精品久久久久久久久老牛影院 | 99精品国产成人一区二区 | 99re热精品视频 | 男女污污视频网站 | 在线亚洲欧美 | 久久精品成人免费国产片桃视频 | 日本精品一二区 | 国产精品久久久久久久久久久天堂 | 久久亚洲春色中文字幕久久 | 国产jjizz一区二区三区视频 | 一区二区三区手机在线观看 | 最新欧美精品一区二区三区 | 99精美视频| 欧美成人免费一区二区三区 | 国产高潮好爽好大受不了了 | 久久精品超碰 | 精品国产一区二区三区天美传媒 | 亚洲二区免费 | 一级美女大片 | 久草在线资源福利站 | 黄色免费小视频网站 | 亚洲国产网址 |