Redis学习--- 三种特殊数据类型(GeospatialHyperloglogBitmap)
Posted 小样5411
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis学习--- 三种特殊数据类型(GeospatialHyperloglogBitmap)相关的知识,希望对你有一定的参考价值。
一、Geospatial地理位置
我们生活中打车会看到车离我们多少距离,附近的人距离,都可以用这个来推测两地之间的距离
geoadd key 纬度 精度 名称 #添加地理位置,也可以跟多个
geopos key 名称 #查看某个位置经纬度
注意:有效经度从-180到+180,有效纬度-85.0511到+85.0511
geodist key 名称1 名称2 km #返回两个城市的距离(千米单位),不写km默认是米
由于定位不同区,所以略微不同,基本一致
如何获取附近的人距离?首先开启定位获取经纬度,就实时刷新可以算出距离
georadius key 经度 纬度 半径 #以经纬度为中心,半径为圆搜索
withdist可以返回到经纬度中心的距离,withcoord返回在返回内城市的定位信息,并且可以用count做一个筛选
georadiusbymember key 名称 半径 #以成员为半径查找,如以北京查找其周围1000km内的城市
Geo的基本常用命令就这些,然后Geo的底层其实就是ZSet实现,我们可以用ZSet命令操作geo,删除位置,geo没有提供,但是可以用zset进行删除
二、Hyperloglog基数统计
Hyperloglog在Redis中是基数统计的算法,基数就是不重复的元素,比如一个人访问一个网站多次,但还是算一个人,Hyperloglog优点就是占用内存非常小,比set去重方法远远小,是首选,Hyperloglog常常用于计数。但它错误率有0.81%,如果允许容错就用Hyperloglog,一点都不允许就用set
pfadd key 元素
pfcount key
pfmerge key key1 key2 #key为key1和key2合并的,即并集
三、Bitmap位图
Bitmap是位存储,比如疫情期间,可以14亿个0,0表示未感染,1表示感染,14亿bit≈166.89MB,其实占用还比较小,当然这里不需要自己打,配置一下。活跃用户和不活跃用户,打卡与未打卡,也可以用这个,用户每天打卡,365天就是365bit,365/8≈46B,也就是说一个用户一年只要46B存储就够了,十分小,省内存。所以这种只有两种状态的就可以用Bitmap。我们现在做一个一周打卡次数统计,公司经常需要做这个。
setbit key offset value #offset可以理解成下标
offset 0-6正好表示7天
以上为本章内容
以上是关于Redis学习--- 三种特殊数据类型(GeospatialHyperloglogBitmap)的主要内容,如果未能解决你的问题,请参考以下文章
Redis学习--- 三种特殊数据类型(GeospatialHyperloglogBitmap)
第124天学习打卡(Redis Set Hash Zset 三种特殊数据类型 事务 乐观锁)