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 ..... 

查看某一天是否打卡

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/82419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Seata 源码篇之AT模式启动流程 - 上 - 02

Seata 源码篇之AT模式启动流程 - 02 自动配置两个关键点 初始化初始化TM初始化RM初始化TC 全局事务执行流程TM 发起全局事务GlobalTransactional 注解处理全局事务的开启 TM 和 RM 执行分支事务IntroductionDelegatingIntroductionInterceptorDelegatePerTargetObjectIntroduct…

在华为云服务器上CentOS 7安装单机版Redis

https://redis.io/是官网地址。 点击右上角的Download。 可以进入https://redis.io/download/——Redis官网下载最新版的网址。 然后在https://redis.io/download/页面往下拉,点击下图超链接这里。 进入https://download.redis.io/releases/下载自己需要的安装…

【C语言】自定义类型:结构体【结构体内存具详细】,枚举,联合

目录 一、结构体 1.结构的声明 2.特殊的声明 3.结构的自引用 4.结构体变量的定义和初始化 5.结构体内存对齐(重点来了) 6.为什么会存在内存对齐 7.修改默认对齐数 8.结构体传参 二、位段 1.什么是位段 2.位段的内存分配 3.位段的跨平台问题…

ajax day4

1、promise链式调用 /*** 目标:把回调函数嵌套代码,改成Promise链式调用结构* 需求:获取默认第一个省,第一个市,第一个地区并展示在下拉菜单中*/let pname axios({url: http://hmajax.itheima.net/api/province,}).t…

21天学会C++:Day11----运算符重载

CSDN的uu们&#xff0c;大家好。这里是C入门的第十一讲。 座右铭&#xff1a;前路坎坷&#xff0c;披荆斩棘&#xff0c;扶摇直上。 博客主页&#xff1a; 姬如祎 收录专栏&#xff1a;C专题 目录 1. 知识引入 2. 运算符重载 2.1 operator<() 2.2 operator() 2.3 o…

jvm中对象创建、内存布局以及访问定位

对象创建 Java语言层面&#xff0c;创建对象通常&#xff08;例外&#xff1a;复制、反序列化&#xff09;仅仅是一个new关键字即可&#xff0c;而在虚拟机中&#xff0c;对象&#xff08;限于普通Java对象&#xff0c;不包括数组和Class对象等&#xff09;的创建又是怎样一个过…

小米华为,化干戈为玉帛!

近日来&#xff0c;手机圈又掀起了各大厂家推出新品的高潮。首先是华为Mate60的推出&#xff0c;其自研的麒麟9000S芯片瞬间点燃了国内手机市场&#xff0c;得到了国内甚至国外业界人士的认可和好评。 而近日网上盛传的小米创始人雷军的“愿意加入华为技术生态圈”的邀请&…

Redis缓存实现及其常见问题解决方案

随着互联网技术的发展&#xff0c;数据处理的速度和效率成为了衡量一个系统性能的重要指标。在众多的数据处理技术中&#xff0c;缓存技术以其出色的性能优化效果&#xff0c;成为了不可或缺的一环。而在众多的缓存技术中&#xff0c;Redis 以其出色的性能和丰富的功能&#xf…

JDK jps命令复习

之前写过jdk命令工具的博文&#xff0c;下面复习jps命令&#xff1b; jps 是 Java Process Status Tool 的简称,它的作用是为了列出所有正在运行中的 Java 虚拟机进程和相关信息&#xff1b; jps 命令参数 -q 只输出进程 ID,省略主类的名称 -m 输出虚拟机进程启动时传递…

AG35学习笔记(一):debug串口抓取模组log、debug串口测试AT指令、echo命令通过串口发送16进制数据

目录 一、概述二、抓取模组log2.1 硬件接口2.2 用户登录2.3 相关指令 三、测试AT指令3.1 查看端口3.2 进入模式 四、串口发16进制echo使用 一、概述 二、抓取模组log 在之前记录了通过USB&#xff0c;使用移远工具Qwinlog来抓取log&#xff08;3.3 抓取模组log&#xff09;。…

【Java】第一个Servlet程序

第一个Servlet程序 创建项目引入依赖手动创建必要的目录/文件编写代码打包程序部署验证程序是否正常工作 创建项目 选中maven 创建好项目后,观察左侧项目结构 引入依赖 当权代码需要使用servlet开发,而Java标准库中并没有servlet,此时就需要让maven能够把servlet的依赖获取…

子网的划分

强化计算机网络发现王道没有这一块的内容&#xff0c;导致做题稀里糊涂。于是个人调研补充。 子网划分是将一个大型IP网络划分成更小的子网&#xff0c;以实现更有效的网络管理和资源分配。 原因&#xff1a; 提高网络性能&#xff1a;子网划分可以减少广播域的大小&#xff…

成集云 | 用友NC集成旺店通ERP(旺店通主管库存)| 解决方案

源系统成集云目标系统 方案介绍 用友NC是用友NC产品的全新系列&#xff0c;是面向集团企业的世界级高端管理软件。它以“全球化集团管控、行业化解决方案、全程化电子商务、平台化应用集成”的管理业务理念而设计&#xff0c;采用J2EE架构和先进开放的集团级开发平台…

bootstrap柵格

.col-xs- 超小屏幕 手机 (<768px) .col-sm- 小屏幕 平板 (≥768px) .col-md- 中等屏幕 桌面显示器 (≥992px) .col-lg- 大屏幕 大桌面显示器 (≥1200px) 分为12个格子 -后面的1代表占12分子1也就是一份 1.中等屏幕 <div class"container-fluid a">&l…

Autojs 小游戏实践-潮玩宇宙开扭蛋

概述 最近在玩潮流宇宙&#xff0c;里面有扭蛋兔的一个玩法&#xff0c;开始有很多蛋&#xff0c;需要我们一个个点开&#xff0c;然后根据装备品质替换分解&#xff0c;潮流提供了自动开扭蛋功能&#xff0c;但是开到品质比自己装备好的时候回暂停&#xff0c;由于个人懒得看…

在Kubernetes上安装和配置Istio:逐步指南,展示如何在Kubernetes集群中安装和配置Istio服务网格

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

掌握这三大要素,轻松写出爆款软文

随着网络的快速发展&#xff0c;软文营销的趋势也在不断变化&#xff0c;做软文看似简单&#xff0c;但是想要做出成绩&#xff0c;真正吸引用户其实是有一定难度的&#xff0c;也有不少企业向媒介盒子咨询软文写作的相关话题&#xff0c;今天就让媒介盒子告诉大家&#xff0c;…

Linux查找文件内容的命令

在Linux中&#xff0c;您可以使用以下命令来查找文件内容&#xff1a; grep命令&#xff1a; grep命令用于在文件中搜索指定的文本模式&#xff0c;并将包含匹配的行打印出来。语法如下&#xff1a; grep "要查找的文本" 文件名例如&#xff0c;要在名为example.txt的…

【深度学习 | LSTM】解开LSTM的秘密:门控机制如何控制信息流

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

(超详解)堆排序+(图解)

目录&#xff1a; 1:如何建堆(两种方法) 2:两种方法建堆的时间复杂度分析与计算 3:不同类型的排序方式我们应该如何建堆 文章正式开始&#xff1a; 1&#xff1a;如何建堆 在实现堆排序之前我们必须得建堆&#xff0c;才能够实现堆排序 首先在讲解如何建堆之前让我们先来回顾一…