大数据-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> 
相关推荐
落幕33 分钟前
C语言-进程
linux·运维·服务器
人类群星闪耀时1 小时前
物联网与大数据:揭秘万物互联的新纪元
大数据·物联网·struts
xmweisi4 小时前
【华为】报文统计的技术NetStream
运维·服务器·网络·华为认证
逻各斯4 小时前
redis中的Lua脚本,redis的事务机制
java·redis·lua
DC_BLOG4 小时前
Linux-GlusterFS进阶分布式卷
linux·运维·服务器·分布式
yourkin6664 小时前
TCP...
服务器·网络·tcp/ip
cookies_s_s5 小时前
Linux--进程(进程虚拟地址空间、页表、进程控制、实现简易shell)
linux·运维·服务器·数据结构·c++·算法·哈希算法
诶尔法Alpha6 小时前
Linux上使用dify构建RAG
linux·运维·服务器
阿桢呀7 小时前
Redis实战篇《黑马点评》5
数据库·redis·缓存
熬夜苦读学习7 小时前
Linux文件系统
linux·运维·服务器·开发语言·后端