汽车网站建设预算,网站制作 广州,wordpress thecorporationtheme,wd wordpressRedis三种特殊数据类型
geospatial 地理位置
Redis 地理空间数据类型简介
Redis 地理空间索引允许您存储坐标并搜索它们。 此数据结构可用于查找给定半径或边界框内的邻近点。
基本命令
GEOADD 将位置添加到给定的地理空间索引#xff08;请注意#xff0c;使用此命令请注意使用此命令经度位于纬度之前。GEOSEARCH 返回具有给定半径或边界框的位置。 geoadd # getadd 添加地理位置
127.0.0.1:6379 geoadd china:city 116.4 39.9 beijing
(integer) 1
127.0.0.1:6379 geoadd china:city 125.1 42.9 xian
(integer) 1
127.0.0.1:6379 geoadd china:city 121.4 31.2 shanghai
(integer) 1
127.0.0.1:6379 geoadd china:city 114.0 22.5 shenzhen
(integer) 1
127.0.0.1:6379 geoadd china:city 120.2 30.2 hangzhou
(integer) 1
127.0.0.1:6379 geoadd china:city 118.8 32.0 nanjing
(integer) 1 geopos 获得当前定位一定是一个坐标值 127.0.0.1:6379 geopos china:city beijing # 获取指定的城市的经度和维度
1) 1) 116.399998962879180912) 39.90000009167092543 geodist 单位: m表示单位为米 km表示单位为千米 mi表示单位为英里 f化t表示单位为英尺
127.0.0.1:6379 geodist china:city beijing xian # 查看北京到西安的直线距离
798353.9550
127.0.0.1:6379 geodist china:city beijing xian km
798.3540
127.0.0.1:6379 geodist china:city beijing shanghai km # 查看北京到上海的直线距离
1067.7424 georadius 以给定的经纬度为中心 找出某一半径内的元素 127.0.0.1:6379 georadius china:city 110 30 1000 km # 获取110,30这个位置为中心搜寻方圆1000km的城市
1) shenzhen
2) hangzhou
3) nanjing
127.0.0.1:6379 georadius china:city 110 30 1000 km withdist # 显示到中心距离的位置
1) 1) shenzhen2) 924.4990
2) 1) hangzhou2) 981.4461
3) 1) nanjing2) 867.6807
127.0.0.1:6379 georadius china:city 110 30 1000 km withcoord # 显示其他定位信息
1) 1) shenzhen2) 1) 114.000001251697540282) 22.50000113800319212
2) 1) hangzhou2) 1) 120.200002491474151612) 30.19999988833350102
3) 1) nanjing2) 1) 118.800002038478851322) 31.99999916826298119
127.0.0.1:6379 georadius china:city 110 30 1000 km withcoord count 2 # 筛选指定结果
1) 1) nanjing2) 1) 118.800002038478851322) 31.99999916826298119
2) 1) shenzhen2) 1) 114.000001251697540282) 22.50000113800319212 georadiusbymember 找出位于指定元素周围其他的元素 127.0.0.1:6379 georadiusbymember china:city beijing 1000 km
1) nanjing
2) beijing
3) xian geohash 返回一个或者多个位置元素的Geohash 该命令将返回11个字符串的Geohash字符串
127.0.0.1:6379 geohash china:city beijing xian
1) wx4fbxxfke0
2) wz8un9xn970geo 底层的实现原理其实就是zset可以使用zset命令来操作geo 127.0.0.1:6379 zrange china:city 0 -1
1) shenzhen
2) hangzhou
3) shanghai
4) nanjing
5) beijing
6) xianHyperloglog
Redis 在 2.8.9 版本添加了 HyperLogLog 结构。
Redis HyperLogLog 是用来做基数统计的算法HyperLogLog 的优点是在输入元素的数量或者体积非常非常大时计算基数所需的空间总是固定 的、并且是很小的。
在 Redis 里面每个 HyperLogLog 键只需要花费 12 KB 内存就可以计算接近 2^64 个不同元素的基 数。这和计算基数时元素越多耗费内存就越多的集合形成鲜明对比。
但是因为 HyperLogLog 只会根据输入元素来计算基数而不会储存输入元素本身所以 HyperLogLog 不能像集合那样返回输入的各个元素。 什么是基数?
比如数据集 {1, 3, 5, 7, 5, 7, 8} 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内快速计算基数。
优点∶占用的内存是固定2^64不同的元素的技术只需要废12KB内存!如果要从内存角度来比较的话
Hyperloglog首选 !网页的UV(一个人访问一个网站多次但是还是算作一个人!)
传统的方式set保存用户的id然后就可以统计set中的元素数量作为标准判断!
这个方式如果保存大量的用户id就会比较麻烦!我们的目的是为了计数而不是保存用户id ;
0.81%错误率!统计UV任务可以忽略不计的!
redis HyperLogLog 的基本命令
序号命令及描述1[PFADD key element element …] 添加指定元素到 HyperLogLog 中。2[PFCOUNT key key …] 返回给定 HyperLogLog 的基数估算值。3[PFMERGE destkey sourcekey sourcekey …] 将多个 HyperLogLog 合并为一个 HyperLogLog
实例
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 # 创建第er组元素 mykey2
(integer) 1
127.0.0.1:6379 pfcount mykey2
(integer) 9
127.0.0.1:6379 pfcount mykey3
(integer) 9
127.0.0.1:6379 pfmerge mykey3 mykey mykey2 # 合并两组mykey mykey2 mykey3 并集
OK
127.0.0.1:6379 pfcount mykey3
(integer) 15如果允许容错那么一定可以使用Hyperloglog!
如果不允许容错就使用set或者自己的数据类型即可!
Bitmaps 位存储 统计用户信息活跃不活跃!登录、未登录!打卡365打卡!两个状态的都可以使用Bitmaps !
Bitmaps位图数据结构!都是操作二进制位来进行记录就只有0和1两个状态!
365天 365 bit 1字节 8 bit 46个字节左右!
使用bitmap 来记录周一到周日的打卡!
周一:1 周二:0 周三:0 周四:1 … 查看某一天是否打卡
127.0.0.1:6379 getbit sign 3
(integer) 0
127.0.0.1:6379 getbit sign 6
(integer) 0统计操作 统计打卡的天数
127.0.0.1:6379 bitcount sign # 统计这周打卡记录
(integer) 3