Redis三种特殊数据类型

Redis三种特殊数据类型

geospatial 地理位置

Redis 地理空间数据类型简介

Redis 地理空间索引允许您存储坐标并搜索它们。 此数据结构可用于查找给定半径或边界框内的邻近点。

基本命令

  • GEOADD 将位置添加到给定的地理空间索引(请注意,使用此命令,经度位于纬度之前)。
  • GEOSEARCH 返回具有给定半径或边界框的位置。

在这里插入图片描述

geoadd

# getadd 添加地理位置
127.0.0.1:6379> geoadd china:city 116.4 39.9 beijing
(integer) 1
127.0.0.1:6379> geoadd china:city 125.1 42.9 xian
(integer) 1
127.0.0.1:6379> geoadd china:city 121.4 31.2 shanghai
(integer) 1
127.0.0.1:6379> geoadd china:city 114.0 22.5 shenzhen
(integer) 1
127.0.0.1:6379> geoadd china:city 120.2 30.2 hangzhou
(integer) 1
127.0.0.1:6379> geoadd china:city 118.8 32.0 nanjing
(integer) 1

geopos

获得当前定位:一定是一个坐标值

127.0.0.1:6379> geopos china:city beijing # 获取指定的城市的经度和维度
1) 1) "116.39999896287918091"2) "39.90000009167092543"

geodist

单位:

  • m表示单位为米

  • km表示单位为千米

  • mi表示单位为英里

  • f化t表示单位为英尺

127.0.0.1:6379> geodist china:city beijing xian # 查看北京到西安的直线距离
"798353.9550"
127.0.0.1:6379> geodist china:city beijing xian km
"798.3540"
127.0.0.1:6379> geodist china:city beijing shanghai km # 查看北京到上海的直线距离
"1067.7424"

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

127.0.0.1:6379> georadius china:city  110 30 1000 km # 获取110,30这个位置为中心,搜寻方圆1000km的城市
1) "shenzhen"
2) "hangzhou"
3) "nanjing"
127.0.0.1:6379> georadius china:city  110 30 1000 km withdist # 显示到中心距离的位置
1) 1) "shenzhen"2) "924.4990"
2) 1) "hangzhou"2) "981.4461"
3) 1) "nanjing"2) "867.6807"
127.0.0.1:6379> georadius china:city  110 30 1000 km withcoord # 显示其他定位信息
1) 1) "shenzhen"2) 1) "114.00000125169754028"2) "22.50000113800319212"
2) 1) "hangzhou"2) 1) "120.20000249147415161"2) "30.19999988833350102"
3) 1) "nanjing"2) 1) "118.80000203847885132"2) "31.99999916826298119"
127.0.0.1:6379> georadius china:city  110 30 1000 km withcoord count 2 # 筛选指定结果
1) 1) "nanjing"2) 1) "118.80000203847885132"2) "31.99999916826298119"
2) 1) "shenzhen"2) 1) "114.00000125169754028"2) "22.50000113800319212"

georadiusbymember

找出位于指定元素周围其他的元素

127.0.0.1:6379> georadiusbymember china:city beijing 1000 km 
1) "nanjing"
2) "beijing"
3) "xian"

geohash 返回一个或者多个位置元素的Geohash

该命令将返回11个字符串的Geohash字符串

127.0.0.1:6379> geohash china:city beijing xian
1) "wx4fbxxfke0"
2) "wz8un9xn970"

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

127.0.0.1:6379> zrange china:city 0 -1
1) "shenzhen"
2) "hangzhou"
3) "shanghai"
4) "nanjing"
5) "beijing"
6) "xian"

Hyperloglog

Redis 在 2.8.9 版本添加了 HyperLogLog 结构。

Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。

在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。


什么是基数?

比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。

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

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

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

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

0.81%错误率!统计UV任务,可以忽略不计的!

redis HyperLogLog 的基本命令:

序号命令及描述
1[PFADD key element element …] 添加指定元素到 HyperLogLog 中。
2[PFCOUNT key key …] 返回给定 HyperLogLog 的基数估算值。
3[PFMERGE destkey sourcekey sourcekey …] 将多个 HyperLogLog 合并为一个 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 j z x c v b n m # 创建第er组元素 mykey2
(integer) 1
127.0.0.1:6379> pfcount mykey2
(integer) 9
127.0.0.1:6379> pfcount mykey3
(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两个状态!

365天= 365 bit 1字节= 8 bit 46个字节左右!

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

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

在这里插入图片描述

查看某一天是否打卡

127.0.0.1:6379> getbit sign 3
(integer) 0
127.0.0.1:6379> getbit sign 6
(integer) 0

统计操作 统计打卡的天数

127.0.0.1:6379> bitcount sign # 统计这周打卡记录
(integer) 3

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

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

相关文章

cortex-A7核PWM实验--STM32MP157

实验目的:驱动风扇,蜂鸣器,马达进行工作 目录 一,PWM相关概念 有源蜂鸣器和无源蜂鸣器 二,分析电路图,框图 三,分析RCC章节 1,确定总线连接 2,根据总线内容确定基…

Flink CDC学习笔记

第一章 CDC简介 1.1 什么是CDC ​ CDC (Change Data Capture 变更数据获取)的简称。核心思想就是,检测并获取数据库的变动(增删查改),将这些变更按发生的顺序记录下来,写入到消息中间件以供其它服务进行订…

无涯教程-机器学习 - 数据统计

在进行机器学习项目时,通常无涯教程会忽略两个最重要的部分,分别是 数学 和 数据 。这是因为知道ML是一种数据驱动的方法,并且ML模型只会产生与提供给它的数据一样好的或坏的输出。 在上一章中,讨论了如何将CSV数据上传到ML项目中…

【JSDocvscode】使用JSDoc、在vscode中开启node调试、使用vscode编写运行Python程序

JSDoc JSDoc是JavaScript的一种注释语法,同时通过JSDoc注释也可以规避js弱类型中不进行代码提示的问题 图形展示JSDoc的效果: 上述没有进行JSDoc,然后我们a点什么 是没有任何提示的 上述就是加上 JSDoc的效果 常用的 vscode 其实内置了 js…

每日后端面试5题 第八天

1.UDP和TCP协议的区别 1.UDP无连接,速度快,安全性低,适合高速传输、实时广播通信等。 2.TCP面向连接,速度慢,安全性高,适合传输质量要求高、大文件等的传输,比如邮件发送等。 (还…

Python爬虫框架之快速抓取互联网数据详解

概要 Python爬虫框架是一个能够帮助我们快速抓取互联网数据的工具。在互联网时代,信息爆炸式增长,人们越来越需要一种快速获取信息的方式。而Python爬虫框架就能够帮助我们完成这个任务,它可以帮助我们快速地从互联网上抓取各种数据&#xf…

MySQL数据库学习【基础篇】

📃基础篇 下方链接使用科学上网速度可能会更加快一点哦! 请点击查看数据库MySQL笔记大全 通用语法及分类 DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段)DML: 数据操作语言,用来对数据库表中的…

【Java架构-包管理工具】-Maven进阶(二)

本文摘要 Maven作为Java后端使用频率非常高的一款依赖管理工具,在此咱们由浅入深,分三篇文章(Maven基础、Maven进阶、私服搭建)来深入学习Maven,此篇为开篇主要介绍Maven进阶知识,包含坐标、依赖、仓库、生…

8.29一日总结(uni-app)

1.UNI-APP课件uniapp (notion.site)https://secretive-echo-5b2.notion.site/uniapp-4963799e330b4af4b842ccee6e2f62e8 2.链接 a.UNI-APP官网 uni-app快速上手 | uni-app官网 (dcloud.net.cn) b.安装HBuilder: HBuilderX-高效极客技巧 (dcloud.io) b.微信小程序网址:微信开…

vue3下的密码输入框(antdesignvue)

参考:vue下的密码输入框 注意:这是个半成品,有些问题(输入到第6位的时候会往后窜出来一个空白框、光标位置会在数字前面),建议不采用下面这种方式,用另外的(画六个input框更方便) 效果预览 实现思路 制作6个小的正方形div 用一个input覆盖在6个div上 给input设置透明(…

2023年下半年抖音小店运营全攻略

每年618过后,7、8月份,都是电商淡季。 尤其是服装类目,很多商家都是直接躺平。 但是到了9月份,一是换季,二是碰上开学季,电商旺季就开始来了! 尤其是服装、文具、户外运营这些类目&#xff0…

行业报告|3D感知技术快速发展,打造“机器之眼”,助推各行业加速升级!

原创 | 文 BFT机器人 01 3D视觉感知全栈式平台,硬核实力蓄势待发 1.1 3D视觉感知为“机器之眼”,未来市场空间广阔 3D视觉感知技术充分弥补了2D成像技术的以上不足,可获取空间几何尺寸信息。 过去数十年2D成像技术蓬勃发展,分辨…

-9501 MAL系统没有配置或者服务器不是企业版(dm8达梦数据库)

dm8达梦数据库 -9501 MAL系统没有配置或者服务器不是企业版) 环境介绍1 环境检查2 问题原因 环境介绍 搭建主备集群时,遇到报错-9501 MAL系统没有配置或者服务器不是企业版 1 环境检查 检查dmmal.ini配置文件权限正确 dmdba:dinstall,内容正…

ChatGPT Prompting开发实战(一)

一、关于ChatGPT Prompting概述 当我们使用ChatGPT或者调用OpenAI的API时,就是在使用prompt进行交互,用户在对话过程中输入的一切信息都是prompt(提示词),当然工业级的prompt与人们通常理解的prompt可能不太一样。下面…

03 最长连续序列

最长连续序列 题解 哈希(O(n)) 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 题解 哈希(O(n)) class Solution { public:int long…

JVM运行时数据区

文章目录 JVM内存结构图1、运行时数据区域JDK 1.7JDK 1.81. 线程栈(虚拟机栈)2. 本地方法栈3. 程序计数器4. 方法区(元空间)5. 堆6、运行时常量池(Runtime Constant Pool)7、直接内存(Direct Me…

云计算——虚拟化中的网络架构与虚拟网络(文末送书)

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号:网络豆 座右铭:低头赶路,敬事如仪 个人主页: 网络豆的主页​​​​​ 目录 前期回顾 前言 一.网卡虚拟化 1.网卡虚拟化方法&…

基于 vue2 发布 npm包

背景:组件化开发需要,走了一遍发布npm包的过程,采用很简单的模式实现包的发布流程,记录如下。 项目参考:基于vue的时间播放器组件,并发布到npm_timeplay.js_xmy_wh的博客-CSDN博客 1、项目初始化 首先&a…

C语言练习题解析:挑战与突破,开启编程新篇章!(1)

💓博客主页:江池俊的博客⏩收录专栏:C语言刷题专栏👉专栏推荐:✅C语言初阶之路 ✅C语言进阶之路💻代码仓库:江池俊的代码仓库🎉欢迎大家点赞👍评论📝收藏⭐&a…

Vue项目直接报错

最近自己在做一个vue2项目,vue并不熟悉,所以求解!!! 通过命令:vue create app 创建项目,但打开后,浏览器直接报错,意思为:不能在模块外使用import语句(at ho…