Elasticsearch搜索引擎之缓存:Request Cache

Elasticsearch搜索引擎之缓存:Request Cache

1、什么是 request cache:

Request Cache,全称是 Shard Request Cache,即分片级请求缓存。当对一个或多个索引发送搜索请求时,搜索请求首先会发送到ES集群中的某个节点,称之为协调节点;协调节点会把该搜索请求分发给其他节点并在相应分片上执行搜索操作,我们把分片上的执行结果称为“本地结果集”,之后,分片再将执行结果返回给协调节点;协调节点获得所有分片的本地结果集之后,合并成最终的结果并返回给客户端。

By default, the requests cache will only cache the results of search requests where size=0, so it will not cache hits, but it will cache hits.total, aggregations, and suggestions.Most queries that use now (see Date Mathedit) cannot be cached.

Request Cache 在每个分片上缓存了本地结果集,这使得频繁使用的搜索请求几乎立即返回结果。默认情况下只会缓存查询中参数 size=0 的搜索请求的结果,因此将不会缓存hits,但会缓存 hits.total,aggregations(聚合) 和 suggestions。所以,request cache 分片请求缓存非常适合日志用例场景,在这种情况下,数据不会在旧索引上更新,并且可以将常规聚合保留在高速缓存中以供重用。

2、request cache 缓存的失效:

ES 能够保证在使用与不使用 Request Cache 情况下的搜索结果一致,那 ES 是如何保证的呢?这就要通过 Request Cache 的失效机制来了解啦。

Request Cache 缓存失效是自动的,当索引 refresh 时就会失效,也就是说在默认情况下, Request Cache 是每1秒钟失效一次,但需要注意的是,只有在分片的数据实际上发生了变化时,刷新分片缓存才会失效。也就是说当一个文档被索引 到 该文档变成Searchable的这段时间内,不管是否有请求命中缓存该文档都不会被返回。

所以我们可以通过 index.refresh_interval 参数来设置 refresh 的刷新时间间隔,刷新间隔越长,缓存的数据越多,当缓存不够的时候,将使用LRU最近最少使用策略删除数据。

当然,我们也可以手动设置参数 indices.request.cache.expire 指定失效时间(单位为分钟),但是基本上我们没必要去这样做,因为缓存在每次索引 refresh 时都会自动失效。

最后,我们也可以通过 API 手动清除 Request Cache,使用方式如下:

curl -XPOST ‘索引的IP:端口/索引名/_cache/clear?request_cache=true’

3、request cache 的使用与设置:

3.1、request cache 的使用:

默认情况下,Request Cache 是关闭的,我们可以在创建新的索引时启用,例如:

curl -XPUT 服务器IP:端口/索引名 -d
'{
  "settings": {
    "index.requests.cache.enable": true
  }
}'

也可以通过动态参数配置来进行设置:

curl -XPUT 服务器IP:端口/索引名/_settings -d 
'{ 
    "index.requests.cache.enable": true 
}'

开启缓存后,需要在搜索请求中加上 request_cache=true 参数,才能使查询请求被缓存,比如:

curl -XGET '服务器IP:端口/索引名/_search?request_cache=true&pretty' -H 'Content-Type: application/json' -d
'{
  "size": 0,
  "aggs": {
    "popular_colors": {
      "terms": {
        "field": "colors"
      }
    }
  }
}'

两个注意事项:

(1)第一:参数 size:0 必须强制指定才能被缓存,否则请求是不会缓存的,即使手动的设置request_cache=true

(2)第二:在使用 script 脚本执行查询时,由于脚本的执行结果是不确定的(比如使用 random 函数或使用了当前时间作为参数),一定要指定 request_cache=false 禁用 Request Cache 缓存。

3.2、request cache 的设置:

Request Cache 作用域为 Node,在 Node 中的 Shard 共享这个Cache空间。默认最大大小为 JVM堆内存的1%。可以使用以下命令在 config / elasticsearch.yml 文件中进行更改:

indices.requests.cache.size: 1%

Request Cache 是以查询的整个DSL语句做为key的,所以如果要命中缓存,那么查询生成的DSL一定要一样,即使修改了一个字符或者条件顺序,都不能利用缓存,需要重新生成Cache。

3.3、request cache 大小的查看方式:

GET /_stats/request_cache?human

GET /_nodes/stats/indices/request_cache?human

 

参考文章:https://blog.csdn.net/chennanymy/article/details/52504386

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114588.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SpringBoot 中使用HikariPool 报错Possibly consider using a shorter maxLifetime value.

    SpringBoot 中使用HikariPool 报错Possibly consider using a shorter maxLifetime value.SpringBoot使用HikariPool遇到:HikariPool-1-Failedtovalidateconnectioncom.mysql.jdbc.JDBC4Connection@4933c203(Nooperationsallowedafterconnectionclosed.).PossiblyconsiderusingashortermaxLifetimevalue.错误还是比较明显了就是maxLifetime这个参数配置不合理HikariP

    2022年6月23日
    35
  • 关于软件质量的思考 – 什么是质量

    关于软件质量的思考 – 什么是质量

    当选择一个商品的时候,我们常挂在嘴边的一个词就是“质量”,这是影响我们选择的一个很重要的指标。这一篇我们就来探讨一下什么是软件的质量。当然,都是个人的一些观点,不同意可以拍砖或者来探讨。

    质量这个词用得太普遍以至于混乱,有时候它表示质量这个指标,有时候它隐含质量好的意思。而且不可避免的,好的质量常常和它的反面联系在一起,就好像以前的“质量万里行”,或者现在的3.15,列出的都是质量方面的问题,好像很少宣扬质量好的产品。所以很多时候,我们看质量

    2022年9月23日
    0
  • 红旗 Linux 官方社区_centos桌面图标

    红旗 Linux 官方社区_centos桌面图标参考资料下载:http://www.ctdisk.com/u/665442 计算机和网络技术不断推进着人类的生产力,Linux的诞生又为之带来一场开放与自由的变革。现在,作为亚洲最大、发展最迅速的Linux产品发行商,北京中科红旗软件技术有限公司(红旗软件)引领着这场变革的方向,通过提供高品质的产品和服务,开创全新的计算体验,帮助企业增强其整体竞争力,提高个人工作效率,将用户业务价值和Li

    2022年8月21日
    10
  • 卸载宝塔linux面板_怎样叠宝塔

    卸载宝塔linux面板_怎样叠宝塔Linux宝塔的安装和卸载步骤一、安装宝塔二、卸载宝塔2.1下载宝塔的卸载文件2.2运行此文件根据提示卸载一、安装宝塔二、卸载宝塔2.1下载宝塔的卸载文件wgethttp://download.bt.cn/install/bt-uninstall.sh2.2运行此文件根据提示卸载shbt-uninstall.sh…

    2022年9月5日
    3
  • html中超链接使用_html中的a标签,超链接代码的详细介绍「建议收藏」

    html中超链接使用_html中的a标签,超链接代码的详细介绍「建议收藏」欢迎关注支持,谢谢!今天为大家介绍的是超链接代码a标签的用法,大家有兴趣的话可以看看哟!随着互联网的发展,网站的兴起,超链接随处可见。我们使用电脑或手机上网,能够穿梭在各个网页之间,都是通过超链接实现的。超链接就像通向另一个“世界”的桥梁,我们可以通过它到达另一个“世界”。接下来我们就来学习一下网页中的超链接到底是什么东西。连接一、什么是超链接超链接属于网页的一部分,它是让网页和网页连接的元素。…

    2022年7月13日
    14
  • ora 01017问题解决办法

    ora 01017问题解决办法SQL>startup ORACLEinstancestarted. TotalSystemGlobalArea 914358272bytes FixedSize                 2088184bytes VariableSize            528483080bytes DatabaseBuffers         3774873…

    2022年6月1日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号