Redis采用bitmap实现关注、点赞、浏览量

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis采用bitmap实现关注、点赞、浏览量

前言

image.png

Redis 作为一个内存存储数据库中间件,具备极强的性能,多用来进行缓存使用。当然,Redis,还有很多内置的高级功能,让我们在一些场景下用的更爽。


面试经常会聊到Redis ,多数应试者会侃侃而言,因为可能是必然要准备的一项科目。对于Redis的数据类型,大家可能都了解的比较多。

基本数据结构包括:

  • String: 字符串
  • Hash: 散列
  • List: 列表
  • Set: 集合
  • Sorted Set: 有序集合


相关使用说明,在此不多讲,今天主要聊下,Redis的高级用法。


Redis 特性


速度快:10w ops(每秒10w读写),数据存在内存中,c语言实现,单线程模型

持久化:rdb和aof

多种数据结构

5大数据结构

BitMaps位图:布隆过滤器   本质是 字符串 String

HyperLogLog:超小内存唯一值计数,12kb  HyperLogLog  本质是 字符串 String

GEO:地理信息定位  本质是有序集合 Sorted List

 

支持多种编程语言:基于tcp通信协议,各大编程语言都支持

功能丰富:发布订阅(消息) Lua脚本,事务(pipeline)

简单:源代码几万行,不依赖外部库

主从复制:主服务器和从服务器,主服务器可以同步到从服务器中


详细的说明,大家可以自行学习,相信会掌握很多。本次,我们重点聊Redis采用bitmap实现关注、点赞、浏览量。


Redis之Bitmap说明

Bitmap不是Redis中的实际数据类型,实际上是基于位图存储结构的字符串类型。

最大支持512MB内存,存2的32次方位

详细介绍,查看官方说明

Redis使用Bitmap常用命令

# 设置key offset值
setbit key offset value
# 获取对应key offset标记
gitbit key offset
# 统计数量
bitcount key

Redis使用Bitmap说明文档

value 值:0/1

offset 值:对应的id

key 值:对应存储类型


举例如下

场景一:行业关注

说明:

  1. value 0 未关注 1 关注
  2. setbit {行业id/行业名} {企业id} 1
  3. getbit {行业id/行业名} {企业id}
  4. bitcount {行业id/行业名}

举例:

查询企业id为1是否关注金融行业

getbit jinrong 1

返回为 0 则未关注 1,则关注

查询金融行业关注人数

bitcount jinrong

返回关注人数

添加企业id为1关注金融行业

setbit jinhong 1 1

对应的demo实现,详情查看bamboocloud-ga-rule-demo

场景二:阅读量统计

说明:

  1. value 0 未读 1 已读
  2. setbit {文章id} {企业id} 1
  3. getbit {文章id} {企业id}
  4. bitcount {文章id}

举例:

查询企业id为1是否阅读文章id为1

getbit 1 1

返回为 0 则未阅读 1,则阅读

查询阅读人数

bitcount 1

返回阅读人数

添加企业id为1阅读文章1

setbit 1 1 1


总结

以上是对Redis之Bitmap的用法场景说明,希望你有所收获


相关实践学习
基于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
目录
相关文章
|
9月前
|
存储 NoSQL Serverless
位运算的魅力:使用Redis Bitmap高效处理百万级布尔值
位运算的魅力:使用Redis Bitmap高效处理百万级布尔值
372 0
|
9月前
|
存储 NoSQL BI
Redis 实战篇:巧用 Bitmap 实现亿级海量数据统计
Redis 实战篇:巧用 Bitmap 实现亿级海量数据统计
203 0
|
3月前
|
存储 NoSQL PHP
如何用Redis高效实现点赞功能?用Set?还是Bitmap?
在众多软件应用中,点赞功能几乎成为标配。本文从实际需求出发,探讨如何利用 Redis 的 `Set` 和 `Bitmap` 数据结构设计高效点赞系统,分析其优缺点,并提供 PHP 实现示例。通过对比两种方案,帮助开发者选择最适合的存储方式。
76 3
|
4月前
|
消息中间件 分布式计算 NoSQL
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
47 2
|
7月前
|
存储 NoSQL Redis
Redis 中bitMap使用及实现访问量
Redis 中bitMap使用及实现访问量
187 3
|
7月前
|
存储 NoSQL Java
Java中使用redis的bitMap实现签到功能
这个实现示例提供了一种灵活、高效的方式,展示了如何使用Redis来解决现实中的问题。
358 2
|
7月前
|
NoSQL Redis
Redis 使用 hyperLogLog 实现请求ip去重的浏览量
Redis 使用 hyperLogLog 实现请求ip去重的浏览量
52 0
|
8月前
|
存储 NoSQL Redis
蓝易云 - Redis之bitmap类型解读
需要注意的是,虽然bitmap可以高效地存储和计算大量的位,但是它也有一些局限性,例如,它不能直接获取或设置某一范围内的所有位,也不能直接获取或设置多个不连续的位。
37 2
|
7月前
|
存储 NoSQL 数据管理
如何借助Redis巧妙的管理用户签到?——Bitmap篇
Redis位操作用于高效存储分析,如用户签到。通过位操作,每个用户签到只需1位,节省空间。使用`setbit`设置签到状态,`getbit`查询,`bitcount`统计签到天数。适用于用户特征标记、系统功能开关和在线状态追踪。高效率、低空间占用,适合大数据场景。
111 0
|
9月前
|
NoSQL 算法 Java
Redis入门到通关之BitMap实现签到
Redis入门到通关之BitMap实现签到
119 2