当前位置: 首页 > news >正文

Redis 三种特殊的数据类型 - Geospatial地理位置 - Hyperloglog基数统计的算法 - Bitmaps位图(位存储)

目录

Redis 三种特殊的数据类型:

Geospatial:地理位置

Geospatial类型常用的命令:

GEOADD:添加地理位置

GEOPOS:获取地理位置

GEODIST:返回两个给定位置之间的距离

GEORADIUS:以给定的经纬度为中心,找出某一半径内的元素

GEORADIUSBYMEMBER:找出位于指定范围内的元素,中心点是由给定的位置元素决定

GEOHASH:返回一个或多个位置元素的Geohash表示

GEO底层的实现原理其实就是Zset !我们可以使用Zset命令来操作geo !

Hyperloglog:基数统计的算法

例如:

Bitmaps:位图(位存储)

例如:


Redis 三种特殊的数据类型:

Geospatial:地理位置

Hyperloglog:基数统计的算法

Bitmaps:位图(位存储)

Geospatial:地理位置

如我需要查询朋友的定位,附近的人,打车所需距离的计算?

这个功能可以推算地理位置的信息,比如说两地之间的距离,方圆几里之内的人

可以查询一些测试数据:全国城市经纬度查询-知之小工具 (100xgj.com)

Geospatial类型常用的命令:

GEOADD:添加地理位置

 

 #规则:两极是无法直接添加的,我们一般会下载城市数据,直接通过java或者python程序导入!

按照(经度 纬度 名称)填写哦!!
如果写错了,可以通过flushdb刷新redis数据库,并通过clear清理页面127.0.0.1:6379> GEOADD china:city 39.54 116.28 Beijin
(error) ERR invalid longitude,latitude pair 39.540000,116.280000
如果出现了如上错误,说明我们写的经纬度超出范围了127.0.0.1:6379> AUTH 123456
OK
127.0.0.1:6379> GEOADD china:city 116.28 39.54 Beijin
(integer) 1
127.0.0.1:6379> GEOADD china:city 121.47 31.23 Shanghai
(integer) 1
127.0.0.1:6379> GEOADD china:city 106.50 29.53 Chongqing
(integer) 1
127.0.0.1:6379> GEOADD china:city 113.18 23.10 Guangzhou 114.05 22.52 Shengzhen
(integer) 2

GEOPOS:获取地理位置

127.0.0.1:6379> GEOPOS china:city Beijin  # 获取指定城市的经度和纬度
1) 1) "116.28000229597091675"2) "39.54000124957348561"
127.0.0.1:6379> 
127.0.0.1:6379> GEOPOS china:city Beijin
1) 1) "116.28000229597091675"2) "39.54000124957348561"
127.0.0.1:6379> GEOPOS china:city Beijin Chongqing
1) 1) "116.28000229597091675"2) "39.54000124957348561"
2) 1) "106.49999767541885376"2) "29.52999957900659211"
127.0.0.1:6379> 

GEODIST:返回两个给定位置之间的距离

单位:

m表示单位为米。

km表示单位为千米。

mi表示单位为英里。

ft表示单位为英尺。

127.0.0.1:6379> GEODIST china:city Beijin Shanghai
"1036715.8809"
127.0.0.1:6379> 
127.0.0.1:6379> GEODIST china:city Beijin Shanghai KM  #表示千米
"1036.7159"
127.0.0.1:6379> 

如何查看我附近的人呢?(获得所有的附近的人的地址,定位!通过半径来查询!)

GEORADIUS:以给定的经纬度为中心,找出某一半径内的元素

127.0.0.1:6379> GEORADIUS china:city 110 30 1000 KM  #以110 30 这个经度纬度作为中心点。
1) "Chongqing"
2) "Shengzhen"
3) "Guangzhou"
127.0.0.1:6379> GEORADIUS china:city 110 30 500 KM
1) "Chongqing"
127.0.0.1:6379> 
127.0.0.1:6379> GEORADIUS china:city 110 30 500 KM withdist  # 显示到中心的距离
1) 1) "Chongqing" 2) "341.9374"
127.0.0.1:6379> 
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 KM withdist withcoord count 1  #限制查看的数量
1) 1) "Chongqing"2) "341.9374"3) 1) "106.49999767541885376"2) "29.52999957900659211"
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 KM withdist withcoord count 2
1) 1) "Chongqing"2) "341.9374"3) 1) "106.49999767541885376"2) "29.52999957900659211"
2) 1) "Guangzhou"2) "829.9936"3) 1) "113.18000167608261108"2) "23.10000005307264104"
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 KM withdist withcoord count 3
1) 1) "Chongqing"2) "341.9374"3) 1) "106.49999767541885376"2) "29.52999957900659211"
2) 1) "Guangzhou"2) "829.9936"3) 1) "113.18000167608261108"2) "23.10000005307264104"
3) 1) "Shengzhen"2) "924.6408"3) 1) "114.04999762773513794"2) "22.5200000879503861"
127.0.0.1:6379> 

GEORADIUSBYMEMBER:找出位于指定范围内的元素,中心点是由给定的位置元素决定

127.0.0.1:6379> GEORADIUSBYMEMBER china:city Chongqing 1000 km
1) "Chongqing"
2) "Guangzhou"
127.0.0.1:6379> 

GEOHASH:返回一个或多个位置元素的Geohash表示

# 将二维的字符串转换为一维的字符串,如果两个字符串接近,那么距离越近
127.0.0.1:6379> GEOHASH china:city Beijin Chongqing
1) "wx48yn090q0"
2) "wm5xzrybty0"
127.0.0.1:6379> 

GEO底层的实现原理其实就是Zset !我们可以使用Zset命令来操作geo !

127.0.0.1:6379> ZRANGE china:city 0 -1  # 查看地图中所有的元素
1) "Chongqing"
2) "Shengzhen"
3) "Guangzhou"
4) "Shanghai"
5) "Beijin"
127.0.0.1:6379> ZREM china:city Beijin  # 移除元素
(integer) 1
127.0.0.1:6379> ZRANGE china:city 0 -1
1) "Chongqing"
2) "Shengzhen"
3) "Guangzhou"
4) "Shanghai"
127.0.0.1:6379> 

Hyperloglog:基数统计的算法

基数是什么?

基数是用来表示一个集合中元素个数的概念。它通常用于描述集合的大小或元素的数量。基数可以是非负整数,包括零。基数为零表示集合是空的,没有元素。

  • 如果一个集合包含了3个元素,那么它的基数是3。
  • 如果一个集合为空,那么它的基数是0。

网页的uV (一个人访问一个网站多次,但是还是算作一个人!)

传统的方式,set 保存用户的id,然后就可以统计set 中的元素数量作为标准判断!

这个方式如果保存大量的用户id,就会比较麻烦!因为我们的目的是计数用户数量,而并不是用来保存用户id的。

优点∶占用的内存是固定,2^64不同的元素的技术,只需要废12KB内存!如果要从内存角度来比较的话Hyperloglog首选!

例如:

127.0.0.1:6379> PFADD mykey a b c d e f g h i j  # 创建第一组元素 mykey
(integer) 1
127.0.0.1:6379> PFCOUNT mykey  #统计mykey元素的基数数量 
(integer) 10
127.0.0.1:6379> PFADD mykey2 i jz x c v b n m  # 创建第二组元素 mykey2
(integer) 1
127.0.o.1:6379> PFCOUNT mykey2
(integer) 9
127.0.0.1:6379>PFMERGE mykey3 mykey mykey2   #合并两组 mykey mykey2 => mykey3并集
OK
127.0.0.1:6379> PFCOUNT mykey3   #看并集的数量!
(integer) 15

如果允许容错,那么一定可以使用Hyperloglog !
如果不允许容错,就使用set或者自己的数据类型即可!

Bitmaps:位图(位存储)

统计用户信息,活跃,不活跃!登录、未登录!打卡,365打卡!两个状态的,都可以使用Bitmaps !

Bitmaps位图,数据结构!都是操作二进制位来进行记录,就只有0和1两个状态!| 

例如:

使用bitmap来记录周一到周日的打卡!

周一:1  周二:0  周三:0  周四: 1 ..... 

查看某一天是否打卡

统计操作:统计打卡的天数(只有三天打卡了)

相关文章:

Redis 三种特殊的数据类型 - Geospatial地理位置 - Hyperloglog基数统计的算法 - Bitmaps位图(位存储)

目录 Redis 三种特殊的数据类型: Geospatial:地理位置 Geospatial类型常用的命令: GEOADD:添加地理位置 GEOPOS:获取地理位置 GEODIST:返回两个给定位置之间的距离 GEORADIUS:以给定的经纬…...

Python web 框架web.py「简约美」

web.py is a web framework for Python that is as simple as it is powerful. web.py is in the public domain, you can use it for whatever purpose with absolutely no restrictions. web.py 是一个简单而强大的 Python Web 框架。web.py 属于公共领域,您可以…...

Bootstrap 重新数据查询时页码为当前页问题

记录一下使用前端组件Bootstrap遇到的一个小问题: 问题描述 第一次查询数据为5页,翻页到第5页后,选中条件再次查询数据时,传到后端页码仍旧为5,而此时数据量小于5页,这时候页码没有重置成第一页&#xff…...

scratch舞蹈比赛 2023年5月中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析

目录 scratch舞蹈比赛 一、题目要求 1、准备工作 2、功能实现 二、案例分析...

windows下安装redis扩展库

1.根据PHP版本号,编译器版本号和CPU架构 选择php_redis和php_igbinary文件(如果是选择线程的情况下需要再去配置php5ts.dll) windows.php.net - /downloads/pecl/releases/redis/ windows.php.net - /downloads/pecl/releases/igbinary/ php_igbinary-3.1.2-7.2-…...

大数据平台数据安全具体措施有哪些?有推荐的吗?

大数据平台是企业处理和分析数据的重要工具之一,也是企业数据存储的重要载体,因此保障大数据平台安全至关重要。那你知道大数据平台数据安全具体措施有哪些?有推荐的吗? 大数据平台数据安全具体措施有哪些? 1、数据…...

基于SSM的健康综合咨询问诊平台设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...

每日一题 2596. 检查骑士巡视方案

难度:中等 很简单,从第 0 步开始模拟即可,唯一sb的就是测试用例中如果(0,0)处不为0的话就直接false,而不是去找0在哪 我的代码: class Solution:def checkValidGrid(self, grid: L…...

第二章 进程与线程 三、进程控制

目录 一、定义 二、实现方式(用原语实现) 注意: 1、原语是什么 2、如何实现原语的原子性 3、关中断指令和开中断指令是什么 三、进程控制的相关原语 1、进程的创建 ​编辑 2、进程的终止 3、进程的阻塞与唤醒(阻塞和唤醒…...

【云原生进阶之PaaS中间件】第二章Zookeeper-3.2架构详解

1 Zookeeper工作原理 1.1 Zookeeper的角色 领导者(leader),负责进行投票的发起和决议,更新系统状态 学习者(learner),包括跟随者(follower)和观察者(obser…...

K8S:kubectl陈述式、声明式资源管理及金丝雀部署

文章目录 一.陈述式资源管理方法1.陈述式资源管理概念2.基本信息查看(1)查看版本信息(2)查看资源对象简写(3)查看集群信息(4)配置kubectl自动补全(5)node节点…...

docker容器日志管理

docker容器日志导致主机磁盘空间满了。docker logs -f container_name 噼里啪啦一大堆,很占用空间,需要的日志可进行备份,不用的日志可以清理掉了。 设置一个容器服务的日志大小上限 上述方法,日志文件迟早又会涨回来。要从根本上…...

Oracel ORA-22992 错误的解决方法

在oracle数据库中,可以使用DBLink 进行垮数据库访问。 今天在使用dblink 查询数据时,提示如下:ORA-22992:无法使用从远程表选择的LOB定位器。 无论是查询远程表还是视图,如果里面存在 CLOB类型的字段,就会…...

CrossOver 23 正式发布:可在 Mac 上运行部分 DX12 游戏

CodeWeivers 公司于今年 6 月发布了 CrossOver 23 测试版,重点添加了对 DirectX 12 支持,从而在 Mac 上更好地模拟运行 Windows 游戏。 该公司今天发布新闻稿,表示正式发布 CrossOver 23 稳定版,在诸多新增功能中,最值…...

一、Mediasoup源码介绍

一、Mediasoup 整体结构 整个Mediasoup库通过Nodejs管理,比如整体逻辑、worker、router、producer、consumer...都是通过JS进行管理的。 其底层的数据传输是通过C部分进行控制的,通过NodeJs来控制C部分,以实现整体的数据传输效 二、Mediasou…...

⑧ 嵌套路由配置

这种就是路由嵌套 在index.js中加上三级页面 引入到二级导航里面 增加重定向配置 三级页面默认显示第一个页面信息 在这里插入图片描述...

【ppt技巧】将幻灯片里的图片背景设置为透明

在PPT中添加了图片,想要将图片中的背景设置为透明或者想要抠图,有什么方法吗?今天分享两个方法。 方法一: 添加图片,选中图片之后,点击【图片格式】功能,点击最左边的【删除背景】 PPT会自动帮…...

rrweb入门

rrweb 背景 rrweb 是 record and replay the web,是当下很流行的一个录制屏幕的开源库。与我们传统认知的录屏方式(如 WebRTC)不同的是,rrweb 录制的不是真正的视频流,而是一个记录页面 DOM 变化的 JSON 数组&#x…...

OSCP系列靶场-Esay-Vegeta1保姆级

OSCP系列靶场-Esay-Vegeta1保姆级 目录 OSCP系列靶场-Esay-Vegeta1保姆级总结准备工作信息收集-端口扫描目标开放端口收集目标端口对应服务探测 信息收集-端口测试22-SSH端口的信息收集22-SSH端口版本信息与MSF利用22-SSH协议支持的登录方式22-SSH手动登录尝试(无)22-SSH弱口令…...

AJAX学习笔记9 搜索联想自动补全

AJAX学习笔记8 跨域问题及解决方案_biubiubiu0706的博客-CSDN博客 其实就一个功能 搜索联想 自动补全 键盘按下事件keydown 键盘弹起事件keyup 做模糊查询 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><t…...

三相桥式整流电路有源逆变状态的研究:基于Matlab仿真的直流发电机电动系统电能流转关系分析

三相桥式整流电路有源逆变状态 Matlab仿真可写报告 直流发电机电动系统入手&#xff0c;研究电能流转关系&#xff0c;再转入变流器分析交流和直流电之间流转&#xff0c;掌握有源逆变条件。玩过直流电机调速的朋友可能遇到过这样的情况&#xff1a;明明在减速状态&#xff0c;…...

形态学操作进阶:手把手教你设计Hit-or-Miss内核检测十字/直角结构

形态学操作进阶&#xff1a;手把手教你设计Hit-or-Miss内核检测十字/直角结构 在计算机视觉领域&#xff0c;形态学操作一直是图像处理中不可或缺的技术手段。其中&#xff0c;Hit-or-Miss变换作为一种高级形态学操作&#xff0c;能够精准定位二值图像中的特定结构模式。想象一…...

LIN总线测试避坑指南:为什么你的校验和测试总通不过?从经典型到增强型的实战解析

LIN总线校验和测试全攻略&#xff1a;从算法原理到故障排查的深度实践 在汽车电子系统的开发与测试中&#xff0c;LIN总线作为CAN总线的补充&#xff0c;广泛应用于车门模块、座椅控制、空调系统等对带宽要求不高的场景。而校验和作为LIN报文数据完整性的重要保障&#xff0c;其…...

还在纸上谈Agent?来搓一只你的「腾讯小龙虾」

大模型卷完参数&#xff0c;开始卷落地。当所有人还在谈论AI Agent如何颠覆未来工作方式时&#xff0c;一部分开发者已经让它为自己“打工”了。从写一封邮件&#xff0c;到整理一份报告&#xff0c;再到串联多个系统完成业务动作&#xff0c;AI 正在完成一次关键的身份跃迁&am…...

基于dify智能客服工作流的多智能体架构实战:高并发场景下的设计与优化

背景痛点&#xff1a;当智能客服遭遇流量洪峰 最近在负责一个电商大促期间的智能客服系统保障&#xff0c;真切体会到了传统单体智能体架构的“力不从心”。我们的客服机器人基于一个大语言模型构建&#xff0c;平时QPS在50左右时&#xff0c;响应时间&#xff08;RT&#xff0…...

MIT6.S081 Lab11实战:手把手教你实现E1000网卡驱动的关键函数(附避坑指南)

MIT6.S081 Lab11实战&#xff1a;从零实现E1000网卡驱动的核心逻辑 在操作系统开发领域&#xff0c;网络驱动是连接内核与物理世界的关键桥梁。MIT6.S081课程的Lab11将带领我们深入xv6内核&#xff0c;亲手实现Intel E1000网卡驱动的核心功能。这个实验不仅考验我们对DMA、环形…...

VMware Workstation 16保姆级教程:Windows Server 2019虚拟机安装全流程(含避坑指南)

VMware Workstation 16实战指南&#xff1a;Windows Server 2019虚拟机高效部署与深度优化 在数字化转型浪潮中&#xff0c;本地虚拟化环境搭建已成为开发者和运维人员的核心技能。作为业界标杆的VMware Workstation 16与Windows Server 2019的组合&#xff0c;能够完美模拟企业…...

Synology Photos CPU驱动人脸识别补丁:解锁旧设备AI相册的终极方案

Synology Photos CPU驱动人脸识别补丁&#xff1a;解锁旧设备AI相册的终极方案 【免费下载链接】Synology_Photos_Face_Patch Synology Photos Facial Recognition Patch 项目地址: https://gitcode.com/gh_mirrors/sy/Synology_Photos_Face_Patch 还在为群晖NAS无法使用…...

Cadence原理图库‘幽灵版本’冲突全解析:从ORDBLL-1125报错看Cache机制与避坑指南

Cadence原理图库‘幽灵版本’冲突全解析&#xff1a;从ORDBLL-1125报错看Cache机制与避坑指南 在电子设计自动化&#xff08;EDA&#xff09;领域&#xff0c;Cadence作为行业标杆工具链&#xff0c;其原理图设计模块被广泛应用于各类复杂电路开发。然而&#xff0c;许多资深用…...

LabVIEW标准表法开发气体流量标准装置

标准表法是气体流量计检定校准的主流方法&#xff0c;针对气体流量检测过程中自动化程度低、数据采集精度不足、设备控制协同性差的问题&#xff0c;依托 LabVIEW 图形化编程平台搭建气体流量标准装置应用系统&#xff0c;实现温度、压力、流量等参数的自动化采集、设备精准调控…...