GEO类型

简介: 【10月更文挑战第9天】

用于存储地理位置信息,它允许用户进行各种基于地理位置的操作,如查询附近的位置、计算两个地点之间的距离等

用法:

  1. GEOADD key longitude latitude member:向key对应的GEO集合里添加带有经纬度的成员member。其中经纬度是浮点数
  2. GEOPOS key member [member...] :返回一个或多个成员的地理坐标
  3. GEODIST key member1 member2 [unit]:计算两个成员之间的距离。unit 是可选的距离单位参数,默认为米(m)
  4. GEOHASH key member [member ...] - 返回一个或多个成员的Geohash表示
  5. GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [WITHHASH] - 查询给定位置周围指定半径内的所有成员
GEORADIUS myGeoSet 116.407526 39.904030 500 km WITHCOORD WITHDIST WITHHASH

业务场景
唯一用户访问统计
非常适合用来统计一段时间内访问网站或应用的唯一用户数量

背景:在新闻门户网站,需要统计每天访问的唯一用户数量,以此评估用户基础和内容的吸引力

优点:

  1. 空间占用小
  2. 提供近似但是非常准确的基数估计
  3. 高并发情况下也有高性能
当你使用 <font style="background-color:rgba(255, 255, 255, 0);">PFADD</font> 命令向 HyperLogLog 添加一个元素时,Redis 会内部处理这个元素,并更新 HyperLogLog 的状态。如果该元素是第一次被添加到 HyperLogLog 中,它会改变 HyperLogLog 的计数;如果该元素已经存在于 HyperLogLog 中,Redis 会识别出来,并且不会重复计数。

事件独立性分析

可以用于分析不同事件的独立性,例如不同来源的点击事件是否来自相同的用户群体

具体案例:

在广告平台分析不同广告来源的点击事件是否由相同的用户群体产生

优点:

  1. 多集合统计:可以独立统计不同事件的基数
  2. 合并分析
// 记录点击事件
func recordClickEvent(clickID string, sourceID string) {
   
    sourceSetKey := "clicks:" + sourceID
    // 向对应来源的HyperLogLog中添加点击ID
    rdb.PFAdd(ctx, sourceSetKey, clickID)
}
// 合并点击事件集合并分析用户群体独立性
func analyzeAudienceIndependence(sourceIDs []string) int64 {
   
    destKey := "mergedClicks"
    // 合并所有来源的HyperLogLog集合
    rdb.PFMerge(ctx, destKey, sourceIDs)
    // 计算合并后的基数
    count, _ := rdb.PFCount(ctx, destKey).Result()
    return count
}

注意事项:

  • 提供的是近似值,对于大多数场景来说足够准确
  • 不适合于精确计数或小规模数据集的统计
  • 可以安全的把多个HyperLogLog集合合并,合并操作不会增加内存使用量,并且结果是一个更准确的基数估计
  • 在设计使用HyperLogLog的场景时,应考虑数据的更新频率和集合的数量,以确保性能和准确性。
目录
相关文章
|
7月前
|
存储 DataWorks 监控
DataWoks如何接入ST_Geometry类型的数据?
DataWoks如何接入ST_Geometry类型的数据?
54 4
|
存储 JSON 算法
Json字段选取器介绍和实现
我这个工具采用很简单的语法来标识目标json的层级结构,以及每一层中你想要的字段。语法类似yaml的层级结果,用相同的缩减标识同一层,每一层的关键词是你想要的字段key,不区分大小写,为了更方便使用,也支持正则表达式。 当然这里有几个特殊规则
91 0
Json字段选取器介绍和实现
geojson格式筛选及处理的解决方案
geojson格式筛选及处理的解决方案
229 0
|
2月前
|
atlas
Cesium导入geojson数据
这篇文章详细描述了如何在Cesium中导入GeoJSON数据来绘制地理矢量数据,并提供了实现的具体方法和示例代码。
80 1
Cesium导入geojson数据
|
2月前
|
人工智能 自然语言处理 数据挖掘
文档智能 & RAG让AI大模型更懂业务
《文档智能 & RAG让AI大模型更懂业务》解决方案基于阿里云的文档智能解析与检索增强生成技术,实现非结构化文档向结构化信息的转化,提升AI在特定领域问答的能力。方案提供了详尽的部署指南,包括文档处理、知识库构建等步骤,确保新手也能轻松上手。部署体验良好,未遇重大问题,但建议增加故障排除指南。体验中,LLM知识库展现出高准确率和响应速度,尤其适合处理专业查询。该方案适用于客户服务、知识管理和数据分析等场景,满足生产环境需求,但对于小型企业需考虑成本效益。建议阿里云提供多规模解决方案及定制化选项,以适应不同需求。
77 10
|
7月前
把键值对的值为NSNumber类型的数据转换成标准字符串
把键值对的值为NSNumber类型的数据转换成标准字符串
39 0
|
7月前
|
JavaScript 前端开发
ES6之原始数据类型Symbol
ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它属于 JavaScript 语言的原生数据类型之一,其他数据类型是:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、大整数(BigInt)、对象(Object)。Symbol的作用是创建一个不可变且唯一的标识符,可以用作对象属性的键。它可以用来解决属性名冲突的问题,避免命名冲突。
84 0
|
数据挖掘
ArcGIS:如何添加字段、属性表的连接、字段的计算?
ArcGIS:如何添加字段、属性表的连接、字段的计算?
467 0
|
存储 JavaScript 前端开发
数值的扩展方法以及新增数据类型BigInt
数值的扩展方法以及新增数据类型BigInt
110 0
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能:引领技术革命的新浪潮
【10月更文挑战第14天】 在科技日新月异的今天,人工智能(AI)已经成为推动社会进步的重要力量。本文将探讨AI技术的发展现状、应用领域以及未来趋势,旨在为读者提供一个全面了解AI技术的窗口。
35 2