1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Redis 數(shù)據(jù)結(jié)構(gòu)擴展

        共 3216字,需瀏覽 7分鐘

         ·

        2021-07-05 16:15

        0x01:Pipeline

        • 在用 普通 jedis 方式連接 redis 的時候,由于每次發(fā)送命令都會與 redis 進行連接,而實際處理命令的時間是非常短的,而連接卻十分耗時,性能很低

        n 個命令時間 = n 次連接時間 + n 次處理時間
        • 使用一個緩沖區(qū),命令全部寫入緩沖區(qū)中,一次性發(fā)送給 redis,這樣就可以不用建立多次連接

        n 個命令時間 = 1 次連接時間 + n 次處理時間

        注意:使用 Pipeline 的操作是非原子操作

        Jedis jedis = new Jedis("127.0.0.1"6379);
        long start = System.currentTimeMillis();
        for (int i = 0; i < 100; i++) {
            Pipeline pipeline = jedis.pipelined();
            for (int j = i * 100; j < (i + 1) * 100; j++) {
                pipeline.hset("bbbb" + j, "bbbb" + j, "bbbb" + j);
            }
            pipeline.syncAndReturnAll();
        }
        long end = System.currentTimeMillis();
        System.out.println(end - start); // 118 ms
        jedis.close();


        0x02:GEO

        是 zset 數(shù)據(jù)類型的一個擴展

        127.0.0.1:6379> GEOADD locations 116.419217 39.921133 beijin
        127.0.0.1:6379> GEOADD locations 117.23689,31.825596
        127.0.0.1:6379> GEOPOS locations beijin
        127.0.0.1:6379> GEODIST locations hefei beijin km // 計算距離
        127.0.0.1:6379> GEORADIUSBYMEMBER locations beijin 150 km  // 通過距離計算周邊城市

        注意:沒有刪除命令  它的本質(zhì)是 zset  (type locations) 

        所以可以使用 zrem key member  刪除元素

        zrange key  0   -1  表示所有   返回指定集合中所有value


        0x03:hyperLogLog

        Redis 在 2.8.9 版本添加了 HyperLogLog 結(jié)構(gòu)。

        Redis HyperLogLog 是用來做基數(shù)統(tǒng)計的算法,HyperLogLog 的優(yōu)點是,在輸入元素的數(shù)量或者體積非常非常大時,計算基數(shù)所需的空間總是固定的、并且是很小的

        在 Redis 里面,每個 HyperLogLog 鍵只需要花費 12 KB 內(nèi)存,就可以計算接近 2^64 個不同元素的基 數(shù)。這和計算基數(shù)時,元素越多耗費內(nèi)存就越多的集合形成鮮明對比。

        127.0.0.1:6379> PFADD 2017_03_06:count 'yes' 'yes' 'yes' 'yes' 'no'
        127.0.0.1:6379> PFCOUNT 2017_03_06:count # 統(tǒng)計有多少不同的值
        127.0.0.1:6379> PFADD 2017_09_08:count uuid9 uuid10 uu11
        127.0.0.1:6379> PFMERGE 2016_03_06:count 2017_09_08:count # 合并

        注意:本質(zhì)還是字符串 ,有容錯率,官方數(shù)據(jù)是0.81% 


        0x04:bitmaps

        Bitmap 本質(zhì)是 string,是一串連續(xù)的 2 進制數(shù)字( 0 或 1 ),每一位所在的位置為偏移(offset)。string(Bitmap)最大長度是 512 MB,所以它們可以表示 2 ^ 32 = 4294967296 個不同的位。

        127.0.0.1:6379set test abc
        OK
        127.0.0.1:6379get test
        "abc" # 1100001 1100010 1100011
        127.0.0.1:6379setbit test 6 1
        (integer) 0
        127.0.0.1:6379setbit test 7 0
        (integer) 1
        127.0.0.1:6379get test
        "bbc"
        127.0.0.1:6379setbit test 1000 0 # 擴容至 1000 位,后面的用 0 填充
        (integer) 0
        127.0.0.1:6379getbit test 1000 # 獲取第 1000 位
        (integer) 0
        127.0.0.1:6379bitcount test # 統(tǒng)計 1
        (integer) 10

        應(yīng)用場景:

        • 點贊功能:用戶 ID 必須是數(shù)值類型

        • 點贊

        • setbit 朋友圈ID 用戶ID 1

        • 取消點贊

        • setbit 朋友圈ID 用戶ID 0

        • 統(tǒng)計點贊數(shù)

        • bitcount 朋友圈ID

        • 查看是否點贊

        • getbit 朋友圈ID 用戶ID


        喜歡,在看



        瀏覽 22
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            最新操逼片 | 久久久欧美精品蜜芽毛片 | 美女乱淫aaaa高清视频 | 日本中文在线视频 | 九九成人 | 男女成人毛片免费视频 | 开心伊人网 | 将军娇妻与公h喂奶 | 国产欧美视频一区 | 丁香花无码 |