前言redis中的这三个数据类型在很多开源的项目中都有使用到,除了日常开发中使用JAVA去实现某些功能外,还可以通过这些特殊的数据类型进行实现 , 本文也简单介绍了这三种数据类型使用的场景 , 可以帮助读者在开发中实现功能提供新的思路 。
一、Geospatial(地理位置)Geospatial类型Redis官方文档-Redis geospatial | Redis
Redis中的Geospatial是一个用于地理空间数据的功能模块 , 它可以存储和查询地理坐标、半径、矩形、多边形等地理空间对象 。通过使用Geospatial,您可以对地理空间对象进行各种操作,例如计算两个地点之间的距离、查找位于给定半径内的地点、查找位于给定矩形或多边形内的地点等 。
基础命令
- GEOADD adds a location to a given geospatial index (note that longitude comes before latitude with this command).
- GEOSEARCH returns locations with a given radius or a bounding box.
命令演示1. 添加地理位置Geospatial规则: 两级无法直接添加,我们一般会下载城市数据,直接通过java序一次性导入!
有效的经度从-180度到180度. 有效的纬度从-85.05112878度到85.05112878度 。
参数:key 值:经度 纬度 名称
127.0.0.1:6379> GEOADD china:city 116.40 39.90 beijin(integer) 1127.0.0.1:6379> GEOADD china:city 121.47 31.23 shanghAI(integer) 1127.0.0.1:6379> GEOADD china:city 106.50 29.53 chognqin 114.05 22.52 shenzheng(integer) 2127.0.0.1:6379> GEOADD china:city 120.16 30.24 hangzhou 108.96 34.26 xian(integer) 22. 获取城市地理位置127.0.0.1:6379> GEOPOS china:city beijin #获取城市的经度和纬度1) 1) "116.39999896287918091"2) "39.90000009167092543"127.0.0.1:6379> GEOPOS china:city shanghai1) 1) "121.47000163793563843"2) "31.22999903975783553"3. 计算两个城市之间的距离127.0.0.1:6379> GEODIST china:city beijin shanghai"1067378.7564"127.0.0.1:6379> GEODIST china:city beijin shanghai km #单位有m、km、mi、ft"1067.3788"4. 以给定的经纬度为中心,找出某一半径内的元素127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km #经度110,纬度30为中心 , 寻找半径1000km以内的城市1) "chognqin"2) "xian"3) "shenzheng"4) "hangzhou"127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km count 2 #限制查询的数量1) "chognqin"2) "xian"127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km withcoord #显示经度纬度1) 1) "chognqin"2) 1) "106.49999767541885376"2) "29.52999957900659211"2) 1) "xian"2) 1) "108.96000176668167114"2) "34.25999964418929977"3) 1) "shenzheng"2) 1) "114.04999762773513794"2) "22.5200000879503861"4) 1) "hangzhou"2) 1) "120.1600000262260437"2) "30.2400003229490224"5. 以城市为中心寻找其它城市127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijin 1000 km1) "beijin"2) "xian"6. 将经纬度转化为字符串127.0.0.1:6379> GEOHASH china:city beijin1) "wx4fbxxfke0" 7. 使用Zset的命令来操作Geospatial==Geospatial的底层实现原理就是Zset,可以用Zset命令来操作Geospatial==127.0.0.1:6379> ZRANGE china:city 0 -11) "chognqin"2) "xian"3) "shenzheng"4) "hangzhou"5) "shanghai"6) "beijin"127.0.0.1:6379> ZREM china:city xian(integer) 1127.0.0.1:6379> ZRANGE china:city 0 -11) "chognqin"2) "shenzheng"3) "hangzhou"4) "shanghai"5) "beijin"二、 HyperLogLog(基数统计)HyperLogLog类型Redis官方文档-HyperLogLog | RedisHyperLogLog常用于大数据量的统计,比如页面访问量统计或者用户访问量统计 。其实现最多使用 12 KB,并提供 0.81% 的标准误差 。
什么是基数?基数在数学中是集合论中刻画任意集合大小的一个概念 。它表示一个集合中不同元素的个数 。例如,集合{1, 2, 3, 3, 4, 5, 5, 6, 6, 6}中有9个元素,但其中不重复的元素只有1、2、3、4、5、6,所以它的基数是6 。
基础命令
- PFADD adds an item to a HyperLogLog.
- PFCOUNT returns an estimate of the number of items in the set.
- PFMERGE combines two or more HyperLogLogs into one.
命令演示1. 创建元素,并统计其中的个数
127.0.0.1:6379> PFADD mykey a b c d e f g h i j #创建一组元素(integer) 1127.0.0.1:6379> PFCOUNT mykey #统计基数数量(integer) 10127.0.0.1:6379> PFADD mykey2 i jz x c v b n m (integer) 1127.0.0.1:6379> PFCOUNT mykey2(integer) 8
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Redis中的Big Key问题:排查与解决思路
- 电表中的感应线圈起什么作用
- 谭咏麟照片中的茅台酒引发热议,网友纷纷揣测价值与珍贵程度
- 宫保鸡丁中的宫保是什么含义 宫保鸡丁的宫保是什么意思是人名还是官名
- 家庭中的礼仪 家庭中的礼仪寄语
- 当一个女人说“我要减肥”,一般是给你这三种暗示,男人要明白
- 销售话术中的四种技巧是什么
- 因太漂亮被导演收入囊中的4位女星!有一位戏还没拍完戏就怀孕了
- 苹果怎么把视频声音做成铃声 怎么提取视频中的音乐做手机铃声
- 介绍礼仪的三种方式 介绍礼仪的三种方式英语
