geospatial 地理位置
朋友的位置,外卖的地理位置,附近的门店,附件的人,打车的距离。
Redis的Geo在redis 3.2版本中就推出啦,这个功能可以推算出地理位置的信息,两地之间的距离,方圆几里的
geoadd key 经度 纬度 城市(地点名称) 新增地址
也可以一次加多个
zrange 获得指定key中所有坐标信息
zrem 删除指定key下指定目标的数据
geopos 获得指定key中指定地点的坐标
geodist key 第一个点 第二个点 单位 返回指定key中指定地点的距离 (单位可选 m(米), km(千米), ft(英尺), mi(英里))
GEORADIUS key 目标经度 目标纬度 查询范围 查询单位 显示范围内位置的坐标 目标坐标与范围内坐标的距离 取几条 距离排序 斜体字标识非必填参数
127.0.0.1:6379> bitcount sign
(integer) 4
GEORADIUSBYMEMBER 查询指定key中指定一个目标范围内的数据
Hyperloglog 基数统计的算法
什么是基数:不重复的数
优点:占用内存是固定,2^64不同元素,只需要12kb内存,如果从内存角度来比较的HyperLoglogg是首选!
网页的UV (一个人访问一个网站多次,但是还是算作一个人!)
传统的方式,set保存用户的id,就会比较麻烦!我们的目的是为了计数,而不是保存用户的id;
其中有0.81%的错误率!统计UV任务,可以忽略不计!
127.0.0.1:6379> pfadd mykey a b c d e f g //赋值mykey中元素有7个
(integer) 1
127.0.0.1:6379> pfcount mykey //统计大小
(integer) 7
127.0.0.1:6379> pfadd mykey2 a e r b c d r //赋值mykey2中元素有6个
(integer) 1
127.0.0.1:6379> pfcount mykey2
(integer) 6
127.0.0.1:6379> pfmerge mykey3 mykey mykey2 //将两者的合并赋值给mykey3
OK
127.0.0.1:6379> pfcount mykey3
(integer) 8
总结:如果可以允许容错,可以使用基数统计
如果不允许容错,那么可以使用set,或者bitmap其他类型
############################################################
Bitmaps 位存储
统计用户信息 活跃,不活跃,登录,未登录,打卡,未打卡,365天打卡,两个状态,都可以使用bitMaps
bitMaps 位图,数据结构,都是操作二进制位来进行记录,只有0和1两个状态!
其中365天 = 365bit 1字节 = 8bit 46个字节左右!
使用bitmap 来记录周一到周日的打卡信息!
其中1代表打卡,0代表未打卡
周一:1 周二:0 周三:1 周四:1 周五:0 周六:0
127.0.0.1:6379> setbit sign 0 1
(integer) 0
127.0.0.1:6379> setbit sign 1 0
(integer) 0
127.0.0.1:6379> setbit sign 2 1
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 4 0
(integer) 0
127.0.0.1:6379> setbit sign 5 1
(integer) 0
127.0.0.1:6379> setbit sign 6 0
(integer) 0
查看某一天是否有打卡!
127.0.0.1:6379> getbit sign 3 //查询sign:3是否打卡
(integer) 1
127.0.0.1:6379> getbit sign 6 //查询sign:6是否打卡
(integer) 0
统计操作,统计打卡的天数
127.0.0.1:6379> bitcount sign //统计这周的打卡记录
(integer) 4