<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 什么是 Bitmaps Bitmaps 并不是實際的數據類型,而是定義在String類型上的一個面向字節操作的集合。因為字符串是二進制安全的塊,他們的最大長度是512M,最適合設置成2^32個不同字節。 Bitmaps 的最大優勢之一在存儲信息時極其節約空間。例如,在一個以增量用戶ID來標識不同用戶的系統中,記錄用戶的四十億的一個單獨bit信息(例如,要知道用戶是否想要接收最新的來信)僅僅使用512M內存。 ## 常用命令 ### 1\. getbit key offset * 獲取位圖指定索引的值 ~~~ 127.0.0.1:6379> set hello big OK 127.0.0.1:6379> getbit hello 0 (integer) 0 127.0.0.1:6379> getbit hello 1 (integer) 1 127.0.0.1:6379> getbit hello 2 (integer) 1 ~~~ ![圖片描述](https://segmentfault.com/img/bV7Vbe?w=1304&h=669 "圖片描述") ### 2\. setbit key offset value * 給位圖指定索引設置值,返回該索引位置的原始值 ~~~ 127.0.0.1:6379> set hello big OK 127.0.0.1:6379> getbit hello 7 (integer) 0 127.0.0.1:6379> setbit hello 7 1 (integer) 0 127.0.0.1:6379> get hello "cig" 127.0.0.1:6379> setbit world 50 1 (integer) 0 127.0.0.1:6379> get world "\x00\x00\x00\x00\x00\x00 " 127.0.0.1:6379> setbit world 50 0 (integer) 1 127.0.0.1:6379> get world "\x00\x00\x00\x00\x00\x00\x00" ~~~ ![圖片描述](https://segmentfault.com/img/bV7Vh2?w=1316&h=677 "圖片描述") ### 3\. bitcount key \[start end\] * 獲取位圖指定范圍(start到end,單位為字節,如果不指定就是獲取全部)位值為1的個數。 ~~~ 127.0.0.1:6379> set hello big OK 127.0.0.1:6379> bitcount hello (integer) 12 127.0.0.1:6379> setbit hello 7 1 (integer) 0 127.0.0.1:6379> bitcount hello (integer) 13 127.0.0.1:6379> bitcount hello 0 0 (integer) 4 127.0.0.1:6379> bitcount hello 0 1 (integer) 8 127.0.0.1:6379> bitcount hello 0 2 (integer) 13 127.0.0.1:6379> bitcount hello 1 1 (integer) 4 127.0.0.1:6379> bitcount hello 1 2 (integer) 9 127.0.0.1:6379> bitcount hello 2 2 (integer) 5 ~~~ ### 4\. bitop and|or|not|xor destkey key \[key...\] * 做多個bitmap的and(交集)、or(并集)、not(非)、xor(異或)操作并將結果保存到destkey中。 ~~~ 127.0.0.1:6379> set hello big OK 127.0.0.1:6379> set world big OK 127.0.0.1:6379> bitop and destkey hello world (integer) 3 127.0.0.1:6379> get destkey "big" 127.0.0.1:6379> bitop or destkey hello world (integer) 3 127.0.0.1:6379> get destkey "big" 127.0.0.1:6379> bitop not destkey hello (integer) 3 127.0.0.1:6379> get destkey "\x9d\x96\x98" 127.0.0.1:6379> bitop xor destkey hello world (integer) 3 127.0.0.1:6379> get destkey "\x00\x00\x00" ~~~ ### 5\. bitpos key targetBit \[start\] \[end\] (起始版本:2.8.7) * 計算位圖指定范圍(start到end,單位為字節,如果不指定就是獲取全部)第一個偏移量對應的值等于targetBit的位置。 ~~~ 127.0.0.1:6379> set hello big OK 127.0.0.1:6379> bitpos hello 1 (integer) 1 127.0.0.1:6379> bitpos hello 0 (integer) 0 127.0.0.1:6379> bitpos hello 1 2 2 (integer) 17 127.0.0.1:6379> bitpos hello 1 2 3 (integer) 17 127.0.0.1:6379> bitpos hello 0 2 3 (integer) 16 127.0.0.1:6379> bitpos hello 0 0 3 (integer) 0 127.0.0.1:6379> bitpos hello 1 0 3 (integer) 1 ~~~ ## 實戰應用 ### 獨立用戶訪問統計 1. 使用 set 和 Bitmap (前提是用戶的ID必須是整型) 2. 1億用戶,五千萬獨立 | 數據類型 | 每個userId占用空間 | 需要存儲的用戶量 | 內存使用總量 | | --- | --- | --- | --- | | set | 32位(假設userId用的是integer) | 50,000,000 | 32位\*50,000,000=200MB | | Bitmap | 1位 | 100,000,000 | 1位\*100,000,000=12.5MB | 1. 若只有10萬獨立用戶 | 數據類型 | 每個userId占用空間 | 需要存儲的用戶量 | 內存使用總量 | | --- | --- | --- | --- | | set | 32位(假設userId用的是整型) | 100,000 | 32位\*100,000=4MB | | Bitmap | 1位 | 100,000,000 | 1位\*100,000,000=12.5MB | ## 使用經驗 1. string類型最大長度為512M。 2. 注意setbit時的偏移量,當偏移量很大時,可能會有較大耗時。 3. 位圖不是絕對的好,有時可能更浪費空間。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看