【狂神说Redis】4 三种特殊数据类型
三种特殊数据类型
geospatial(地理位置)
- 朋友定位 附近的人 打车距离计算
- Redis的Geo在Redis3.2版本就出了,这个功能可以推算地理位置的信息,两地之间的距离,方圆n里的人等等
- 只有六个命令
有效经度:-180~180
有效维度:-85.05112878~85.05112878
# geoadd 添加地理位置 将指定的地理空间位置(纬度、经度、名称)添加到指定的key中
# 规则:两级无法直接添加,一般会直接下载城市数据,然后通过java程序一次性导入
# 参数:key 经度 维度 名称
geoadd china:city 116.40 39.90 beijing # 添加城市
geoadd china:city 121.47 31.23 shanghai
geoadd china:city 160.50 29.53 chongqing
geoadd china:city 114.05 22.52 shenzhen
geoadd china:city 120.16 30.24 hangzhou 108
geoadd china:city 120.16 30.24 hangzhou 108.96 34.26 xian # 一次添加多个城市# geopos:从key里返回所有给定位元素的位置(经度和维度),是一个坐标值,得到的信息不一定是存储的数据
geopos china:city beijing # 获取存储的城市地理信息
geopos china:city beijing chongqing # 一次性获取多个# geodist 返回给定两个地点的位置
# 如果其中一个不存在,则返回nil
# 指定单位:m km mi(英里) ft(英尺) 默认是m
geodist china:city beijing chongqing # 返回的是直线距离
geodist china:city beijing chongqing km # 指定单位# georadius 以给定的经纬度为半径,找出某一半径内的元素
georadius china:city 110 30 1000 km # (110 30)为定位基准,1000 km为半径的大小,前提是china:city中含有这些城市
georadius china:city 110 30 1000 km withdist # 查出城市同时给出直线距离(显示直线距离)
georadius china:city 110 30 1000 km withcoord # 查出城市的同时查出经纬度(显示他人的定位信息)
georadius china:city 110 30 1000 km withdist withcoord count 3 # 查出城市的同时查出直线距离 经纬度 限定查询个数# georadiusbymember:找出位于指定元素周围的其他元素
georadiusbymember china:city beijing 1000 km # 查找距离北京1000 km的城市 # geohash(了解)返回一个或多个位置元素的geohash表示(返回11个字符的Geohash字符串)
geohash china:city beijing # 将二维的经纬度转换为一维的字符串
geohash china:city beijing chongqing # 如果两个字符串越接近,则距离越近
- GEO底层的实现原理:Zset,可以使用Zset操作geo
zrange china:city 0 -1 # 查看地图中全部元素
zrem china:city beijing # 移除指定元素
hyperloglog
- 什么是基数:一个集合中不重复的元素的个数,可以接受误差(0.81%)
A{1,3,5,7,8,7} 基数:5
- Redis 2.8.9版本更新了Hyperloglog的数据结构
- Redis Hyperloglog是用来做基数统计的算法。 优点:占用的内存是固定的 12KB,若从内存角度来比较的话Hyperloglog为首选
- 应用:网页的UV(一个人访问一个网站多次还是算作一个人)
- 传统的方式:set保存用户的id,然后就可以统计set中的元素数量作为标准判断
- 这种方法如果保存大量的用户id会比较麻烦。我们的目的是为了计数而不是保存用户id
- 基本命令
pfadd myhyper a b c d e f g a b c # 创建一个hyperloglog
pfcount myhyper # 求基数,结果:7
pfadd myhyper j k l # 向Hyperloglog中添加元素
pfcount myhyper # 求基数,结果:10
pfadd myhyper2 a o p # 创建一个hyperloglog
pfmerge myhyperl3 myhyper myhyper2 # 合并myhyper和myhyper2为myhyper3
pfcount myhyper3 # 求基数,结果:12
如果允许容错Hyperloglog为首选
如果不允许容错,则使用set或自己的数据结构
bitmaps
bitmaps 和 hash 结合,就有了 布隆过滤器,用于解决缓存击穿问题
- 位存储;Bitmaps位图,是一种数据结构,都是操作二进制位来进行记录,只有0和1两个状态
- 基本命令
# 使用bitmap记录周一到周日的打卡,0为未打卡,1为打卡
setbit sign 0 1 #
setbit sign 1 0
setbit sign 2 0
setbit sign 3 1
setbit sign 4 1
setbit sign 5 0
setbit sign 6 0# 查看是否打卡
getbit sign 3 # 查看周四是否打卡
getbit sign 6 # 查看周日是否打卡# 统计打卡天数
bitcount sign # 不加范围,默认统计全部
- 应用:
- 统计疫情感染人数:0为未感染,1为感染
- 统计用户信息,活跃/不活跃,登录/不登录,打卡
- 其他两个状态的情况
【狂神说Redis】4 三种特殊数据类型相关推荐
- Redis中三种特殊数据类型
本文来说下Redis中三种特殊数据类型 文章目录 Gerspatial地理位置 Hyperloglog基数统计 Bitmap位图 Gerspatial地理位置 一共 6 个命令: GEOADD GEO ...
- redis学习--三种特殊数据类型,GEO地理位置,HyperLogLog,BitMap
三种特殊数据类型,GEO地理位置,HyperLogLog,BitMap GEO地理位置 简介 Redis 的 GEO 特性在 Redis 3.2 版本中推出, 这个功能可以将用户给定的地理位置信息储存 ...
- redis的三种特殊数据类型
三种特殊数据类型 GEO地理位置 简介 Redis 的 GEO 特性在 Redis 3.2 版本中推出, 这个功能可以将用户给定的地理位置信息储存起来, 并对这些信息进行操作.来实现诸如附近位置.摇一 ...
- 详解redis的三种特殊数据类型
14天学习训练营导师课程: 郑为中<Vue和SpringBoot打造假日旅社管理系统> 努力是为了不平庸~ 学习有些时候是枯燥的,但收获的快乐是加倍的,欢迎记录下你的那些努力时刻(学习知识 ...
- 第124天学习打卡(Redis Set Hash Zset 三种特殊数据类型 事务 乐观锁)
Set(集合) set中的值不能重复 set是无序的且不重复 127.0.0.1:6379> sadd myset "hello" # set集合中添加值 (integer) ...
- Redis三种特殊数据类型
Redis三种特殊数据类型 geospatial 地理位置 朋友的定位, 附近的人, 打车的距离计算 Redis的Geo在Redis3.2版本就推出了.这个功能可以推算地理位置信息, 两地之间的距离, ...
- redis 三种特殊数据类型
三种特性数据类型 geospatial 定位,附近的人,打车距离计算. redis的geo在redis3.2版本就推出了.可推算地理位置的信息,两地之间的距离,方圆几里的人. 6个命令. GEOADD ...
- Redis(三)【五大数据类型三种特殊数据类型】
目录 三. 五大数据类型 Redis-Key String(字符串) List(列表) Set(集合) Hash(哈希) Zset(有序集合) 6. 三种特殊数据类型 geospatial 地理位置 ...
- Redis(测试连接, 五大数据类型,三种特殊数据类型)
文章目录 测试性能 测试端口: 测试: 基础知识 总共有16个数据库,默认是0号数据库 数据库切换: 清空数据: redis是单线程的 redis为什么是单线程还运行如此快? 五大数据类型 Redis ...
- Redis中五大基本数据类型和三种特殊数据类型详解
目录 介绍 概念 基本命令 redis是单线程的 五大基本数据类型 String 命令 应用场景 List 命令 应用场景 Set 命令 应用场景 Hash 命令 应用场景 Zset 命令 应用场景 ...
最新文章
- Onpaint和OnDraw的区别
- 第六章 Windows应用程序对键盘与鼠标的响应
- ASP.NET Web API 安全筛选器
- 开源内容管理系统 Joomla 数据遭泄露
- RHEL 7.0系统安装配置图解教程
- 防火墙配置十大任务之五,有NAT的两个接口的配置
- Unity3D TextMeshPro
- java 16进制与汉字_Java汉字与16进制数相互转换
- 视频倍速插件(火狐,谷歌)
- 解决导入maven工程时cannot resolve依赖问题
- 三年程序员生涯的感悟、总结和憧憬
- 经历三家千人互联网公司,提炼了20+条黄金法则
- [51单片机]按键部分(软件消抖)
- QT程序设置界面显示风格
- UG/NX二次开发Siemens官方NXOPEN实例解析—1.6 BlockStyler/SelectionExample
- 机器人工程就业面如何前景是否广阔
- 什么是IP封锁, 如何解封?
- centos7代理设置
- 我们是如何测试360手机浏览器的 –360手机浏览器测试范围概述
- 动态磁盘和基本磁盘的区别
热门文章
- 区块链的可视化:hash,block,blockchain,distributed,tokens,coinbase
- Rust: Vec用法及其它
- 一款云迁移产品的成长史
- C语言函数传入字母参数,c语言详细讲解函数参数作为数组传递的几种方式
- 【数字信号调制】基于matlab GUI数字信号调制系统【含Matlab源码 258期】
- 【图像去噪】基于matlab改进非局部均值红外图像混合噪声【含Matlab源码 1640期】
- 【优化覆盖】基于matlab移动网格求解无线传感器网络节点覆盖优化问题【含Matlab源码 1300期】
- 【优化求解】基于matlab遗传算法求解函数极值问题【含Matlab源码 1198期】
- 【数字信号】基于matlab 8级m序列【含Matlab源码 353期】
- 【股价预测】基于matlab BP神经网络股票价格预测【含Matlab源码 345期】