mysql hyperloglog_redis Redis高级数据类型GEO&HyperLogLog

起因:随着项目的进一步推广,数据量的增大,直接访问mysql数据库获取数据所使用的时间越来越长,为解决当前主要矛盾,决定引入redis非关系型数据库作为缓存层,使得数据并不能直接命中数据库,减少访问数据库带来的压力,从而加快运行速度。

1、Redis高级数据类型GEO&HyperLogLog详解

1.1. zset扩展类型geo

1.1.1. GEO功能介绍

GEO功能是在Redis 3.2版本后提供的,支持存储地理坐标的一个数据结构,可以用来做类似摇一摇,附近的人,周边搜索的功能

# 语法类型

geoadd key 经度 纬度 成员 [经度 纬度 成员...]

# geoadd命令必须以标准的x y member结构来接受参数,必须先输入经度后输入纬度

geoadd能够记录的坐标是有限:

非常接近两极的区域无法索引

精确的坐标限制是由 EPSG:900913等坐标系统定义

经度:-180到180度之间

纬度:-85.05112878到85.05112878度之间

如果超出这个范围则会报错

1.1.2. 新增和查询

# 添加一批城市

geoadd china:city 116.408 39.904 beijing 121.445 31.213 shanghai 113.265 23.108 guangzhou 114.109 22.544 shenzhen 108.969 34.285 xian 108.55 34.09 changan

# 查询

geopos china:city beijing shanghai

1.1.3.获得节点间距离

geodist china:city shanghai beijing km

unit:

m : 米

km :千米

mi :英里

ft : 英尺

默认是m

会有0.5%的误差

1.1.4. 周边搜索

georadius china:city 121.445 31.213 1300 km withdist withcoord

georadius china:city 121.445 31.213 1300 km withdist withcoord asc count 3

georadiusbymember china:city beijing 1300 km withdist withcoord asc count 3

withdist : 返回节点距离

withcoord : 带上坐标

#节点hash

geohash china:city xian changan

1) "wqj7p9ku9e0"

2) "wqj1yjgswk0"

1.1.5. 删除节点

zrem china:city changan

1.1.6. 业务实现

x y name1 x y nam2

x y canyin:123 x y canyin:456

1.2. hyperloglog

这个数据类型其实就做了一件事,统计不重复的数据量

比如要记录我们网站的UV量

sadd 20200208 1 2 3 4 5 6 5 4 3 2 1

scard 20200208

只用来存放基数

pfadd 20200207 1 2 3 4 5 6 5 4 3 2 1 #添加记录基数

pfadd 20200206 1 2 3 4 5 6 7 8 9 10

pfcount 20200206 #返回基数

pfmerge 202002 20200206 20200207 #pfmerge newkey sourcekey1 sourcekey2 合并生成了一个新key,原来的key不会消失

还有一个问题

hyperloglog是一个基数估算算法,有一定误差的

误差值在0.81%

hyperloglog的key占用空间很小只有12K,而你用set就需要把这些value都要保存,set存一年数据有多大

不要以为每天把功能完成了就行了,这种思想是要不得的,互勉~!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值