Redis-新数据类型-Bitmaps

1,简介

  现代计算机使用二进制(位)作为信息的基本单位,1字节等于8位,

  合理的使用操作位能够有效的提高内存的使用率和开发效率:

    Redis提供了 Bitmaps 这个“数据类型” 可以实现对位的操作:

      1)Bitmaps 本身不是一种数据类型,实际上他就是字符串(key-value)但是它可以对字符串的位进行操作

      2)Bitmaps 单独提供了一套指令,所以在 Redis 中使用Bitmaps 和使用字符串的方法不相同,可以把 Bitmaps 想象成以位为单位的数组,

        数组的每个1单元只能储存0和1,数组的下标在  Bitmaps 中叫偏移量

 

 

 

2,命令

  setbit     <key>  <offset>  <value> 设置Bitmaps中某个偏移量的值(0或1,offset偏移量从0开始)  

                例如:储存某个用户是否浏览了某篇文章:setbit   sub:10284558    1   0

                当偏移量较大时,执行时间会比较慢

  getbit   <key>   <offset>   获取Bitmaps 某个偏移量的值

  

  bitcount   <key>   [start   end]     统计字符串从 start字节 到 end字节   比特值为1的数量

  

  bitop    and(or/xor/not)   <destkey>  [key...]         bitop是一个复合操作,它可以做多个 Bitmaps 的 and(交集)   or(并集)not(非)  xor(异或) 操作并将结果保存到 destkey 中

  

    实例:

  ·  2020-11-04日访问网站的用户为:userid=1,2,5,9

            setbit    unique:users:20201104      1    1

       setbit    unique:users:20201104      2    1

       setbit    unique:users:20201104      5    1

       setbit    unique:users:20201104      9    1

   2020-11-03日访问网站的用户为:userid=0,1,4,9

      setbit    unique:users:20201103      0    1

      setbit    unique:users:20201103      1    1

      setbit    unique:users:20201103      4    1

      setbit    unique:users:20201103      9    1

 

   计算两天都访问过网站的用户数量:

    bitop  and  unique:users:and20201104_03   unique:users:20201103      unique:users:20201104

   

 

    例子2:

      如果网站有1亿用户,每天有5千万用户活跃,用bitmaps比用集合更节省空间

      但是,如果每天只有10万活跃用户,用集合类型比用bitmaps更加节省空间

   

posted @ 2022-02-17 17:28  danny522  阅读(62)  评论(0)    收藏  举报