geo
Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。
-
geoadd:添加地理位置的坐标。
127.0.0.1:6379> geoadd city 106.685727 26.628318 guiyan 105.296731 27.317069 bejie 104.836799 26.641236 liupanshui 102.868288 24.917242 kunming
-
geopos:获取地理位置的坐标。
于从给定的 key 里返回所有指定名称(member)的位置(经度和纬度),不存在的返回 nil。
语法格式如下:
GEOPOS key member [member ...]
127.0.0.1:6379> geopos city kunming 102.86828666925430298 24.91724304104910459
-
geodist:
计算两个位置之间的距离。
geodist 语法格式如下:
GEODIST key member1 member2 [m|km|ft|mi]
member1 member2 为两个地理位置。最后一个距离单位参数说明:m :米,默认单位。km :千米。mi :英里。ft :英尺。
127.0.0.1:6379> geodist city kunming guiyan km 427.0749
-
georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
georadius 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。最后一个距离单位参数说明:m :米,默认单位。km :千米。mi :英里。ft :英尺。
127.0.0.1:6379> georadius city 104.845998 26.632969 200 km liupanshui bejie guiyan
-
georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。
127.0.0.1:6379> georadiusbymember city guiyan 200 km withcoord withdist liupanshui 183.8303 104.83679741621017456 26.64123617229464713 bejie 157.5621 105.29673188924789429 27.31706887500919123 guiyan 0.0000 106.68572455644607544 26.62831923326665873
georadiusbymember参数说明:
1.距离单位:m :米,默认单位。km :千米。mi :英里。ft :英尺。
2.WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。
3.WITHCOORD: 将位置元素的经度和维度也一并返回。
4.WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
5.COUNT 限定返回的记录数。
6.ASC: 查找结果根据距离从近到远排序。
7.DESC: 查找结果根据从远到近排序。
-
geohash:返回一个或多个位置对象的 geohash 值。
bitmp
BitMap 原本的含义是用一个比特位来映射某个元素的状态。由于一个比特位只能表示 0 和 1 两种状态,所以 BitMap 能映射的状态有限,但是使用比特位的优势是能大量的节省内存空间。
在 Redis 中,可以把 Bitmaps 想象成一个以比特位为单位的数组,数组的每个单元只能存储0和1,数组的下标在 Bitmaps 中叫做偏移量。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NFEnBICB-1606466817762)(Redis%E4%BA%94%E5%A4%A7%E6%95%B0%E6%8D%AE.assets/4150f4f89ffe1d9f2d58b5d31baaf96c.png)]
打卡案例
//添加数据
127.0.0.1:6379> setbit sing 1 1
0
127.0.0.1:6379> setbit sing 2 1
0
127.0.0.1:6379> setbit sing 3 1
0
127.0.0.1:6379> setbit sing 4 1
0
127.0.0.1:6379> setbit sing 5 1
0
127.0.0.1:6379> setbit sing 6 0
0
127.0.0.1:6379> setbit sing 7 0
//查看某一天打卡情况
0
127.0.0.1:6379> getbit sing 7
0
//查看value为1的总长度
127.0.0.1:6379> bitcount sing
5
Hyperloglog
什么是基数?
A {1,3,5,7,8,7}
B{1,3,5,7,8}
基数(不重复的元素) = 5,可以接受误差!
简介
Redis 2.8.9 版本就更新了 Hyperloglog 数据结构!Redis Hyperloglog 基数统计的算法!优点:占用的内存是固定,2^64 不同的元素的技术,只需要废 12KB内存!如果要从内存角度来比较的话 Hyperloglog 首选!网页的 UV (一个人访问一个网站多次,但是还是算作一个人!)
传统的方式, set 保存用户的id,然后就可以统计 set 中的元素数量作为标准判断 !
这个方式如果保存大量的用户id,就会比较麻烦!我们的目的是为了计数,而不是保存用户id;
0.81% 错误率! 统计UV任务,可以忽略不计的!
127.0.0.1:6379> PFadd mykey a b c d e f g h i j # 创建第一组元素
mykey (integer) 1
127.0.0.1:6379> PFCOUNT mykey # 统计 mykey 元素的基数数量 (integer) 10
127.0.0.1:6379> PFadd mykey2 i j z x c v b n m # 创建第二组元素 mykey2 (integer) 1
127.0.0.1:6379> PFCOUNT mykey2 (integer) 9
127.0.0.1:6379> PFMERGE mykey3 mykey mykey2 # 合并两组 mykey mykey2 => mykey3 并集 OK127.0.0.1:6379> PFCOUNT mykey3 # 看并集的数量! (integer) 15
如果允许容错,那么一定可以使用 Hyperloglog !如果不允许容错,就使用 set 或者自己的数据类型即可