• redis bitmap学习总结


    BitMap是什么
      Bitmap(即Bitset)
          Bitmap是一串连续的2进制数字(0或1),每一位所在的位置为偏移(offset),bitmap就是通过最小的单位bit来进行0或者1的设置,表示某个元素对应的值或者状态。

      Redis中的BitMap
        Redis从2.2.0版本开始新增了setbit,getbit,bitcount等几个bitmap相关命令。虽然是新命令,但是并没有新增新的数据类型,因为setbit等命令只不过是在set上的扩展。在bitmap上可执行AND,OR,XOR以及其它位操作。

    方法列表

    setBit

    说明:给一个指定key的值得第offset位 赋值为value。

    参数:[key ,offset ,value]: bool or int (1 or 0)

    返回值:LONG: 0 or 1

    getBit

    说明:返回一个指定key的二进制信息

    参数:[key, offset]

    返回值:LONG

    bitCount

    说明:返回一个指定key中位的值为1的个数

    参数:[key, start ,offset] (是以byte为单位不是bit)

    返回值:LONG

    bitOp

    说明:对不同的二进制存储数据进行位运算(AND、OR、NOT、XOR)

    参数:operation destkey key [key …]

    返回值:LONG

    $redis = new Redis;
    $redis->pconnect('127.0.0.1',6379);
    $redis->select(3);
    $redis->flushDb();
    
    // 写个签到的小栗子
    function createKey($date) {
        return 'signin:'.$date;
    }
    $startDate = strtotime('20190718');
    $dateFormat = 'Ymd';
    for ($i=0; $i <= 2; $i++) { 
        
        //统计日期
        $date = date($dateFormat,$startDate+($i*86400));
        
        echo '-------记录日期-'.$date.'--------'.PHP_EOL;
        $key = createKey($date);
    
        for($userId=1;$userId<=10000;$userId++) {
            $redis->setbit($key,$userId,random_int(0,1));
        }
    }
    
    $redis->bitop('AND', 'threeSigninAnd', createKey('20190718'), createKey('20190719'), createKey('20190720'));
    echo "连续三天都签到的用户数量:" . $redis->bitCount('threeSigninAnd').PHP_EOL;
    
    $redis->bitop('OR', 'threeSigninOr', createKey('20190718'), createKey('20190719'), createKey('20190720'));
    echo "三天内有签到的用户" . $redis->bitCount('threeSigninOr').PHP_EOL;
  • 相关阅读:
    定义serialVersionUID的作用与意义整理
    HttpClient学习整理
    Eclipse+TestNG搭建接口自动化测试框架
    Jmeter之Bean shell使用(一)
    吴军博士的《数学之美》(摘录)
    SqlServer—大话函数依赖与范式
    MySQL—FOREIGN KEY
    MYSQL-用户操作
    WAMPServer 默认安装启动后,图标显示橙黄色
    Linux time命令
  • 原文地址:https://www.cnblogs.com/tudou1223/p/11205586.html
Copyright © 2020-2023  润新知