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)
上一篇 2021年10月5日 下午7:00
下一篇 2021年10月5日 下午8:00


相关推荐

  • SpringBoot调用.asmx后缀的webservice接口

    SpringBoot调用.asmx后缀的webservice接口目录一、简介二、示例一、简介最近在项目中,在与其他公司做对接中需要回调一个对方的接口,根据对方提供的接口地址,发现是webservice的接口,而且接口后缀名为.asmx,因为现在webservice接口基本上都是wsdl这种形式,所以使用wsdl调用方式不能用,得使用其他方法。WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互。其实WebService.

    2022年6月6日
    31
  • String转JsonObject对象「建议收藏」

    String转JsonObject对象「建议收藏」用阿里的fastjson里的一个方法,导入fastjson包SONObjectjsonObject1=JSONObject.parseObject(String)

    2026年2月12日
    5
  • Chrome插件推荐之Web Clipper

    Chrome插件推荐之Web ClipperChrome 插件推荐名称 WebClipper 作用 剪藏工具 可以使用它将网上的任何内容保存到任何地方 插件地址 https chrome google com webstore detail web clipper mhfbofiokmpp 官网 https clipper website 推荐理由 之前用有道云笔记的剪藏插件

    2026年3月17日
    2
  • Mariadb源代码编译过程

    Mariadb源代码编译过程

    2022年3月6日
    45
  • Qt之GIF录制工具

    Qt之GIF录制工具一 效果二 特性 1 高压缩比 几百 K 即可拥有丰富的 gif 图 2 支持录制鼠标指针 3 支持设置帧率 4 捕捉框框所在的录制范围内画面无变化时 不会增加新的帧 而是只会增加延时 可以非常有效减小 GIF 文件的体积 5 录制过程中 支持暂停和继续三 GIF 存储结构 GIF 是一种使用 LZW 压缩 支持多张图像的容器 支持 256 色 透明通道为 1bit 作为互联网表情包的载体 GIF 这项 80 年代的技术依然生生不息 但它的弊端也是显而易见的 易出现毛边 色彩表现低劣 文件压缩比不高 针对这些问题 M

    2026年3月18日
    3
  • linux中浏览文件内容的命令有哪些,linux打开文件命令有哪些

    linux中浏览文件内容的命令有哪些,linux打开文件命令有哪些linux 打开文件的命令有 1 cat 命令 用于查看文件内容 2 tac 命令 从最后一行开始显示 3 nl 命令 在显示的时候输出行号 4 more 命令 用于一页一页的显示文件内容等 打开终端程序后直接用 cat 命令查看文件 sample 的内容 只需在提示符下输入 catsample txt 然后按 Enter 键 cat 命令的功能是由第一行开始 显示全部文件内容 在 Linux 系统下 有很多命令可以查看文本

    2026年3月19日
    1

发表回复

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

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