微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ElasticSearch题

ES

倒排序

首先通过分析字符串将词提取出来,然后以词为key值,词所在的位置的字符串的位置作为value创建一个Map对象.那么在查找的时候会根据词找到所对应的字符串.
当词特别大的时候不可能一个一个的去遍历key集合,所以采用FST方法快速访问key值.

分页性能优化

es分页的原理,首先会把每个页全部满足条件的信息汇聚到一个协调节点上,紧接着对这个协调节点进行合并,排序等处理,然后再进行分页.

不允许深入分页

不做深入分页功能

瀑布式展示

这样,当用户刷到一定程度时基本不会再往下去刷.也就避免了深入分页的操作.

redis

分布式寻址算法

hash算法

首先对key进行计算hash值,然后对节点数取模.然后尝试取数据.
但是如果一个master节点宕机,所有请求过来,会基于新的剩余master节点取模取数据,这导致大量数据的涌入以及无法从缓存中拿到有效数据,造成大量流量涌入数据库中.

一致性hash算法

将整个hash值空间组成一个虚拟圆环,整个空间按顺时针方向组织,然后将各个master节点进行hash.
首先根据key计算hash值,然后沿顺时针行走,遇到hash值匹配的第一个master节点就是key的所在位置.
但是,一致性hash算法在节点少时,容易因为节点分布不均匀而造成缓存热点问题,那么解决思路就是,引入虚拟节点机制,对每个节点计算多个hash,每个计算结果位置都放置一个虚拟节点.这样就实现了数据的均匀分布,负载均衡.

雪崩

缓存机器发生宕机,请求全部落到数据库上.
事前:redis高可用集群
事中:本地缓存+hystrix限流&降级
事后,redis持久化,快速重启修复.

缓存穿透

发送大量数据,但是这些数据缓存中永远不会出现,所以去数据库查找,从而跳过缓存的机制,会将数据库直接占满.
只要数据没找到,就写一个空值到缓存中防止再次跳过缓存.

缓存击穿

某个热点key非常频繁,那么在这个key突然失效的瞬间,那么大量的请求就会击穿缓存,从这个key洞过去直击数据库.
人工设置热点永久数据.或者基于互斥锁,只允许一个人访问数据库然后将数据存入缓存,接下来的数据在获取锁之前判断缓存,然后在获取锁后再次判断一次缓存是否有数据.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐