最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis中Bitmap的使用示例

 更新時(shí)間:2022年05月16日 11:55:43   作者:Hu客  
本文主要介紹了Redis中Bitmap的使用示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

在日常開(kāi)發(fā)過(guò)程中,經(jīng)常會(huì)有一些 bool 類型數(shù)據(jù)需要存取。比如記錄用戶一年內(nèi)簽到的次數(shù),簽了是 1,沒(méi)簽是 0。如果使用 key-value 來(lái)存儲(chǔ),那么每個(gè)用戶都要記錄 365 次,當(dāng)用戶成百上億時(shí),需要的存儲(chǔ)空間將非常巨大。解決這個(gè)問(wèn)題,可以使用redis中的位圖。

位圖(bitmap)同樣屬于 string 數(shù)據(jù)類型。Redis 中一個(gè)字符串類型的值最多能存儲(chǔ) 512 MB 的內(nèi)容,每個(gè)字符串由多個(gè)字節(jié)組成,每個(gè)字節(jié)又由 8 個(gè) Bit 位組成。位圖結(jié)構(gòu)正是使用“位”來(lái)實(shí)現(xiàn)存儲(chǔ)的,它通過(guò)將比特位設(shè)置為 0 或 1來(lái)達(dá)到數(shù)據(jù)存取的目的,這大大增加了 value 存儲(chǔ)數(shù)量,它存儲(chǔ)上限為2^32。

位圖本質(zhì)上就是一個(gè)普通的字節(jié)串,也就是 bytes 數(shù)組。您可以使用getbit/setbit命令來(lái)處理這個(gè)位數(shù)組,位圖的結(jié)構(gòu)如下所示:

位圖適用于一些特定的應(yīng)用場(chǎng)景,比如用戶簽到次數(shù)、或者登錄次數(shù)等。上圖是表示一位用戶 10 天內(nèi)來(lái)網(wǎng)站的簽到次數(shù),1 代表簽到,0 代表未簽到,這樣可以很輕松地統(tǒng)計(jì)出用戶的活躍程度。相比于直接使用字符串而言,位圖中的每一條記錄僅占用一個(gè) bit 位,從而大大降低了內(nèi)存空間使用率。

Redis 官方也做了一個(gè)實(shí)驗(yàn),他們模擬了一個(gè)擁有 1 億 2 千 8 百萬(wàn)用戶的系統(tǒng),然后使用 Redis 的位圖來(lái)統(tǒng)計(jì)“日均用戶數(shù)量”,最終所用時(shí)間的約為 50ms,且僅僅占用 16 MB內(nèi)存。

位圖應(yīng)用原理

某網(wǎng)站要統(tǒng)計(jì)一個(gè)用戶一年的簽到記錄,若用 sring 類型存儲(chǔ),則需要 365 個(gè)鍵值對(duì)。若使用位圖存儲(chǔ),用戶簽到就存 1,否則存 0。最后會(huì)生成 00010101… 這樣的存儲(chǔ)結(jié)果,其中每天的記錄只占一位,一年就是 365 位,約為 46 個(gè)字節(jié)。如果只想統(tǒng)計(jì)用戶簽到的天數(shù),那么統(tǒng)計(jì) 1 的個(gè)數(shù)即可。

位圖操作的優(yōu)勢(shì),相比于字符串而言,它不僅效率高,而且還非常的節(jié)省空間。

Redis 的位數(shù)組是自動(dòng)擴(kuò)展的,如果設(shè)置了某個(gè)偏移位置超出了現(xiàn)有的內(nèi)容范圍,位數(shù)組就會(huì)自動(dòng)擴(kuò)充。

位圖常用命令

1) SETBIT命令

用來(lái)設(shè)置或者清除某一位上的值,其返回值是原來(lái)位上存儲(chǔ)的值。key 在初始狀態(tài)下所有的位都為 0 ,示例如下:

SETBIT key offset value

其中 offset 表示偏移量,從 0 開(kāi)始。示例如下:

127.0.0.1:6379> SET user:1 a
OK
#設(shè)置偏移量offset為0
127.0.0.1:6379> SETBIT user:1 0 1
(integer) 0
#當(dāng)對(duì)應(yīng)位的字符是不可打印字符,redis會(huì)以16進(jìn)制形式顯示
127.0.0.1:6379> GET user:1
"\xe1"

2) GETBIT命令

用來(lái)獲取某一位上的值。示例如下:

127.0.0.1:6379> GETBIT user:1 0
(integer) 1

當(dāng)偏移量 offset 比字符串的長(zhǎng)度大,或者當(dāng) key 不存在時(shí),返回 0。

redis> EXISTS bits
(integer) 0
redis> GETBIT bits 100000
(integer) 0

3) BITCOUNT命令

統(tǒng)計(jì)指定位區(qū)間上,值為 1 的個(gè)數(shù)。語(yǔ)法格式如下:

BITCOUNT key [start end]

示例如下:

127.0.0.1:6379> BITCOUNT user:1
(integer) 8

通過(guò)指定的 start 和 end 參數(shù),可以讓計(jì)數(shù)只在特定的字節(jié)上進(jìn)行。start 和 end 參數(shù)和 GETRANGE 命令的參數(shù)類似,都可以使用負(fù)數(shù),比如 -1 表示倒數(shù)第一個(gè)位, -2 表示倒數(shù)第二個(gè)位。.

4)Redis Bitop 命令

對(duì)一個(gè)或多個(gè)保存二進(jìn)制位的字符串 key 進(jìn)行位元操作,并將結(jié)果保存到 destkey 上

語(yǔ)法:operation 可以是 AND 、 OR 、 NOT 、 XOR 這四種操作中的任意一種:

  • BITOP AND destkey key [key …] ,對(duì)一個(gè)或多個(gè) key 求邏輯并,并將結(jié)果保存到 destkey 。
  • BITOP OR destkey key [key …] ,對(duì)一個(gè)或多個(gè) key 求邏輯或,并將結(jié)果保存到 - destkey 。
  • BITOP XOR destkey key [key …] ,對(duì)一個(gè)或多個(gè) key 求邏輯異或,并將結(jié)果保存到 destkey 。
  • BITOP NOT destkey key ,對(duì)給定 key 求邏輯非,并將結(jié)果保存到 destkey 。

除了 NOT 操作之外,其他操作都可以接受一個(gè)或多個(gè) key 作為輸入。

場(chǎng)景

統(tǒng)計(jì)當(dāng)日活躍用戶

每日活躍統(tǒng)計(jì)創(chuàng)建一個(gè)bitmap鍵,當(dāng)用戶活躍了根據(jù)用戶id的偏移量來(lái)設(shè)置
對(duì)應(yīng)的位為1

用戶簽到

每個(gè)用戶創(chuàng)建一個(gè)位圖的鍵,以某一天為基礎(chǔ),之后的天數(shù)距離這一天的天數(shù)為偏移量,
如果用戶點(diǎn)擊了簽到,則設(shè)置對(duì)用的偏移位為1。

到此這篇關(guān)于Redis中Bitmap的使用示例的文章就介紹到這了,更多相關(guān)Redis Bitmap內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis反序列化失敗的解決方法

    Redis反序列化失敗的解決方法

    在使用Redis緩存數(shù)據(jù)的過(guò)程中,有時(shí)會(huì)遇到反序列化失敗的問(wèn)題,本文主要介紹了Redis反序列化失敗的解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • Linux快速部署Redis

    Linux快速部署Redis

    這篇文章介紹了Linux下快速部署Redis的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • Redis中HyperLogLog的使用詳情

    Redis中HyperLogLog的使用詳情

    這篇文章主要介紹了Redis中HyperLogLog的使用詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • Centos7安裝redis的超詳細(xì)步驟教程

    Centos7安裝redis的超詳細(xì)步驟教程

    Redis是當(dāng)前比較熱門(mén)的NOSQL系統(tǒng)之一,它是一個(gè)key-value存儲(chǔ)系統(tǒng),下面這篇文章主要介紹了Centos7安裝redis的超詳細(xì)步驟,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • IDEA初次連接Redis配置的實(shí)現(xiàn)

    IDEA初次連接Redis配置的實(shí)現(xiàn)

    本文主要介紹了IDEA初次連接Redis配置的實(shí)現(xiàn),文中通過(guò)圖文步驟介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • Redis實(shí)現(xiàn)編碼生成規(guī)則方式

    Redis實(shí)現(xiàn)編碼生成規(guī)則方式

    在自動(dòng)生成編碼時(shí)應(yīng)采用“MD+年月日+4位序列號(hào)”的規(guī)則,如“MD202310130001”,為避免使用隨機(jī)序列號(hào)導(dǎo)致的重復(fù)編碼,建議使用從0開(kāi)始的自增序列號(hào),此外,使用Redis的incrBy功能實(shí)現(xiàn)序列號(hào)自增,可以有效提高效率和降低實(shí)現(xiàn)難度
    2023-01-01
  • 如何打造redis緩存組件

    如何打造redis緩存組件

    文章介紹了如何使用熱插拔AOP、反射、Redis自定義注解和SpringEL表達(dá)式來(lái)打造一個(gè)優(yōu)雅的Redis緩存組件,通過(guò)這種方式,可以重構(gòu)和簡(jiǎn)化緩存代碼,并提供了Redis配置和自定義注解的詳細(xì)說(shuō)明,文章還包含了AOP測(cè)試的總結(jié),并鼓勵(lì)讀者參考和支持
    2024-12-12
  • 深入解析RedisJSON之如何在Redis中直接處理JSON數(shù)據(jù)

    深入解析RedisJSON之如何在Redis中直接處理JSON數(shù)據(jù)

    JSON已經(jīng)成為現(xiàn)代應(yīng)用程序之間數(shù)據(jù)傳輸?shù)耐ㄓ酶袷?然而,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)在處理JSON數(shù)據(jù)時(shí)可能會(huì)遇到性能瓶頸,本文將詳細(xì)介紹RedisJSON的工作原理、關(guān)鍵操作、性能優(yōu)勢(shì)以及使用場(chǎng)景,感興趣的朋友一起看看吧
    2024-05-05
  • Redis本地/遠(yuǎn)程(外部)連接失敗問(wèn)題及解決

    Redis本地/遠(yuǎn)程(外部)連接失敗問(wèn)題及解決

    這篇文章主要介紹了Redis本地/遠(yuǎn)程(外部)連接失敗問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • 為啥Redis使用pipelining會(huì)更快

    為啥Redis使用pipelining會(huì)更快

    這篇文章主要介紹了為啥Redis使用pipelining會(huì)更快,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論

清丰县| 惠州市| 闸北区| 彭阳县| 永泰县| 仲巴县| 蓝田县| 漳平市| 黄骅市| 五峰| 沙河市| 兰溪市| 黎城县| 资中县| 汕尾市| 阜阳市| 偃师市| 邹城市| 福海县| 施甸县| 乌苏市| 新丰县| 永新县| 武夷山市| 灯塔市| 麦盖提县| 蓝田县| 阿克陶县| 茌平县| 姜堰市| 商水县| 宁波市| 南京市| 崇文区| 辽阳县| 曲阜市| 开阳县| 贺州市| 泽州县| 铅山县| 云南省|