Redis中的三种特殊类型

前言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 | Redis
HyperLogLog常用于大数据量的统计,比如页面访问量统计或者用户访问量统计 。其实现最多使用 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


推荐阅读