前言
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 值:对应存储类型
举例如下
场景一:行业关注
说明:
- value 0 未关注 1 关注
- setbit {行业id/行业名} {企业id} 1
- getbit {行业id/行业名} {企业id}
- bitcount {行业id/行业名}
举例:
查询企业id为1是否关注金融行业
getbit jinrong 1
返回为 0 则未关注 1,则关注
查询金融行业关注人数
bitcount jinrong
返回关注人数
添加企业id为1关注金融行业
setbit jinhong 1 1
对应的demo实现,详情查看bamboocloud-ga-rule-demo
场景二:阅读量统计
说明:
- value 0 未读 1 已读
- setbit {文章id} {企业id} 1
- getbit {文章id} {企业id}
- bitcount {文章id}
举例:
查询企业id为1是否阅读文章id为1
getbit 1 1
返回为 0 则未阅读 1,则阅读
查询阅读人数
bitcount 1
返回阅读人数
添加企业id为1阅读文章1
setbit 1 1 1
总结
以上是对Redis之Bitmap的用法场景说明,希望你有所收获