Redis之三大特殊数据类型

  • 一、Geospatial地理位置
    • 1、介绍
    • 2、相关shell命令
      • 2.1 规则
      • 2.2 geoadd命令(给城市赋值)
      • 2.3 geopos命令(获取指定城市的经度和纬度)
      • 2.4 geodist命令(获取两个城市之间的距离)
      • 2.5 georadius命令(以给定的经纬度为中心,找出某一半径内的元素)
      • 2.6 georadiusbymember
      • 2.7 geohash命令
    • 3、注意
  • 二、Hyperloglog基数存储
    • 1、基数
    • 2、简介
    • 3、相关shell命令
      • 3.1 创建一组元素
      • 3.2 统计mykey元素的基数数量
      • 3.3 合并两组数据
    • 4、注意
  • 三、Bitmaps位存储
    • 1、介绍
    • 2、相关shell命令
      • 2.1 对位图赋值
      • 2.2 查看是否打卡
      • 2.3 统计打卡天数

一、Geospatial地理位置

1、介绍

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

2、相关shell命令

2.1 规则

两级无法直接添加,一般会下载城市数据,直接通过java程序一次性导入
参数:key
值:纬度、经度、名称
有效的经度:-180度到180度
有效的纬度:-85.05112878度到85.05112878度

2.2 geoadd命令(给城市赋值)

给城市赋值(经纬度)

geoadd china:city 经度 纬度 城市名

例如

geoadd china:city 116.40 39.90 beijing

2.3 geopos命令(获取指定城市的经度和纬度)

获得当前定位(一定是个真正存在的坐标值)

geopos china:city 城市名1 城市名2

例如

geopos china:city beijing shanghai

2.4 geodist命令(获取两个城市之间的距离)

计算两点之间的距离
单位:
m表示单位为米
km表示单位为千米
mi表示单位为英里
ft表示单位为英尺

geodist china:city 城市名1 城市名2 km

例如
查看上海到北京的直线距离

geodist china:city beijing shanghai km

2.5 georadius命令(以给定的经纬度为中心,找出某一半径内的元素)

georadius china:city 经度 纬度 距离值 km

(1)以110,30这个经纬度为中心,寻找方圆1000km内的城市

georadius china:city 110 30 1000 km

(2)显示到中心距离的位置(withdist)

georadius china:city 110 30 1000 km withdist

(3)显示他人的定位信息(withcoord)

georadius china:city 110 30 1000 km withcoord

(4)筛选出指定位置的结果(withcoord count 1)

georadius china:city 110 30 1000 km withcoord count 1

2.6 georadiusbymember

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

georadiusbymember china:city 城市名 1000 km

例如

georadiusbymember china:city beijing 1000 km

2.7 geohash命令

返回11个字符的Geohash字符串
将二维的经纬度转换为一维的字符串,如果两个字符串越接近,那么距离越近。

geohash china:city 城市名

例如

geohash china:city beijing

3、注意

GEO底层的实现原理其实就是Zset,我们可以使用Zset命令来操作geo
(1)查看地图中全部的元素

zrange china:city 0 -1

(2)移除指定元素

zrem china:city beijing

二、Hyperloglog基数存储

1、基数

基数指(不重复的元素)= 5 ,可以接受误差
例如:A{1,3,5,7,8}

2、简介

Redis Hyperloglog基数统计的算法
优点:占用的内存是固定的,2^64个不同的元素的技术,只需要12KB内存

3、相关shell命令

3.1 创建一组元素

pfadd key值 a b c d e f g

例如

pfadd mykey a b c d e f g

3.2 统计mykey元素的基数数量

pfcount key值

结果

pfcount mykey

3.3 合并两组数据

pfmerge key值3 key值1 key值2

例如

pfmerge mykey3 mykey mykey2

4、注意

如果允许容错,就可以使用Hyperloglog,
如果不允许容错,就使用set或其他数据类型。

三、Bitmaps位存储

1、介绍

统计用户信息,活跃、不活跃!登录、未登录!打卡等等都可以使用Bitmaps
Bitmaps位图,数据结构,都是操作二进制位来进行记录,就只有0和1两个状态。
365天 = 365bit 1字节=8bit 46个字节左右

2、相关shell命令

2.1 对位图赋值

setbit 对象 某个属性 对应含义

例如
星期一标号为0
赋值为1,代表打卡,赋值为0,代表未打卡
如下:
星期一打卡了,赋值为1
星期二未打卡,赋值为0
星期三未打卡,赋值为0
星期四打卡了,赋值为1

setbit day 0 1
setbit day 1 0
setbit day 2 0
setbit day 3 1

2.2 查看是否打卡

getbit day 2

2.3 统计打卡天数

bitcount day

Redis之三大特殊数据类型相关知识(Geospatial地理位置、Hyperloglog基数、Bitmaps位存储)相关推荐

  1. 中断系统的相关知识(二)(可位寻址、不可位寻址)

    中断系统中会涉及许多寄存器,这个时候我们会遇到一些有点陌生的名词,比如接下来说的"可位寻址"和"不可位寻址",如下图:  位寻址是指对一些内部数据存储器RAM和 ...

  2. ❤️Bitmaps、HyperLogLog、Geospatial❤️——Redis三大特殊数据类型详述(万字长文原理讲解,大厂面试高频知识点,一文尽收囊中)

    本文已收录于专栏 ❤️<Redis之大厂必备技能包>❤️ 欢迎各位关注.三连博主的文章及专栏,全套Redis学习资料,大厂必备技能! 目录 简介 一.Bitmaps 1.简介 2 .基本操 ...

  3. Redis三种特殊数据类型

    Redis三种特殊数据类型 geospatial 地理位置 朋友的定位, 附近的人, 打车的距离计算 Redis的Geo在Redis3.2版本就推出了.这个功能可以推算地理位置信息, 两地之间的距离, ...

  4. Redis中五大基本数据类型和三种特殊数据类型详解

    目录 介绍 概念 基本命令 redis是单线程的 五大基本数据类型 String 命令 应用场景 List 命令 应用场景 Set 命令 应用场景 Hash 命令 应用场景 Zset 命令 应用场景 ...

  5. Redis的8种数据类型

    目录 一.概述 1.redis是什么 2.redis能干嘛 3.redis常识 3.1.基本命令 3.2.为什么redis是单线程 二.五大数据类型 1.String 2.List列表 3.Set 4 ...

  6. Redis 九种数据结构及其底层实现 持久化 缓存机制 过期键与内存淘汰 集群等相关知识

    参考内容: B站尚硅谷Redis视频教程 <Redis 6 入门到精通 超详细 教程> B张黑马程序员Redis视频教程 <黑马程序员Redis入门到实战教程,全面透析redis底层 ...

  7. NoSQL概述-Redis安装-常用五大数据类型-概述Bitmaps,HyperLogLog,Geospatial和redis.conf 基本解析

    NoSQL 概述 NoSQL(NoSQL=Not Only SQL),意即"不仅仅是SQL",泛指 非关系型的数据库. NoSQL不依赖业务逻辑方式存储,而以简单的key-valu ...

  8. Redis面试题相关知识整理

    Redis面试题相关知识整理 1.Redis的应用场景 2.Redis的特点 3.Redis对各种数据类型的操作 4.Redis的持久化机制 5.Redis的缓存穿透/缓存击穿/缓存雪崩问题 6.Re ...

  9. Redis数据库相关知识总结

    Redis数据库相关知识总结 1.NoSQL概述 1.1 为什么用NoSQL 1.单机MySQL的美好年代 在90年代,一个网站的访问量一般不大,用单个数据库完全可以轻松应付! 在那个时候,更多的都是 ...

最新文章

  1. 【反传销】春节一个短暂误入传销和脱身的真实故事以及对技术的思考
  2. HTML5-响应式的实现方式-弹性布局浅谈
  3. 楼层标高怎么引上去_【强烈推荐】工程图纸怎么看?
  4. java基础1之java语言基础1
  5. find命令使用方法
  6. Scala中的None,Nothing,Null,Nil
  7. CentOs7.3 搭建 Solr单机服务
  8. MonkeyScript使用教程
  9. 中国移动创新系列丛书《OPhone应用开发权威指南》读者交流活动圆满结束
  10. Oracle日志切换及频率跟踪脚本
  11. 解决pycharm问题:module 'pip' has no attribute 'main'
  12. 360怎么看电脑配置_电脑配置清单速查表-AMD
  13. RoadRunner软件初步使用教程
  14. C语言中的文件操作(二)
  15. device-mapper: multipath: Failing path recovery
  16. Eureka的自我保护机制与如何禁用
  17. Tensorflow训练的模型,如何保存与载入?
  18. python名片系统代码练习并存储到数据库中
  19. 免费的跨境浏览器能用吗?目前性价比高的跨境浏览器有哪些?
  20. 使用国产KT148A语音芯片sop8封装,用户可以自己更换声音,低成本,高秒数

热门文章

  1. 锤子要和360手机合并?周鸿祎要复制小米,罗永浩不想再小而美
  2. 数据仓库与数据挖掘教程 || 警务数据仓库“犯罪_ETL”,“地址_ETL”和“派出所_ETL”数据流任务配置说明
  3. ABB新机器人 常用配件型号3HAB4216-1 DSQC 643 DSQC 325 3HAB 2241-1 DSQC 326 (3HAB 2242-1)DSQC 236D 3HAB2207-1/2
  4. CSS3 新特性transform,transition,animation
  5. 手机麦克风结构原理图_详解麦克风阵列的基本原理、结构组成及声学效果
  6. 水桶塑料感打击乐合成器插件-Klevgrand Slammer v1.0.2 WiN-MAC
  7. 直播的发展前景怎么样?
  8. 软件外包接单经验谈-估算工期、报价、签订合同篇
  9. 使用java代码增加一点博客访问量
  10. 单片机产业城市前十排名