国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Redis--Bitmap有序集合的語法和使用場景舉例

這篇具有很好參考價值的文章主要介紹了Redis--Bitmap有序集合的語法和使用場景舉例。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

前言

  • Redis除了常見的五種數(shù)據(jù)類型之外,其實(shí)還有一些少見的數(shù)據(jù)結(jié)構(gòu),如Geo,HyperLogLog,Bitmap等。雖然它們少見,但是作用卻不容小覷。本文將介紹Bitmap數(shù)據(jù)類型的語法和使用場景。
  • 下文將介紹bitmap的使用指令,以及其應(yīng)用場景。

Bitmap概述

  • 在開發(fā)中,我們常常需要存放一些布爾類型的數(shù)據(jù),比如我們的上班打卡記錄,游戲簽到記錄等等。假設(shè)一個公司工作簽到打卡的場景,一個員工今年第1,2,3天都工作了,需要對1,2,3做記錄,如果對這三個整型數(shù)使用unsigned int來記錄的話,那么需要3*4=12個字節(jié),也就是96個bit的存儲空間。而一個員工要這樣記錄一整年的數(shù)據(jù),公司又不止一個員工,那么這個打卡功能就將耗費(fèi)大量空間。
  • 為了節(jié)省空間,Redis提供了Bitmap,也就是位圖這種數(shù)據(jù)結(jié)構(gòu)。所謂位圖,其實(shí)就是一個bit數(shù)組,對于一年上班打卡的記錄,只需要提供一個365位的bit數(shù)組,如果第一天工作了,那就將第一位bit的0改為1即可。這樣一來,一個人一年的打卡記錄,只需要365bit位就可以記錄完成了。位圖按位來存儲,大大節(jié)約了空間,其存儲上限為2^32。

Bitmap命令介紹

  • bitmap設(shè)置某一位的值: SETBIT key offset value

    # 字母a的ASCII碼是97,二進(jìn)制就是01100001,一個字節(jié) 八個比特
    # 字母b的ASCII碼是98,二進(jìn)制就是01100010
    # 所以存入a只需要將0,6,7位設(shè)為1即可
    # 接著存入b就需要將10,14,15位設(shè)為1。
    setbit word 0 1
    setbit word 6 1
    setbit word 7 1
    setbit word 10 1
    setbit word 14 1
    setbit word 15 1
    
    # 除此之外,可以之間用字符串填充位的值
    set word ab 
    # 這個指令等價于上面的setbit
    
  • 獲取bitmap中的數(shù)據(jù),使用單個位操作獲取位的值: getbit key offset

    getbit word 0 1
    getbit word 1 1
    
  • 統(tǒng)計bitmap指定位區(qū)間上,值為 1 的個數(shù): bitcount key [start end]

    bitcount word    # 統(tǒng)計key為word的位圖中有多少個1
    bitcount word 0 1 # 前兩個字符中有幾個1 
    
  • 返回bitmap中第一個值為bit的二進(jìn)制位的位置,可以指定范圍: bitpos key bit [start end]

    bitpos word 1  # 返回第一個為1的位
    bitpos word 0 0 1  # 返回前兩個字符中第一個為0的位
    
  • 對一個或多個保存二進(jìn)制位的字符串 key 進(jìn)行位元操作(and,or,not,xor),并將結(jié)果保存到 destkey 上: BITOP operation destkey key [key …]

    bitop not new_word word # 對key為word的位圖取反后存入new_word之中
    

Redis--Bitmap有序集合的語法和使用場景舉例,Redis,redis,數(shù)據(jù)庫,后端,java文章來源地址http://www.zghlxwxcb.cn/news/detail-820071.html

使用場景

  • 需求:40億個QQ號,限制1G的內(nèi)存,如何對這些QQ號進(jìn)行去重。
  • 實(shí)現(xiàn)方案:通過分析需求,有1G內(nèi)存的限制,所以可以使用位圖來節(jié)省空間。使用位圖的話,一個qq號,即一個數(shù)字只需要占用一個bit(將這個bit設(shè)置為1),那么40億個數(shù)字也就只需要400000000/8/1024/1024=476M,滿足要求。
  • 代碼實(shí)現(xiàn):
    public class RedisBitmap {
      
       private static final String QQ_NUMBER = "QQ";
    
       /**
        * 將qq號碼存入位圖中
        * 即將位圖對應(yīng)qq號碼的bit設(shè)為1
        * @param key
        * @param qq_number
        * @param jedis
        */
       public static void saveQQNumber(String key, long qq_number, Jedis jedis){
           jedis.setbit(key,qq_number,true);
       }
    
       /**
        * 獲取bitmap中1的數(shù)量即可得到去重后的qq號數(shù)量
        * @param key
        * @param jedis
        */
       public static Long getCount(String key,  Jedis jedis){
           return jedis.bitcount(key);
       }
    
    }
    

結(jié)尾

  • bitmap常用于上面提及的去重,上班打卡,簽到記錄功能,使用bitmap可以減少很多不必要的存儲空間。所以當(dāng)出現(xiàn)類似的場景時,就好好使用它吧。

到了這里,關(guān)于Redis--Bitmap有序集合的語法和使用場景舉例的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 在Spring Boot微服務(wù)使用ZSetOperations操作Redis集群Zset(有序集合)

    記錄 :447 場景 :在Spring Boot微服務(wù)使用RedisTemplate的ZSetOperations操作Redis集群的Zset(有序集合)數(shù)據(jù)類型。 版本 :JDK 1.8,Spring?Boot 2.6.3,redis-6.2.5。 1.微服務(wù)中 配置Redis信息 1.1在pom.xml添加依賴 pom.xml文件: 解析:spring-boot-starter-data-redis和spring-boot版本保持一致。 1.2在application.ym

    2024年02月08日
    瀏覽(18)
  • Redis有序集合-Zset

    簡介 Redis有序集合zset與普通集合set非常相似,是一個沒有重復(fù)元素的字符串集合 不同之處是有序集合的每個成員都關(guān)聯(lián)了一個****評分(score)****,這個評分(score)被用來按照從最低分到最高分的方式排序集合中的成員。集合的成員是唯一的,但是評分可以是重復(fù)了 因?yàn)樵?/p>

    2024年02月02日
    瀏覽(26)
  • Redis的BitMap使用

    Redis 為我們提供了位圖這一數(shù)據(jù)結(jié)構(gòu),每個用戶每天的登錄記錄只占據(jù)一位,365天就是365位,僅僅需要46字節(jié)就可存儲,極大地節(jié)約了存儲空間。 位圖不是實(shí)際的數(shù)據(jù)類型,而是一組面向位的操作 在被視為位向量的字符串類型上定義。 由于字符串是二進(jìn)制安全 blob,其最大長

    2024年02月07日
    瀏覽(23)
  • 輕松打卡:使用Spring Boot和Redis Bitmap構(gòu)建高效簽到系統(tǒng)【redis實(shí)戰(zhàn) 四】

    輕松打卡:使用Spring Boot和Redis Bitmap構(gòu)建高效簽到系統(tǒng)【redis實(shí)戰(zhàn) 四】

    歡迎來到我的博客,代碼的世界里,每一行都是一個故事 Redis List:打造高效消息隊(duì)列的秘密武器【redis實(shí)戰(zhàn) 一】 Redis Streams在Spring Boot中的應(yīng)用:構(gòu)建可靠的消息隊(duì)列解決方案【redis實(shí)戰(zhàn) 二】 Spring Boot和Redis Geo實(shí)現(xiàn)附近的人【redis實(shí)戰(zhàn) 三】 在數(shù)字化時代,簽到系統(tǒng)已成為許多

    2024年01月23日
    瀏覽(17)
  • 微服務(wù)—Redis實(shí)用篇-黑馬頭條項(xiàng)目用戶簽到功能(使用bitmap實(shí)現(xiàn))與UV統(tǒng)計

    微服務(wù)—Redis實(shí)用篇-黑馬頭條項(xiàng)目用戶簽到功能(使用bitmap實(shí)現(xiàn))與UV統(tǒng)計

    1.1、用戶簽到-BitMap功能演示 我們針對簽到功能完全可以通過mysql來完成,比如說以下這張表 用戶一次簽到,就是一條記錄,假如有1000萬用戶,平均每人每年簽到次數(shù)為10次,則這張表一年的數(shù)據(jù)量為 1億條 每簽到一次需要使用(8 + 8 + 1 + 1 + 3 + 1)共22 字節(jié)的內(nèi)存,一個月則

    2024年02月05日
    瀏覽(19)
  • 使用Spring Boot操作Redis、ES、MongoDB舉例

    在Spring Boot應(yīng)用程序中操作Redis通常涉及到使用Spring Data Redis,這是一個提供簡便方法來操作Redis的庫。以下是一個基本示例,演示如何在Spring Boot應(yīng)用程序中集成和使用Redis: 步驟 1: 添加依賴項(xiàng) 首先,在你的 pom.xml 文件中添加Spring Data Redis的依賴項(xiàng)。 步驟 2: 配置Redis 在你的

    2024年01月25日
    瀏覽(21)
  • Redis教程——Redis bitmap位圖操作(圖解)

    Redis教程——Redis bitmap位圖操作(圖解)

    在平時開發(fā)過程中,經(jīng)常會有一些 bool 類型數(shù)據(jù)需要存取。比如記錄用戶一年內(nèi)簽到的次數(shù),簽了是 1,沒簽是 0。如果使用 key-value 來存儲,那么每個用戶都要記錄 365 次,當(dāng)用戶成百上億時,需要的存儲空間將非常巨大。為了解決這個問題,Redis 提供了位圖結(jié)構(gòu)。 位圖(

    2024年01月21日
    瀏覽(21)
  • Redis - Bitmap

    操作String數(shù)據(jù)類型的key所存儲的字符串指定偏移量上的位,返回原位置的值 優(yōu)點(diǎn): 節(jié)省空間通過一個bit位來表示某個元素對應(yīng)的值或者狀態(tài),其中key就是對應(yīng)元素的值。實(shí)際上8個bit可以組成一個Byte,所以是及其節(jié)省空間的 效率高setbit 和 getbit的時間復(fù)雜度都是O(1),其他位運(yùn)

    2024年02月15日
    瀏覽(19)
  • redis之Bitmap

    redis之Bitmap

    位圖數(shù)據(jù)結(jié)構(gòu)其實(shí)并不是一個全新的玩意,我們可以簡單的認(rèn)為就是個數(shù)組,只是里面的內(nèi)容只能為0或1而已(二進(jìn)制位數(shù)組)。 GETBIT 用于返回位數(shù)組在偏移量上的二進(jìn)制位的值。 值得我們注意的是, GETBIT 的時間復(fù)雜度是 O(1) 。 GETBIT 命令的執(zhí)行過程如下: 計算?(即 3 ),by

    2024年02月15日
    瀏覽(11)
  • SQL的五大約束作用、語法、應(yīng)用場景及舉例

    SQL的五大約束包括 主鍵約束(PRIMARY KEY)、唯一性約束(UNIQUE)、外鍵約束(FOREIGN KEY)、非空約束(NOT NULL)和默認(rèn)約束(DEFAULT) 。 sql約束的作用:主要是 保證數(shù)據(jù)的完整性、準(zhǔn)確性和一致性 ,從而 確保 數(shù)據(jù)庫中存儲的 數(shù)據(jù)質(zhì)量 。 溫馨提示:以下舉例為mysql版本,若您

    2024年01月21日
    瀏覽(54)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包