点一下关注吧!!!非常感谢!!持续更新!!!
目前已经更新到了:
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>