java 根据高德经纬度求一定距离内经纬度范围_Java面试突击——01redis(中上)

本文深入探讨Redis面试中的常见问题,包括GEO数据结构用于处理经纬度计算,HyperLogLog在数据统计上的应用,发布订阅(pub/sub)机制的工作原理,以及布隆过滤器如何作为数据过滤器减少无效请求。同时,提到了Redis-Module扩展Redis功能的重要性和Redis在面试中的考察重点。
摘要由CSDN通过智能技术生成
47cce6bfa2c4ff82ce87e1d06bcc07be.png

续:

上一篇说到了Redis的5种基础数据结构,在面试中实则是作为亮点呈现的,因为前提不是这个啊,考察的重点还是Redis的特性,综合应用场景,原理和场景的解决方案。这篇我们集中说下Redis的面试集中炮坑点,来抬起你粗壮的麒麟臂给扔回去。

1 数据结构

1.2 高级数据结构

1.2.1 GEO

tip:GEO易理解,重使用,原理清晰也不用深究。

小白难度

1) 什么是GEO?做什么用的?

白话版:帅气的面试官你好,GEO是Redis中用来处理经纬度或者坐标信息的数据结构,可以方便的通过redis的api方便的计算,无须自己引入三方包的繁琐操作。

2)GEO提供的哪些操作?可以进行哪些计算?

白话版:塞值,取值,计算两点距离,计算半径范围内坐标数量,返回地理坐标的时间hash值

对应:geoadd,geopos,geodist,georadius/georadiusbymember,geohash

tip:坐标数据一般是通过传统的缓存操作从数据库中获取或者服务启动时做预热数据+缓存和库双写。

255ca63abeb25b8b4ecf6ef8eb7fd898.png

添加坐标

475d72014da5644ca14a57f01f8eaa1d.png

方便的计算坐标距离

1.2.2 HyperLogLog

小白难度

1)什么是HyperLogLog?做什么用?有哪些操作?

白话版:做数据统计用的数据结构(比如统计访问量/热度/排行榜 为不重复独立的key统计),数据量大不想占用过多内存时使用。

操作:塞元素(pfadd),获取元素统计(pfcount),合并多个HyperLogLog(pfmerge)

尚可难度

1) 为什么使用HyperLogLog?有什么弊端?统计有什么其他的实现方式吗?

白话版:使用HyperLogLog出于节省内存空间考虑,最多占用12k的内存却可以存储2^64个数据。弊端就是因为基于概率算法实现会有0.81%的偏差,完全精准的统计不建议使用。其他的实现方式你是在说Set吗?没问题啊,但日活量大的场景统计访问量白花花的消耗内存啊。

略高难度

1)说一下HyperLogLog的原理

tip:这里涉及到概率学领域,一笔掠过,Why?才疏学浅。

白话版:存入值时会计算值的hash值转成二进制码,根据高位判断大或小,再通过概率公式计算,存入一个长度为16384的数组里。

关键词:伯努利试验。

d9ec1a9b6eac6feffb533b7d9e2e2ee5.png

使用hyperloglog计算每日UV

1.2.3 pub/sub

tip:严格说,这不是一种数据结构用来存储数据的。

小白难度

1)什么是pub/sub?什么是发布订阅?怎么使用?

白话版:是一个简易版发布订阅模式的消息队列,数据接收方通过订阅,注册和一个提供数据的管道(channel绑定),支持多个client绑定一个管道,有数据publish到channel里,client就会接收到数据。

操作:订阅SUBSCRIBE,模糊名称订阅PSUBSCRIBE,退订UNSUBSCRIBE,模糊名称订阅PUNSUBSCRIBE,查看订阅信息PUBSUB,发布消息到管道PUBLISH。

尚可难度

1)能不能使用redis的发布订阅取代消息队列?在什么场景下使用?

白话版:不能。redis消息队列的实现过于简单,只是plus功能。区别于专业的消息队列少了查验机制,不会为发送的数据备份,丢失数据无法找寻,比如各种原因的client下线,只是一个匹配和管道的功能。

3e824045e7fc8080956c93c4ca8fb24f.png

SUBSCRIBE实现机制

1.2.4 BloomFilter

tip:同上不是用来存储数据,但是一个非常好用的功能。

小白难度

1)什么是BloomFilter/布隆过滤器?有什么应用场景?

白话版:和名字一样可以作为数据的过滤器,场景当然是满足过滤器的衍生用途,比如缓存穿透前作为数据的过滤规则,可以有效降低请求绕过缓存将压力打在DB上。一定要注意的是,过滤器是为redis中的数据服务,没有数据那过滤何来意义呢?另外为了过滤将其他地方的数据迁移到redis的成本值得考虑,或者是否已经将redis作为Nosql的DB。

尚可难度

1)BloomFilter是怎么实现的?

白话版:将数据经过n个hash函数产生n个hash值,在数组对应的hash值处存入1。

b63cd4b27acf00611ad4a766909f6a78.png

机智的实现机制

1.2.5 Redis-Module

tip:这个领域就看个人发挥了,相信接触到的各位水平已经不需要笔者说什么了。

介绍:Redis在进入4.0时代后,开放了Redis-Module,将内部优秀的功能提供给DevEr,丰富Redis的各项用途,比如基于Redis的搜索引擎实现,日志收录等,都让Redis社区日益蓬勃,对开源的形式和官方的态度让笔者有了一个新的认知。

7ad8a7d12a292b75d8deb6007c804927.png

官网细心的解释

写在最后:Redis后续还有3篇,笔者希望能覆盖到较全面的Redis面试范围,服务大家。

PS:

如果你觉得有那么一丢丢的用处或认同,记得三连,原创不易,来自你的回应是我坚持下去的动力,不再孤军奋战。Thx!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值