redis Redis高级数据类型GEO&HyperLogLog

2020-09-15  本文已影响0人  dylan丶QAQ

起因:随着项目的进一步推广,数据量的增大,直接访问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能够记录的坐标是有限:

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:

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
#节点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不会消失

还有一个问题


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

上一篇 下一篇

猜你喜欢

热点阅读