Redis中的GEO和Stream数据类型分别如何应用?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1510个文字,预计阅读时间需要7分钟。
GEO+GEO是用于存储和操作地理定位信息的数据库类型。随着移动互联网时代的发展,基于位置的服务(LBS)日益流行,例如附近的建筑等。GEO解决了Redis对位置信息存储的需求。
GEO
GEO 是用来存储并操作地理位置信息的数据类型。
随着移动互联网时代到来,LBS服务 (Location-Based Service) 愈发潮流,例如附近的建筑等。
GEO 就是为了解决 Redis 对位置信息的存储需求而诞生的。
内部实现
GEO 内部使用 Sorted Set 集合类型,使用 [GeoHash](Geohash - Wikipedia) 编码方法实现了经纬度到 Sorted Set 中元素权重分数的转换。
将经纬度保存到 Sorted Set 中,利用 Sorted Set 提供的“按权重进行有序范围查找”的特性,实现 LBS 服务中频繁使用的“搜索附近”的需求。
# 向locations添加
GEOADD locations 116.034579 39.903628 114
# 从locations获取10个5km内目标
GEORADIUS locations 116.054579 39.040650 5 km ASC COUNT 10
Stream
Stream 是 Redis 专为 消息队列 设计的数据类型。
在 Stream 之前,基于原生 Redis 消息队列的实现方式都有着或多或少的缺陷:
- 发布订阅模式,不能持久化也就无法可靠的保存消息,并且对于离线重连的客户端不能读取历史消息的缺陷;
- List 实现消息队列的方式不能重复消费,一个消息消费完就会被删除,而且生产者需要自行实现全局唯一 ID。
本文共计1510个文字,预计阅读时间需要7分钟。
GEO+GEO是用于存储和操作地理定位信息的数据库类型。随着移动互联网时代的发展,基于位置的服务(LBS)日益流行,例如附近的建筑等。GEO解决了Redis对位置信息存储的需求。
GEO
GEO 是用来存储并操作地理位置信息的数据类型。
随着移动互联网时代到来,LBS服务 (Location-Based Service) 愈发潮流,例如附近的建筑等。
GEO 就是为了解决 Redis 对位置信息的存储需求而诞生的。
内部实现
GEO 内部使用 Sorted Set 集合类型,使用 [GeoHash](Geohash - Wikipedia) 编码方法实现了经纬度到 Sorted Set 中元素权重分数的转换。
将经纬度保存到 Sorted Set 中,利用 Sorted Set 提供的“按权重进行有序范围查找”的特性,实现 LBS 服务中频繁使用的“搜索附近”的需求。
# 向locations添加
GEOADD locations 116.034579 39.903628 114
# 从locations获取10个5km内目标
GEORADIUS locations 116.054579 39.040650 5 km ASC COUNT 10
Stream
Stream 是 Redis 专为 消息队列 设计的数据类型。
在 Stream 之前,基于原生 Redis 消息队列的实现方式都有着或多或少的缺陷:
- 发布订阅模式,不能持久化也就无法可靠的保存消息,并且对于离线重连的客户端不能读取历史消息的缺陷;
- List 实现消息队列的方式不能重复消费,一个消息消费完就会被删除,而且生产者需要自行实现全局唯一 ID。

