Redis之三大特殊数据类型:Geospatial:地理位置 hyperloglog:实现的功能是计算统计 bitmaps:位存储

news2024/11/19 17:31:58

三大特殊数据类型结构,十分的少见但是开源项目中依然有它们的身影

Geospatial:地理位置

实现的功能:附近的人,城市与城市之前的距离计算

添加城市经纬度到key中,经纬度则是key的value值,在正常的开发过程中,这些数据是通过java导入即可,不需要手动添加

添加命令

        geoadd

格式

        geoadd key value【纬度 精度 城市名】

geoadd 

[root@localhost redis]# ./bin/redis-cli -p 6379             客户端登录redis
127.0.0.1:6379> GEOADD china:city 116.40 39.90 beijing     添加北京的经纬度
(integer) 1
127.0.0.1:6379> GEOADD china:city 121.47 31.23 shanghai 117.55 34.85 zaozhuang 110.33 20.00 hainan        添加多个城市的经纬度,上海 枣庄 海南
(integer) 3

Geopos:查询添加key中的数据

127.0.0.1:6379> GEOPOS china:city beijing    查询一个城市,北京经纬度
1) 1) "116.39999896287918091"
   2) "39.90000009167092543"
127.0.0.1:6379> GEOPOS china:city zaozhuang hainan  查询多个城市经纬度,枣庄海南
1) 1) "117.55000144243240356"
   2) "34.8499990842851517"
2) 1) "110.32999902963638306"
   2) "20.00000058910486445"
127.0.0.1:6379>   

 Geodis :可以查询两地的距离

127.0.0.1:6379> GEODIST china:city zaozhuang beijing km 

                                                                        查询枣庄到北京的直线距离单位为 km
"570.8001"

 

注意:距离有点差距,因为经纬度并不是十分的精确,但是差的并不是很多

georadius:以给定的经纬度为中心,找到某一半径的元素

127.0.0.1:6379> ZRANGE china:city 0 -1     集合中已存在的所有键,查询则是在集合的基础上进行查询
1) "hainan"
2) "shanghai"
3) "zaozhaung"
4) "beijing"
127.0.0.1:6379> 

以经纬度110 30为中2000km为半径画个圆,找到集合中在⚪中的数据

127.0.0.1:6379> GEORADIUS china:city 110 30 2000 km   
1) "shanghai"
2) "zaozhaung"
3) "beijing"
4) "hainan"

查询数据,并附带着城市的经纬度
127.0.0.1:6379> GEORADIUS china:city 110 30 2000 km withcoord 
1) 1) "shanghai"
   2) 1) "121.47000163793563843"
      2) "31.22999903975783553"
2) 1) "zaozhaung"
   2) 1) "117.55000144243240356"
      2) "34.8499990842851517"
3) 1) "beijing"
   2) 1) "116.39999896287918091"
      2) "39.90000009167092543"
4) 1) "hainan"
   2) 1) "110.32999902963638306"
      2) "20.00000058910486445"

查询数据并附带着城市距离这个⚪的距离
127.0.0.1:6379> GEORADIUS china:city 110 30 2000 km withdist
1) 1) "shanghai"
   2) "1105.9098"     距离
2) 1) "zaozhaung"
   2) "890.2686"      距离
3) 1) "beijing"     
   2) "1245.2858"    距离
4) 1) "hainan"
   2) "1112.7582"    距离

127.0.0.1:6379> GEORADIUS china:city 110 30 2000 km withdist count 1  

                                                        count则表示:只显示一个数据,显示最近的那个城市
1) 1) "zaozhaung"
   2) "890.2686"
127.0.0.1:6379> GEORADIUS china:city 110 30 2000 km withdist count 2

                                                                显示两个城市
1) 1) "zaozhaung"
   2) "890.2686"
2) 1) "shanghai"
   2) "1105.9098"

 GEORADIUSBYMEMBER :根据城市为中心进行查找

上面的georadius是通过给定的经纬度为中心进行查找,而这个则是通过结合中已经存在的城市为中心进行查找

127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km

                        以集合中北京为中1000km为半径,枣庄则是在⚪中
1) "zaozhaung"
2) "beijing"
127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km withcoord

                                                                附带查询到数据的经纬度
1) 1) "zaozhaung"
   2) 1) "117.55000144243240356"
      2) "34.8499990842851517"
2) 1) "beijing"
   2) 1) "116.39999896287918091"
      2) "39.90000009167092543"
127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km withdist

                                                                附带查询城市的距离
1) 1) "zaozhaung"
   2) "570.8001"
2) 1) "beijing"
   2) "0.0000"
127.0.0.1:6379> 

Geohash:返回一个或多个元素,是通过hash来进行表示

返回值则是11个字符的Geohash的字符串

是将二维的经纬度转换为一维的字符串

注意:如果两个返回值越接近,表示两个城市距离就越近

127.0.0.1:6379> GEOHASH china:city beijing zaozhaung
1) "wx4fbxxfke0"
2) "ww5w6bjrcw0"
127.0.0.1:6379>  

Geo实现的底层原理就是五大基本数据类型的zset,在redis.io的官方文档中,并没有介绍关于删除集合信息的命令,但是我们可以通过底层原理去实现键的删除 

127.0.0.1:6379> ZRANGE china:city 0 -1   查询集合中的所有数据
1) "hainan"
2) "shanghai"
3) "zaozhaung"
4) "beijing"
127.0.0.1:6379> ZREM china:city zaozhaung      删除枣庄这个城市的数据
(integer) 1
127.0.0.1:6379> ZRANGE china:city 0 -1    删除成功
1) "hainan"
2) "shanghai"
3) "beijing"
127.0.0.1:6379> 

hyperloglog:实现的功能是计算统计

例如:统计网页的访问量(注意一点:redis功能具有一定的容错,并不是完全正确)

基数:结合中不重复的元素个数,可以极少的占用内存

127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> PFADD key1 a b c d e f g              创建两个集合分别放着不同的信息
(integer) 1
127.0.0.1:6379> PFADD key2 e f g h i j k
(integer) 1
127.0.0.1:6379> PFCOUNT key1                         查看集合1中的元素个数
(integer) 7
127.0.0.1:6379> PFCOUNT key2                               
(integer) 7
127.0.0.1:6379> PFMERGE key3 key1 key2          将集合一与集合二整合到集合三中
OK
127.0.0.1:6379> PFCOUNT key3                        这里显示的则是两个集合中的基数
(integer) 11
127.0.0.1:6379> 

bitmaps:位存储

统计信息:只有两种情况的例如:登录,未登录  签到 未签到

bitmaps位图,数据结构 是二进制来进行记录,只有0 1两个状态

127.0.0.1:6379> setbit sign 0 1   假设一每周签到为前提 1 表示已签到 0 表示没签到

                                                        创建每天签到的状况
(integer) 0

127.0.0.1:6379> setbit sign 1 0       
(integer) 0
127.0.0.1:6379> setbit sign 2 1
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 5 1
(integer) 0
127.0.0.1:6379> setbit sign 6 1
(integer) 0
127.0.0.1:6379> GETBIT sign 1    查看周一是否签到
(integer) 0
127.0.0.1:6379> GETBIT sign 0 查看周天是否签到
(integer) 1
127.0.0.1:6379> BITCOUNT sign    统计已存入信息已签到的个数
(integer) 5
127.0.0.1:6379>  

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

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

相关文章

获得 随机验证码(以图片为底层)

1:工具类 Slf4j public class RandomValidateCode {private static String baseNumLetter "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";private static String font "微软雅黑";//绘制验证码图片,返回验证码文本内容pu…

【机器学习】pytorch安装——环境配置(极简教程)

🥑 Welcome to Aedream同学 s blog! 🥑 文章目录 省流总结新建环境确定显卡型号安装显卡驱动安装pytorch国内镜像下载本地下载 验证安装成功 最近重新配置环境,简单记录一下。最近chatgpt等大语言模型和ai绘图火热,也为了方便很多…

视频剪辑必备的6个免费素材网站

做视频剪辑需要用到视频、音频、图片等素材,推荐几个网站,有免费、有付费,可根据需求自信选择~赶紧收藏起来! 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 菜鸟图库可以找到设计、办公、图片、视频、音频等各种…

电视机顶盒哪个牌子好?数码小编盘点电视机顶盒排行榜

电视机顶盒哪个牌子好?这是困扰新手们的一大难题,部分产品被爆出虚标高配、偷工减料,面对众多的机顶盒品牌和型号,怎么选择才好?小编以销量和用户评价为标准,盘点了电视机顶盒排行榜,跟着我一起…

Web端3D轻量化引擎基于PBR渲染——仿真模拟更逼真

HOOPS Communicator在2021版本中,推出了基于PBR(Physically Based Rendering)的渲染特性以提供更高质量的渲染技术。 PBR将材料表示为一系列方程,这些方程对光如何从表面反射进行建模,再通过GPU上运行的着色器代码进行…

MySQL基础(二)MySQL环境搭建

. MySQL的卸载 步骤1:停止MySQL服务 在卸载之前,先停止MySQL8.0的服务。按键盘上的“Ctrl Alt Delete”组合键,打开“任务管理器”对话框,可以在“服务”列表找到“MySQL8.0”的服务,如果现在“正在运行”状态&…

linux:命令grep查找关键字、wc统计以及管道符

linux:命令grep查找关键字、wc统计以及管道符 grep: wc: 输入wc test.txt时,输出了2 11 59 这三个数字 意思是:2行、11个单词(用空格分开就算一个单词)、59个字符(字节) ls -l看了看,也确实是59个字节。 通过wc的可选项来进行查看: 管道符…

成功解决:ubuntu下ifconfig不显示网卡信息

目录 前言方法一(临时)方法二第一步第二步第三步 前言 好久没动电脑虚拟机,今天打开ubuntu发现右上角没有网络图标,打开终端ping不同百度,再输入ifconfig发现不显示网卡信息,于是开始尝试各种方式&#xf…

11.软考——必考题型

1.必考题一------网络图 (1)完成项目的最少时间,肯定要最大最长的活动完成才算完成项目,因此找最长的路径:A->B->D->G->I->K->L 22天 (2)由于BD这条线就是处于最长的线,因此不能晚开始,晚开始就会导致整个项目都跟着晚。 (1)最长18 A--B…

Mysql 学习(八)单表查询方法二

复杂查询 上一节说了5种访问类型的查询,这一节就来说说关于这些比较复杂的查询 情况一:多个二级索引查询 sql:SELECT * FROM index_value_table WHERE value1 abc AND value2 > 1000;搜索条件: value1 等于 abcvalue2 大于…

tensorRT的完整安装以及常见错误 export failure: [WinError 127] 找不到指定的程序。

安装CUDA 查看本机适配的CUDA 版本 要想安装TensorRT必须要先安装CUDA和cudnn,那么首先需要去查看自己电脑的英伟达驱动程序程序,位置如下: NVIDIA控制面板->帮助->系统信息->组件,如下图所示本机适配CUDA版本为11.7 …

mongodb分片集群搭建

1.本次搭建使用三台centos7主机搭建伪集群,关闭防火墙和selinux服务 2.mongodb架构相当于9个分片节点,3个路由节点,3个配置节点,主机信息如下图所示 主机名称主机ip地址端口服务A10.1.60.11420001,21001,…

二叉树基本概念、种类、存储方式、遍历(JS实现)

📝个人主页:爱吃炫迈 💌系列专栏:数据结构与算法 🧑‍💻座右铭:道阻且长,行则将至💗 文章目录 二叉树基本概念性质 二叉树的种类满二叉树完全二叉树二叉搜索树平衡二叉搜…

问卷调查工具排行榜

问卷调查是从特定目标受众收集信息、意见和反馈的重要工具。随着技术的进步,市场上有许多问卷调查工具可供选择,这使得选择最适合您需求的工具变得具有挑战性。在本文中,我们将讨论一些可用的知名问卷调查工具。 1、Zoho Survey Zoho Surve…

看过这篇文章,读懂数据分析

一、为什么需要数据分析 数据分析的重要性不言而喻,没有数据,就是感性。数据不会被观点打败,数据只能被数据打败。我们现在妥妥地已经进入了数据时代。 量化IT投资成效,以数据驱动决策 站在公司或者决策者角度,数据最…

Smart Tools 网站的架构之美

本文将简要介绍Smart Tools工具箱网站的架构设计,带领大家一起领略架构之美。 Smart Tools是一款实用的在线工具箱网站,地址:https://smart-tools.cn 总体架构 Smart Tools工具箱网站是采用前后端分离的总体架构。其中,前端是由…

纯干货建议码住,新手写软文有哪些注意事项

随着互联网发展的越来越好,越来越的企业开始注重网络营销,软文营销就是其中的一种。软文营销对于很多企业来说无疑是非常具有优势的一种宣传方式。它可以帮助公司更优秀的传达其产品及服务的诉求,吸引潜在客户,加强品牌知名度&…

Java 电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展

营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展 传统采购模式面临的挑战 一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标…

一文解析Multi-queue 架构

Linux上传统的块设备层(Block Layer)和IO调度器(如cfq)主要是针对HDD(hard disk drivers)设计的。我们知道,HDD设备的随机IO性能很差,吞吐量大约是几百IOPS(IOs per seco…

魔兽世界服务端AzerothCore核心Centos系统编译教程

魔兽世界服务端AzerothCore核心Centos系统编译教程 大家好,我是艾西今天跟大家分享下用linux系统怎么编译一个自己的魔兽世界服务端 准备工作:服务器一台、 安装软件、下载源码、 地图文件、 修改配置文件 修改文件执行权限、 修改配置文件、编译及启动、编译项目 数据…