news 2026/6/25 13:08:29

BitMap操作命令

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
BitMap操作命令
  • key:BitMap类型对应得key(因为Redis是key-value型)
  • offset:BitMap是一个字符串,其中每个字符都有对应得索引,这个索引就是字符在BitMap中的偏移量offset,这个offset的范围是【0,232-1】
  • bitValue:BitMap数据都是一个仅包含0和1的二进制字符串,每个offset位上字符称为bitValue。bitValue的值非0即1。

============================================================

  • setbit: 为给定key的BitMap数据的offset位置设置值为value。返回值为修改前该offset位置的bitValue。

格式:setbit key offset value

注意:对于原BitMap中不存在的offset进行复制,字符串会自动伸展以确保它可以将value保存在指定offset上。

字符串伸展时,空白位置以0填充。需要注意的是,对使用较大offset的setbit操作。内存分配过程可能会造成Redis服务器阻塞。

  • getbit:获取指定offset上的位置bitValue
  • bitcount:统计字符串中bitValue为1的bit位数量。一般是统计整个字符串,也可以指定额外的start和end参数,实现对指定范围字符串的统计,包括start和end在内。注意:这里的start和end的单位是字节,不是bit,并且从0开始计数。

格式:bitcount key 【start】 【end】

注意:start和end可以使用负数,-1表示最后一个字节,-2表示倒数第二个。

​ 对于不存在的key。被当成空字符来处理,因此不存在的key进行bitcount操作的结果为0.

  • bitpos:返回BitMap中第一个值为指定值的二进制位的位置,默认是检测整个BitMap。也可以指定要检测的范围。

格式:bitpos key bit 【start】 【end】

  • bitop:对一个或多个BitMap 进行二进制位操作,并将结果保存到destkey上。

格式:bitop operation destkey key【key...】

说明:operation 可以是and、or、not、xor 这四种:

  1. and:对一个或多个BitMap 执行按位与操作,
  2. or:对一个或多个BitMap 执行按位或
  3. xor:对一个或多个BitMap 执行按位异或
  4. not:对一个或多个BitMap 执行按位异非

​ 除了not操作之外,其他操作都可以接收对一个或多个BitMap

​ 除了not操作之外,其他对一个BitMap的操作其实就是一个复制。

​ 如果参与运算的多个BitMap长度不同,较短的BitMap会以0作为补充位与较长的计算。

应用场景

由于offset的取值范围很大,所以一般应用于大数据量的二值性统计。

例如平台活跃用户统计(访问或未访问)、支持率、考勤统计、图像二值化等。

不过,对于数据量较小的二值性统计并不适合BitMap,使用Set更为合适。

HyperLogLog操作命令

HyperLogLog 数据类型是一种超级日志记录。

该数据类型可以简单理解成一个set集合,集合元素为字符串。

实际上HyperLogLog 是一种基数计数概率算法,通过该算法可以利用极小的内存完成独立总数的统计。

  • pfadd:将任意数量的元素添加到HyperLogLog 集合里面

格式:pfadd key element 【element...】

  • pfcount:该命令作用于单个key时,返回这个key的HyperLogLog 集合的近似基数(元素个数);

​ 作用于多个key时,返回所有key的HyperLogLog 集合的并集的近似基数。

格式:pfcount key 【key...】

  • pfmerge:将多个集合合并成一个集合,并存储到destkey,合并后的HyperLogLog 的基数接近于所有的HyperLogLog 集合的并集。

格式:pfmerge destkey sourcekey [sourcekey ...]

应用场景

HyperLogLog 可对数据量超级庞大的日志数据做不精确(误差0.81%)的去重计数统计。

对于平台上每个页面每天的UV数据,非常适合使用HyperLogLog 进行记录。

Geospatial操作命令

Geospatial 地理空间,本质上还是一种集合,只不过集合元素是一种由三部分构成的数据结构,这种数据结构称为空间元素:

  • 经度:longitude。有效经度为【-180,180】.正的表示东经,负的表示西经。
  • 纬度:latitude。有效维度为【-85.05112878,85.05112878】正的表示北纬,负的表示南纬
  • 位置名称:也称为该85.05112878集合的空间元素名称。

该类型可以设置、查询地理位置的经纬度,查询某范围内的空间元素,计算两个空间元素间的距离等。

  • geoadd:将一个或多个空间元素添加到集合中

格式:groadd key longitude latitude member 【 longitude latitude member...】

  • geopos:从指定的地理空间中返回指定元素的位置,即经纬度

格式:geopos key member [member...]

  • geodist:返回2个位置之间的距离。其中unit必须是以下单位的一种:m(米,默认)、km、mi(英里)、ft(英尺)

格式:geodist key member1 member2 [unit]

  • geohash:返回一个或多个位置元素的geohash值。

格式:geohash key member 【member...】

说明:geohash是一种地址编码方法,它能把二维的空间经纬度数据编码成一个字符串,该值主要用于底层应用或者调试,实际作用不大。

  • georadius:以指定的经纬度为中心,返回指定地理空间中包含的所有位置元素中,与中心举例不超过半径的元素,返回时还可以携带额外信息:

    • withdist:返回时携带位置元素与中心之间的距离,单位和用户给定的范围单位保持一致。
    • withcoord:将位置元素的经纬度也返回
    • withhash:将位置元素的geohash也返回,不过这个hash以整数形式表示。

    命令默认返回未排序的位置元素。可通过以下两个参数指定返回位置元素的排序方式:

    • asc:根据中心位置,从近到远的方式排序
    • desc:根据中心位置,从远到近的方式排序

    返回结果包含中心点元素。

格式:georadius key longitude latitude radius 【unit】【withcoord】【withdist】【withhash】【asc|desc】 [count]

  • georadiusbymember:和上面命令一样,只是该命令的中心是由位置元素给定的,而不是经纬度。

格式:georadiusbymember key member radius 【unit】【withcoord】【withdist】【withhash】【asc|desc】 [count]

应用场景

微信发现中的“附近”功能,钉钉签到功能等。

发布/订阅命令

消息系统

发布/订阅(pub/sub) 是一种消息通信模式:

发布者(消息生产者)生产和发送消息到存储系统;

订阅者(消息消费者),从存储系统接收和消费消息。

这个存储系统可以是文件系统FS、消息中间件MQ、数据库管理系统DBMS,也可以是Redis。

订阅者订阅消息后,只要存储系统中有该类消息,就可以不断的接收并消费这些消息。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/25 13:04:06

使用PY32驱动gc9d01-0.71寸TFT

看网上很多做眼睛的视频,就想着弄小圆屏玩一下。也想学学其他芯片(价格美丽,简直不要太便宜,就是资源太少,空间太小)。最后只做到显示一个小的图片。然后准移植到其他资源丰富的环境里去了。

作者头像 李华
网站建设 2026/6/25 13:01:13

终极指南:如何用Swift构建macOS鼠标平滑滚动引擎

终极指南:如何用Swift构建macOS鼠标平滑滚动引擎 【免费下载链接】Mos 一个用于在 macOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板 | A lightweight tool used to smooth scrolling and set scroll direction independently for yo…

作者头像 李华
网站建设 2026/6/25 13:00:05

VisualCppRedist AIO:一站式Visual C++运行时组件修复解决方案

VisualCppRedist AIO:一站式Visual C运行时组件修复解决方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist VisualCppRedist AIO是一个专为解决Wind…

作者头像 李华
网站建设 2026/6/25 12:59:54

FFmpegGUI终极指南:如何用可视化界面轻松处理视频音频文件

FFmpegGUI终极指南:如何用可视化界面轻松处理视频音频文件 【免费下载链接】ffmpegGUI ffmpeg GUI 项目地址: https://gitcode.com/gh_mirrors/ff/ffmpegGUI 如果你曾经因为FFmpeg复杂的命令行参数而头疼,或者因为视频转换软件功能有限而感到沮丧…

作者头像 李华
网站建设 2026/6/25 12:59:22

3分钟掌握音乐解锁:免费解密15+加密音乐格式的终极方案

3分钟掌握音乐解锁:免费解密15加密音乐格式的终极方案 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https…

作者头像 李华
网站建设 2026/6/25 12:58:13

5分钟掌握Windows风扇控制:让电脑散热更智能更安静

5分钟掌握Windows风扇控制:让电脑散热更智能更安静 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/Fa…

作者头像 李华