大数据-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> 
相关推荐
时差9537 分钟前
MapReduce 的 Shuffle 过程
大数据·mapreduce
奶糖趣多多10 分钟前
Redis知识点
数据库·redis·缓存
九河云1 小时前
AWS账号注册费用详解:新用户是否需要付费?
服务器·云计算·aws
kakwooi1 小时前
Hadoop---MapReduce(3)
大数据·hadoop·mapreduce
数新网络1 小时前
《深入浅出Apache Spark》系列②:Spark SQL原理精髓全解析
大数据·sql·spark
Lary_Rock1 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
CoderIsArt1 小时前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
windy1a1 小时前
【c知道】Hadoop工作原理。
hadoop
幺零九零零2 小时前
【计算机网络】TCP协议面试常考(一)
服务器·tcp/ip·计算机网络
云飞云共享云桌面3 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络