大厂最爱问的97道面试题——核心篇

聊聊 ElasticSearch 使用场景

在一般情况下,关系型数据库的模糊查询,都是通过 like 的方式进行查询。其中,like

“value%” 可以使用索引,但是对于 like “%value%” 这样的方式,执行全表查询,这在数据

量小的表,不存在性能问题,但是对于海量数据,全表扫描是非常可怕的事情。

ElasticSearch 作为一个建立在全文搜索引擎 Apache Lucene 基础上的实时的分布式搜索和

分析引擎,适用于处理实时搜索应用场景。此外,使用 ElasticSearch 全文搜索引擎,还可

以支持多词条查询、匹配度与权重、自动联想、拼写纠错等高级功能。因此,可以使用

ElasticSearch 作为关系型数据库全文搜索的功能补充,将要进行全文搜索的数据缓存一份

到 ElasticSearch 上,达到处理复杂的业务与提高查询速度的目的。

缓存使用

Redis 有哪些类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及

zset(sorted set:有序集合)。

聊聊 Redis 使用场景

随着数据量的增长,MySQL 已经满足不了大型互联网类应用的需求。因此,Redis 基于内

存存储数据,可以极大的提高查询性能,对产品在架构上很好的补充。例如,为了提高服务

端接口的访问速度,尽可能将读频率高的热点数据存放在 Redis 中。这个是非常典型的以

空间换时间的策略,使用更多的内存换取 CPU 资源,通过增加系统的内存消耗,来加快程

序的运行速度。

在某些场景下,可以充分的利用 Redis 的特性,大大提高效率。这些场景包括缓存,会话

缓存,时效性,访问频率,计数器,社交列表,记录用户判定信息,交集、并集和差集,热

门列表与排行榜,最新动态等。

使用 Redis 做缓存的时候,需要考虑数据不一致与脏读、缓存更新机制、缓存可用性、缓

存服务降级、缓存穿透、缓存预热等缓存使用问题。

Redis 为什么是单线程的

单纯的网络IO来说,量大到一定程度之后,多线程的确有优势——但并不是单纯的多线程,

而是每个线程自己有自己的epoll这样的模型,也就是多线程和multiplexing混合。

一般这个开头我们都会跟一个“但是”。

但是。

还要考虑Redis操作的对象。它操作的对象是内存中的数据结构。如果在多线程中操作,那

就需要为这些对象加锁。最终来说,多线程性能有提高,但是每个线程的效率严重下降了。

而且程序的逻辑严重复杂化。

要知道Redis的数据结构并不全是简单的Key­Value,还有列表,hash,map等等复杂的结

构,这些结构有可能会进行很细粒度的操作,比如在很长的列表后面添加一个元素,在

hash当中添加或者删除一个对象,等等。这些操作还可以合成MULTI/EXEC的组。这样一

个操作中可能就需要加非常多的锁,导致的结果是同步开销大大增加。这还带来一个恶果就

是吞吐量虽然增大,但是响应延迟可能会增加。

Redis在权衡之后的选择是用单线程,突出自己功能的灵活性。在单线程基础上任何原子操

作都可以几乎无代价地实现,多么复杂的数据结构都可以轻松运用,甚至可以使用Lua脚本

这样的功能。对于多线程来说这需要高得多的代价。

并不是所有的KV数据库或者内存数据库都应该用单线程,比如ZooKeeper就是多线程的,

最终还是看作者自己的意愿和取舍。单线程的威力实际上非常强大,每核心效率也非常高,

在今天的虚拟化环境当中可以充分利用云化环境来提高资源利用率。多线程自然是可以比单

线程有更高的性能上限,但是在今天的计算环境中,即使是单机多线程的上限也往往不能满

足需要了,需要进一步摸索的是多服务器集群化的方案,这些方案中多线程的技术照样是用

不上的,所以单线程、多进程的集群不失为一个时髦的解决方案。

缓存降级

服务降级的目的,是为了防止Redis服务故障,导致数据库跟着一起发生雪崩问题。因此,

对于不重要的缓存数据,可以采取服务降级策略,例如一个比较常见的做法就是,Redis出

现问题,不去数据库查询,而是直接返回默认值给用户。

大厂最爱问的97道面试题——核心篇

关注,私信获取更多Java技术资料免费分享

关于面试题系列,每日更新。

完整系列面试题+Q 2118797017

大厂最爱问的97道面试题——核心篇

关注,私信获取更多Java技术资料免费分享

大厂最爱问的97道面试题——核心篇

关注,私信获取更多Java技术资料免费分享

大厂最爱问的97道面试题——核心篇

关注,私信获取更多Java技术资料免费分享

大厂最爱问的97道面试题——核心篇

关注,私信获取更多Java技术资料免费分享

大厂最爱问的97道面试题——核心篇

关注,私信获取更多Java技术资料免费分享

大厂最爱问的97道面试题——核心篇

关注,私信获取更多Java技术资料免费分享

大厂最爱问的97道面试题——核心篇

关注,私信获取更多Java技术资料免费分享

大厂最爱问的97道面试题——核心篇

关注,私信获取更多Java技术资料免费分享


分享到:


相關文章: