大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop
  • HDFS
  • MapReduce
  • Hive
  • Flume
  • Sqoop
  • Zookeeper
  • HBase
  • Redis (正在更新)

章节内容

上一节我们完成了如下的内容:

  • string 类型
  • list 类型
  • set 类型
  • sortedset (zset) 类型
  • hash 类型

背景介绍

这里是三台公网云服务器,每台 2C4G,搭建一个大数据的学习环境,供我学习。

之前已经在 VM 虚拟机上搭建过一次,但是没留下笔记,这次趁着前几天薅羊毛的3台机器,赶紧尝试在公网上搭建体验一下。

  • 2C4G 编号 h121
  • 2C4G 编号 h122
  • 2C2G 编号 h123

bitmap类型

bitmap是进行位操作的,通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。

bitmap本身会极大的节省存储空间!

常见操作

应用场景

  • 用户每月签到
  • 统计活跃用户
  • 用户在线状态查询

统计用户签到的信息,可以通过这种方法:

shell 复制代码
127.0.0.1:6379> setbit user:sign:1000 20240101 1 # bitmap 1是签到 0是没有
(integer) 0
127.0.0.1:6379> setbit user:sign:1000 20240102 1
(integer) 0
127.0.0.1:6379> getbit user:sign:1000 20240101
(integer) 1
127.0.0.1:6379> getbit user:sign:1000 20240103
(integer) 0
127.0.0.1:6379> 
127.0.0.1:6379> bitcount user:sign:1000 # 获取用户签到次数
(integer) 2
127.0.0.1:6379> 

对于统计在线用户数量:

shell 复制代码
127.0.0.1:6379> setbit 20240101 1000 1
(integer) 0
127.0.0.1:6379> setbit 20240101 1001 1
(integer) 0
127.0.0.1:6379> setbit 20240101 1002 1
(integer) 0
127.0.0.1:6379> bitcount 20240101
(integer) 3
127.0.0.1:6379> 

geo 空间类型

geo是Redis用来处理位置信息的,主要是利用了 Z阶曲线、Base32编码和geohash算法。

Z阶曲线

在X轴和Y轴上将十进制转换为二进制,采用X轴和Y轴对应的二进制数依次交叉后得到一个六位数编码。

把数字从小到大一次连起来的曲线成为Z阶曲线,Z阶曲线是把多维转换为一维的一种方法。

Base32编码

Base32这种数据编码机制,主要用来把二进制数据编码成可见字符串,编码规则如下:

任意给定一个二进制数据,以5个位(bit)为一组切分,对切分而成的每个组进行编码得到1个可见字符。

geohash算法

GeoHash是一种地理位置信息编码方法,经过GeoHash映射后,地球上任意位置的经纬度就可以编码为一个较短的字符串。

Redis中的经纬度使用52位的整数进行编码,放进ZSet中,Score是GeoHash的52位整数值。在使用Geo查询时,其内部对应的操作其实是ZSet操作,通过ZSet的Score排序就可以得到附近的坐标。

常见操作

应用场景

  • 记录地理位置
  • 计算距离
  • 附近的人
shell 复制代码
127.0.0.1:6379> geoadd user:addr 111.11 44.44 ww 112.22 43.33 kk 111.33 33.44 zz # 添加坐标地址
(integer) 3
127.0.0.1:6379> geohash user:addr ww zz # 获取geo编码结果
1) "wrzhb65cf80"
2) "wmznjrs4150"
127.0.0.1:6379> geopos user:addr ww # 获取坐标
1) 1) "111.11000150442123413"
   2) "44.43999999347073526"
127.0.0.1:6379> geodist user:addr ww zz # 获取坐标的距离
"1223636.0233"
127.0.0.1:6379> geodist user:addr ww kk
"152182.4560"
127.0.0.1:6379> geodist user:addr ww kk km # 获取坐标的距离 KM
"152.1825"
127.0.0.1:6379> 

Stream类型

stream是5.0版本后新增的数据结构,可用于持久化消息队列。

  • 消息ID序列化生成
  • 消息遍历
  • 消息的阻塞和非阻塞读取
  • 消息的分组消费
  • 未完成消息的处理
  • 消息队列监控

每个Stream都有唯一的名称,它就是Redis的Key。

常见操作

应用场景

消息队列

shell 复制代码
127.0.0.1:6379> xadd topic:001 * name wzk age 18 # topic 写入数据
"1720514702080-0"
127.0.0.1:6379> xadd topic:001 * name ww age 20
"1720514716118-0"
127.0.0.1:6379> xadd topic:001 * name zz age 20
"1720514722040-0"
127.0.0.1:6379> xadd topic:001 * name kk age 10
"1720514728559-0"
127.0.0.1:6379> xrange topic:001 - + # 遍历topic 查看当前的数据
1) 1) "1720514702080-0"
   2) 1) "name"
      2) "wzk"
      3) "age"
      4) "18"
2) 1) "1720514716118-0"
   2) 1) "name"
      2) "ww"
      3) "age"
      4) "20"
3) 1) "1720514722040-0"
   2) 1) "name"
      2) "zz"
      3) "age"
      4) "20"
4) 1) "1720514728559-0"
   2) 1) "name"
      2) "kk"
      3) "age"
      4) "10"
127.0.0.1:6379> xread COUNT 1 streams topic:001 0 # 消费topic的数据
1) 1) "topic:001"
   2) 1) 1) "1720514702080-0"
         2) 1) "name"
            2) "wzk"
            3) "age"
            4) "18"
127.0.0.1:6379> 
相关推荐
岁月变迁呀22 分钟前
Redis梳理
数据库·redis·缓存
远游客07131 小时前
centos stream 8下载安装遇到的坑
linux·服务器·centos
Data跳动1 小时前
Spark内存都消耗在哪里了?
大数据·分布式·spark
woshiabc1112 小时前
windows安装Elasticsearch及增删改查操作
大数据·elasticsearch·搜索引擎
Code apprenticeship2 小时前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站3 小时前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle
装不满的克莱因瓶3 小时前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
lucky_syq3 小时前
Saprk和Flink的区别
大数据·flink
lucky_syq3 小时前
流式处理,为什么Flink比Spark Streaming好?
大数据·flink·spark
袋鼠云数栈3 小时前
深入浅出Flink CEP丨如何通过Flink SQL作业动态更新Flink CEP作业
大数据