点一下关注吧!!!非常感谢!!持续更新!!!
目前已经更新到了:
- 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本身会极大的节省存储空间!
常见操作
应用场景
- 用户每月签到
- 统计活跃用户
- 用户在线状态查询
统计用户签到的信息,可以通过这种方法:
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>
对于统计在线用户数量:
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排序就可以得到附近的坐标。
常见操作
应用场景
- 记录地理位置
- 计算距离
- 附近的人
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。
常见操作
应用场景
消息队列
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>