<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在日常開發過程中,經常會有一些 bool 型別資料需要存取。比如記錄使用者一年內簽到的次數,簽了是 1,沒簽是 0。如果使用 key-value 來儲存,那麼每個使用者都要記錄 365 次,當用戶成百上億時,需要的儲存空間將非常巨大。解決這個問題,可以使用redis中的點陣圖。
點陣圖(bitmap)同樣屬於 string 資料型別。Redis 中一個字串型別的值最多能儲存 512 MB 的內容,每個字串由多個位元組組成,每個位元組又由 8 個 Bit 位組成。點陣圖結構正是使用“位”來實現儲存的,它通過將位元位設定為 0 或 1來達到資料存取的目的,這大大增加了 value 儲存數量,它儲存上限為2^32。
點陣圖本質上就是一個普通的位元組串,也就是 bytes 陣列。您可以使用getbit/setbit命令來處理這個位陣列,點陣圖的結構如下所示:
點陣圖適用於一些特定的應用場景,比如使用者簽到次數、或者登入次數等。上圖是表示一位使用者 10 天內來網站的簽到次數,1 代表簽到,0 代表未簽到,這樣可以很輕鬆地統計出使用者的活躍程度。相比於直接使用字串而言,點陣圖中的每一條記錄僅佔用一個 bit 位,從而大大降低了記憶體空間使用率。
Redis 官方也做了一個實驗,他們模擬了一個擁有 1 億 2 千 8 百萬使用者的系統,然後使用 Redis 的點陣圖來統計“日均使用者數量”,最終所用時間的約為 50ms,且僅僅佔用 16 MB記憶體。
某網站要統計一個使用者一年的簽到記錄,若用 sring 型別儲存,則需要 365 個鍵值對。若使用點陣圖儲存,使用者簽到就存 1,否則存 0。最後會生成 00010101… 這樣的儲存結果,其中每天的記錄只佔一位,一年就是 365 位,約為 46 個位元組。如果只想統計使用者簽到的天數,那麼統計 1 的個數即可。
點陣圖操作的優勢,相比於字串而言,它不僅效率高,而且還非常的節省空間。
Redis 的位陣列是自動擴充套件的,如果設定了某個偏移位置超出了現有的內容範圍,位陣列就會自動擴充。
用來設定或者清除某一位上的值,其返回值是原來位上儲存的值。key 在初始狀態下所有的位都為 0 ,範例如下:
SETBIT key offset value
其中 offset 表示偏移量,從 0 開始。範例如下:
127.0.0.1:6379> SET user:1 a OK #設定偏移量offset為0 127.0.0.1:6379> SETBIT user:1 0 1 (integer) 0 #當對應位的字元是不可列印字元,redis會以16進位制形式顯示 127.0.0.1:6379> GET user:1 "xe1"
用來獲取某一位上的值。範例如下:
127.0.0.1:6379> GETBIT user:1 0 (integer) 1
當偏移量 offset 比字串的長度大,或者當 key 不存在時,返回 0。
redis> EXISTS bits (integer) 0 redis> GETBIT bits 100000 (integer) 0
統計指定位區間上,值為 1 的個數。語法格式如下:
BITCOUNT key [start end]
範例如下:
127.0.0.1:6379> BITCOUNT user:1 (integer) 8
通過指定的 start 和 end 引數,可以讓計數只在特定的位元組上進行。start 和 end 引數和 GETRANGE 命令的引數類似,都可以使用負數,比如 -1 表示倒數第一個位, -2 表示倒數第二個位。.
對一個或多個儲存二進位制位的字串 key 進行位元操作,並將結果儲存到 destkey 上
語法:operation 可以是 AND 、 OR 、 NOT 、 XOR 這四種操作中的任意一種:
除了 NOT 操作之外,其他操作都可以接受一個或多個 key 作為輸入。
每日活躍統計建立一個bitmap鍵,當用戶活躍了根據使用者id的偏移量來設定
對應的位為1
每個使用者建立一個點陣圖的鍵,以某一天為基礎,之後的天數距離這一天的天數為偏移量,
如果使用者點選了簽到,則設定對用的偏移位為1。
到此這篇關於Redis中Bitmap的使用範例的文章就介紹到這了,更多相關Redis Bitmap內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45