use redis bitmap for label system

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介:
用redis来存储标签和用户的对应关系.
key: 标签
value: 每个用户一个比特位, 1表示有该标签属性, 0 表示没有该标签属性.
操作逻辑例如:
1. 取出带有某几个标签的用户.
比特与操作, 取出最终结果为1的比特位置.
例如
postgres=# select bit '10' & bit '11';
 ?column? 
----------
 10
(1 row)

2. 取出不带某个标签的用户.
以上结果与比特异或操作, 
postgres=# select bit '10' & (bit '10' # bit '11');
 ?column? 
----------
 00
(1 row)

建立用户和比特位置的对应关系.
用户ID, 比特位置
通过对应关系取出用户ID.

分库方案 : 
假设总共不会超过20万个标签.
内存为256GB
x为用户数, (1000000*x)/8为消耗的内存字节数.
256GB可以存储约1000万用户.
(1000000*x)/8=256*1024*1024*1024
x=10995115
那么如果我们有10亿用户的话, 需要100台这样的服务器来支撑.
每台服务器存储20万个标签, 1000万个用户, 每个键值需要1374389字节.

对于带权重的标签, 本方案不合适.
本方案只适合布尔逻辑值的标签.

如果资源紧张的话, 可以考虑PostgreSQL的解决方案.
PostgreSQL存储持久化数据, 并将redis的比特位操作函数移植到PostgreSQL.
在PostgreSQL中使用大对象存储用户比特位的信息. 
必须注意, PostgreSQL的多版本并发控制, 更新会产生新的版本. 所以必须搞清楚大对象的操作会不会产生多版本, 如果产生多版本, 那么是不是仅仅产生chunk的多版本. 应该尽量避免多版本的产生, 否则PostgreSQL可能不适合用于此场景.
大对象的操作接口如下 : 

[参考]
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
7月前
|
存储 NoSQL Serverless
位运算的魅力:使用Redis Bitmap高效处理百万级布尔值
位运算的魅力:使用Redis Bitmap高效处理百万级布尔值
339 0
|
7月前
|
存储 NoSQL BI
Redis 实战篇:巧用 Bitmap 实现亿级海量数据统计
Redis 实战篇:巧用 Bitmap 实现亿级海量数据统计
181 0
|
1月前
|
存储 NoSQL PHP
如何用Redis高效实现点赞功能?用Set?还是Bitmap?
在众多软件应用中,点赞功能几乎成为标配。本文从实际需求出发,探讨如何利用 Redis 的 `Set` 和 `Bitmap` 数据结构设计高效点赞系统,分析其优缺点,并提供 PHP 实现示例。通过对比两种方案,帮助开发者选择最适合的存储方式。
28 3
|
2月前
|
消息中间件 分布式计算 NoSQL
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
27 2
|
5月前
|
存储 NoSQL Redis
Redis 中bitMap使用及实现访问量
Redis 中bitMap使用及实现访问量
156 3
|
5月前
|
存储 NoSQL Java
Java中使用redis的bitMap实现签到功能
这个实现示例提供了一种灵活、高效的方式,展示了如何使用Redis来解决现实中的问题。
309 2
|
5月前
|
存储 NoSQL 数据管理
如何借助Redis巧妙的管理用户签到?——Bitmap篇
Redis位操作用于高效存储分析,如用户签到。通过位操作,每个用户签到只需1位,节省空间。使用`setbit`设置签到状态,`getbit`查询,`bitcount`统计签到天数。适用于用户特征标记、系统功能开关和在线状态追踪。高效率、低空间占用,适合大数据场景。
80 0
|
6月前
|
存储 NoSQL Redis
蓝易云 - Redis之bitmap类型解读
需要注意的是,虽然bitmap可以高效地存储和计算大量的位,但是它也有一些局限性,例如,它不能直接获取或设置某一范围内的所有位,也不能直接获取或设置多个不连续的位。
28 2
|
7月前
|
NoSQL 算法 Java
Redis入门到通关之BitMap实现签到
Redis入门到通关之BitMap实现签到
98 2
|
7月前
|
存储 监控 NoSQL
使用Redis的Bitmap统计一周连续登录的用户
使用Redis的Bitmap统计一周连续登录的用户
219 1