写点什么

Redis:看完就比常人多会三种类型实战,可以拿去炫耀了

用户头像
极客good
关注
发布于: 13 分钟前
  • 有效的经度是-180 度到 180 度;

  • 有效的纬度是-85.05112878 度到 85.05112878 度;


该类型只有六个命令,先简单介绍一下各命令的功能和关键参数:


1.GEOADD:添加地理空间位置信息,即经纬度信息;


GEOADD key 经度 1 维度 1 member1 [经度 2 维度 2 member2 ...]


2.GEODIST:获取指定位置之间的距离,默认单位为米;


GEODIST key member1 member2 [单位]


单位可以指定,如下几种:


**m:**指定单位为米;


**km:**指定单位为千米;


**mi:**指定单位为英里;


**ft:**指定单位为英尺;


3.GEOHASH:返回 11 个字符的 Geohash 字符串,字符串越相似,位置越接近;一般底层调试使用的比较多。


GEOHASH key member1 [member2 ...]


4.GEOPOS:返回指定一个或多个位置元素的位置信息,即经纬度信息;


GEOPOS key member1 [member2 ...]


5.GEORADIUS:以指定的经纬度为圆心,查找指定半径范围的位置元素;


GEORADIUS key 经度 维度 半径 m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]


半径后面指定一个单位,m|km|ft|mi 指定其中一个;


**WITHDIST:**在返回查找到位置元素, 同时对应位置元素与中心之间的距离也一并返回。


**WITHCOORD:**将位置元素的经度和维度也一并返回。


**WITHHASH:**以 52 位有符号整数的形式返回, 返回位置元素经过原始 geohash 编码的有序集合分值,即一串字符串;


**COUNT:**代表返回位置信息的条数,类似于分页条数;


6.GEORADIUSBYMEMBER:指定的对应位置元素为圆心,查找指定半径范围的位置元素;GEORADIUS 命令是通过指定经纬度为圆心,其他使用方式一致;


GEORADIUSBYMEMBER key member 半径 m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]


命令功能及参数说明就简单说这么多(我怕说理论),欲知详情,请小伙伴去官网瞅瞅;



接下来结合应用场景进行命令实战,不然小伙伴要忍不住啦↓↓↓


应用场景实战 1


绿色出行,小黄、小蓝、青桔、哈罗各种共享自行车应该已经是很多小伙伴们出行必用了吧,来,先截个哈罗的图看看:



图中显示定位附近的小车,小伙伴可以先想想,如果这个需求给自己,怎么实现?



如果用 Redis,这样搞试试:


每一辆共享单车肯定有定位功能,将其定位信息(经纬度)存储到后台管理系统中,这里我们模拟定位信息存储,我们用百度地图坐标拾取器可以取得地图上任意一点的经纬度信息,如下图:



网页地址为:http://api.map.baidu.com/lbsapi/getpoint/index.html


模拟共享单车定位信息存储到后台 Redis:


![image](https://upload-images.jianshu.io/upload_images/24195226-1d1523246786e7f3.image?imageMogr2/auto-orient/strip%7Cima


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


geView2/2/w/1240)


当我们打开手机时,App 同样会通过手机进行定位,比如得到对应位置的经纬度信息为:113.768365(经度),34.724814(纬度),这样就可以指定用户的定位信息为中心,去查找附近指定半径的单车,然后将其标注在地图上:



应用场景实战 2


再来一个需求,比如说微信附近的人,直播 APP 附近直播的播友,还有某陌附近的美女,如下图:



如果用 Redis 实现,同样是通过 APP(比如微信)将用户的定位信息保存到后台 Redis 中,这里还是使用百度地图拾取器的方式取得位置信息模拟将定位信息保存在 Redis:



附近餐馆、附近加油站、附近酒店同样的原理,最后关于具体的信息可以通过得到信息(比如说用户 ID、共享单车标识等)去存储详细信息的数据库中查询。


bitmap


bitmap 在 Redis2.2.0 版本加入,其并不是一种实际的数据类型,而是在字符串类型基础上定义的一组面向位的操作。因为字符串是二进制安全的 blob,对应 value 能存储的最大长度是 512 MB,即可以设置 2^32 个不同的位;大概的结构如下:****



实践出真理,看看其类型到底是不是 string 类型:




常用命令如下:


SETBIT:设置指定 key 中指定位置(offset)的值(0 或 1);


SETBIT key offset value


GETBIT:获取指定 key 中指定位置(offset)的值,未设置过默认返回 0;


GETBIT key offset


BITCOUNT:统计指定 key 位置为 1 的数量,可以指定区间(这里的区间以字节(byte)为单位);


BITCOUNT key [start end]


BITOP:进行位运算,支持四种表达式运算: AND(交集), OR(并集), XOR(异或)和 NOT(取非)


BITOP operation destkey key [key ...]


operation 可以指定对应的运算方式,运算的结果存入 destkey 中;


BITPOS:返回指定 key 中指定值的第一个位置;


BITPOS key bit [start] [end]


模拟应用场景实战:


bitmap 由于存储的值只能是 0 或 1,所以很适合两种状态的数据记录和分析,比如说是否签到,是否登录,然后通过签到记录的数据可以统计周、月、年签到数,通过登录的数据可以分析用户是否活跃;

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
Redis:看完就比常人多会三种类型实战,可以拿去炫耀了