当前位置:网站首页>Redis~Geospatial(地理空间)、Hyperloglog(基数统计)
Redis~Geospatial(地理空间)、Hyperloglog(基数统计)
2022-06-28 00:27:00 【明斯克开源】
获取西安的坐标——GEOPOS
127.0.0.1:6379> GEOPOS CHINA xian
- “108.94683212041854858”
“34.29296115814533863”
以经度120 纬度35位置为中心,获取半径1000千米内的城市——GEORADIUS
127.0.0.1:6379> GEORADIUS CHINA 120 35 1000 km
“beijing”
“shanghai”
获取在广州半径500千米内的城市——GEORADIUSBYMEMBER
127.0.0.1:6379> GEORADIUSBYMEMBER CHINA guangzhou 500 km
“shenzhen”
“guangzhou”
“hainan”
将广州和深圳的坐标转换为11为的GEO哈希值——GEOHASH
127.0.0.1:6379> GEOHASH CHINA guangzhou shenzhen
“ws0e9cb3yj0”
“ws10k0dcg10”
[](()Hyperloglog(基数统计)
-------------- 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 ------------------------------------------------------------------
在我们为网站统计访问量、日活量时,由于我们统计的是用户数量而非访问次数,因此即使一个用户多次访问也只会统计一次,这种不重复的数据通常被称为基数。
在传统的做法中,我们通常会采用set来保存用户的ID来进行计数,因为其本身存在着去重的功能,但是由于我们所需要的是对用户进行计数,如果通过将所有用户的ID保存的方法来完成,当用户量大的时候就会对内存产生巨大的压力,并且效率也大大降低。
为了解决这个问题,Redis在2.8.9版本添加了HyperLogLog结构。
[](()实现原理
Redis HyperLogLog是用来做基数统计的算法,HyperLogLog的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。
在Redis 里面,每个HyperLogLog键只需要花费12KB内存,就可以计算接近2^64个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
HyperLogLog使用的是概率算法,通过存储元素的hash值的第一个1的位置,来计算元素数量,所以HyperLogLog 不会存储元素本身,在数据量大的时候也可能会存在一定的误差。但是在基数统计这一方面,它的效果是其他结构无法比拟的。
[](()使用
PFADD key value 添加指定的值到Hyperloglog中
PFCONUT key 返回给定Hyperloglog的基数估算值
PFMERGE destkey sourcekey 将目标Hyperloglog合并到源Hyperloglog中
127.0.0.1:6379> PFADD NUMS1 1 2 3 4 #向NUMS1插入1-4
(integer) 1
127.0.0.1:6379> PFADD NUMS1 1 #数据已存在,不再插入
(integer) 0
127.0.0.1:6379> PFCOUNT NUMS1 #查看当前基数数量
(integer) 4
127.0.0.1:6379> PFADD NUMS2 3 4 5 6 #向NUMS2插入3-6
(integer) 1
127.0.0.1:6379> PFMERGE NUMS1 NUMS2 #将NUMS2合并到NUMS1中
OK
127.0.0.1:6379> PFCOUNT NUMS1 #此时NUMS1中记录了1-6,六个元素
(integer) 6
[](()Bitmap(位图)
位图其实就是哈希的变形,他通过哈希映射来处理数据,位图本身并不存储数据,而是存储标记。通过一个比特位,即0/1来标记一个数据的两种状态
位图通常情况下用在数据量庞大,且数据不重复的情景下标记某个数据的两种状态。 我们可以使用位图来记录当前用户的登陆情况、或者实现打卡、签到等功能。
[](()使用
GETBIT key offset value(0/1) 设置Bitmap中偏移量为offset的位置的值
SETBIT key offset value 返回Bitmap中偏移量为offset的位置的值
BITCOUNT key 计算位图中有多少个1
127.0.0.1:6379> SETBIT TEST 1 1 #将位图中第1,3,5位设置为1
(integer) 0
127.0.0.1:6379> SETBIT TEST 3 1
(integer) 0
127.0.0.1:6379> SETBIT TEST 5 1
(integer) 0
127.0.0.1:6379> GETBIT TEST 1 #查看位图中1,2,3位的值
(integer) 1
127.0.0.1:6379> GETBIT TEST 2
(integer) 0
127.0.0.1:6379> GETBIT TEST 3
边栏推荐
- General timer and interrupt of stm32
- Prometeus 2.35.0 新特性
- General process after reference layer reboot
- Appium automation test foundation ADB common commands (I)
- 如何以数据驱动「客户全生命周期管理」,提高线索转化率及客户满意度?
- Jenkins - Pipeline 语法
- style中的scoped属性和lang属性
- Jenkins - Groovy Postbuild 插件丰富 Build History 信息
- [sylixos] I2C device driver creation and use
- Embedded must learn, detailed explanation of hardware resource interface -- Based on arm am335x development board (Part 1)
猜你喜欢

系统管理员设置了系统策略,禁止进行此安装。解决方案

Jenkins - email notification plug-in

Take n multiple table names of a database as the values of a column in another table (the range can be a table in another database)

The interviewer asked: can you simulate the new operator of JS

Appium自动化测试基础— 补充:App的包名(appPackage)和启动名(appActivity)

Cesium 多边形(polygon)extrudedHeight 和 height 的区别

Cesium 点击绘制多边形(动态绘制多边形)
![pytorch_ lightning. utilities. exceptions. MisconfigurationException: You requested GPUs: [1] But...](/img/b4/8921c3ca5cd5a547768489d4a79202.png)
pytorch_ lightning. utilities. exceptions. MisconfigurationException: You requested GPUs: [1] But...

图灵机启动顺序

Jenkins - built in variable access
随机推荐
[Yocto RM] 2 - Yocto Project Terms
Cesium 获取屏幕所在经纬度范围
SQL injection bypass (3)
TD Hero 线上发布会|7月2日邀你来
Scoped attribute and lang attribute in style
类的初始化与回调的用法
将某数据库N多表名作为另外一张表中某一列得值(范围可以是别的数据库中得某张表)
Numpy----np. reshape()
对比学习中的4种经典训练模式
[Yocto RM]1 - System Requirements
基于AM335X开发板 ARM Cortex-A8——Acontis EtherCAT主站开发案例
系统管理员设置了系统策略,禁止进行此安装。解决方案
Jenkins - 访问 Jenkins 自定义参数变量,处理变量值中含有空格
Appium automation test foundation - Supplement: app package name and appactivity
Solve the problem that the page cannot scroll when ionic4 uses the hammerjs gesture press event
To understand what is synchronous, asynchronous, serial, parallel, concurrent, process, thread, and coroutine
Numpy----np.reshape()
Jenkins - groovy postbuild plug-in enriches build history information
yarn下载报错There appears to be trouble with your network connection. Retrying.
TI AM3352/54/59 工业核心板硬件说明书