Bitmap

简介: 【10月更文挑战第7天】

Bitmap

Bitmap是一种基于String类型的特殊数据结构,使用位(bit)来表示信息,每个位可以是0或1。适合快速操作大量独立开关状态的场景,如状态监控、计数器等。

用法:

  1. SETBIT key offset value:对key指定的offset位置设置指定的值,value可以是0或1
  2. GETBIT key offset:获取key在指定offset位置的值
  3. BITCOUNT key [start end]:计算key中值为1的数量,可以计算范围里的位值
  4. BITOP operation destkey key [key ...] :对一个或多个键进行位操作(AND,OR,XOR,NOT)结果储存在destkey里

业务场景

状态监控

可以用来监控大量状态,如用户在线状态、设备状态等

具体案例:

在大型游戏平台里,需要实时监控成千上万的玩家是否在线。使用Bitmap可以高效记录每个玩家的在线状态

优点:

  1. 空间效率:使用位来存储状态,极大地节省了存储空间
  2. 快速读取和更新状态
  3. 批量操作:可以对多个状态位执行批量操作

    功能开关
    可以控制功能开关,如AB测试、特性发布等

具体案例:

在SaaS里,需要对新功能进行AB测试,只对部分用户开放,使用Bitmap可以快速控制哪些用户可以访问新功能

优点:

  1. 可以快速开启或关闭特定用户的访问权限
  2. 易于扩展

    注意事项:

  • Bitmap操作时原子性的,适用于并发场景
  • Bitmap底层使用String类型实现,最大容量也是512MB
  • 位操作可以快速执行,但是要注意内存和性能限制
  • 设计Bitmap应用时,要考虑数据的稀疏性,避免不必要的内存浪费

概率数据结构,用于统计集合里唯一元素的数量,使用固定量的空间,通常为2KB,可以提供非常接近准确值的基数估计

用法:

  1. PFADD key element [element...] :向key对应的HyperLogLog中添加元素,如果key不存在,创建新的HyperLogLog
  2. PFCOUNT key:获取key对应的HyperLogLog中的基数,即唯一元素的数量
  3. PFMERGE destkey sourcekey [sourcekey ...]:将多个HyperLogLog集合合并到一个里,结果放到destkey 里
目录
相关文章
|
存储 缓存 自然语言处理
Elasticesearch内存详解
Elasticesearch内存详解总结文章
5403 0
Elasticesearch内存详解
|
5月前
|
Java 数据库连接 Spring
IDEA 报错 “Command line is too long” 的解决方法
这个错误的本质是 IDEA 生成的启动命令行超出了系统限制。解决方法很简单: 1. 打开运行配置 2. 找到 `Shorten command line`(找不到就点 `Modify options`) 3. 修改为 `JAR manifest` 或 `classpath file` 4. 重新运行
944 2
IDEA 报错 “Command line is too long” 的解决方法
|
人工智能 安全
【新手小白】Sora如何申请?Sora使用教程(最新)
近日,OpenAI发布的Sora模型引发了广泛关注,成为行业内外热议的焦点。这一模型不仅在专业领域引起了极大兴趣,还激发了普通群众对于人工通用智能(AGI)的热情。随着Sora模型的爆红,越来越多的人开始关注一个问题:我们何时能开始使用Sora?在OpenAI的官方论坛上,关于这个问题的讨论异常激烈。有关如何使用Sora的话题阅读量已接近70,000,显示出人们对此充满期待。下面这篇文章解答了大家的这些问题。
6089 3
【新手小白】Sora如何申请?Sora使用教程(最新)
|
4月前
|
关系型数据库 API 数据库
App Inventor接入Supabase:开源免费的后端新选择
App Inventor开发者福音!Supabase是开源Firebase替代品,基于PostgreSQL,支持实时订阅、自动API、文件存储与认证,可自部署、免费额度足。对比CloudBase,更适配海外场景与高可控需求,零服务器即可接入专业后端。(239字)
481 3
|
9月前
|
自然语言处理 网络协议 安全
开发者如何集成IP查询功能?主流IP离线库全面解读与性能对比
本文聚焦开发者IP查询功能集成需求,对比IP数据云、IPinfo、IP2Location等主流IP离线库的覆盖范围、精度、性能等核心维度,提供选型与集成指南,助力金融、政企等场景高效落地,凸显高精度、高可用性的离线库价值。
|
11月前
|
Java Linux 开发工具
Linux 安装 JDK 8 jdk-8u291-linux-x64.tar.gz 详细步骤教程(附安装包)
下载JDK 8安装包并解压至Linux系统(如/opt目录),配置JAVA_HOME、PATH和CLASSPATH环境变量,最后通过java -version和javac -version验证安装成功,即可运行Java程序。
2919 0
|
缓存 Java 数据库连接
Mybatis一级缓存、二级缓存详讲
本文介绍了MyBatis中的查询缓存机制,包括一级缓存和二级缓存。一级缓存基于同一个SqlSession对象,重复查询相同数据时可直接从缓存中获取,减少数据库访问。执行`commit`操作会清空SqlSession缓存。二级缓存作用于同一namespace下的Mapper对象,支持数据共享,需手动开启并实现序列化接口。二级缓存通过将数据存储到硬盘文件中实现持久化,为优化性能,通常在关闭Session时批量写入缓存。文章还说明了缓存的使用场景及注意事项。
1191 7
Mybatis一级缓存、二级缓存详讲
|
druid Java 应用服务中间件
五大主流数据库连接池的深度剖析与对比
HikariCP通过优化concurrentBag和fastStatementList等集合,提升了并发的读写效率。它采用threadlocal缓存连接,并大量运用CAS机制,以最大程度地减少lock的使用。从字节码的维度进行代码优化,确保方法尽量控制在35个字节码以内,以提升JVM处理效率。HikariCP在此基础上的进一步优化措施包括:利用ping命令进行mysql连接,以及通过Sharding-JDBC的Driver、Server和Sidecar三个版本,构建灵活多样的生态系统,满足不同需求和环境。对于线上应用,Sharding-JDBC-Driver可提供直连数据库的最优性能,而Sha

热门文章

最新文章