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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • nodejs开发http接口

    nodejs开发http接口目录nodejs的启动方式安装依赖生成package.json新建app.js启动服务调用接口nodejs的启动方式使用nodenodeapp.js使用nodemonnodemonapp.js可以将其配置到package.json的script:start中,然后调用npmstart安装依赖express是一个web应用开发框架nodemon可以用来启…

    2022年5月10日
    42
  • 直流电压前馈控制数字逆变电源设计与实现

    直流电压前馈控制数字逆变电源设计与实现引言逆变电源一般采用瞬时反馈控制技术来提高逆变电源的动态响应速度,减少输出电压的谐波含量,改善输出电压波形的质量。常见的逆变电源控制技术,有重复控制、谐波补偿控制、无差拍控制、电压瞬时值控制和带电流内环的电压瞬时值控制等类型[1~4]。其中,带电流内环电压瞬时值环路的双环控制方法因实现简单,系统动态性能优越和对负载的适应性强等优点,而逐渐成为高性能逆变电源的发展方向之一[4]。但传统控制方法是基于逆变电源直流侧输入电压为无脉动直流电压的假定,而实际逆变电源,存在因电网电压波动或负载突变而导致直流侧电压波

    2022年6月11日
    35
  • 程序员面临的困难和挑战_突破困境的故事

    程序员面临的困难和挑战_突破困境的故事偶然在网上看到这样一个故事:John和Bill一起到山中探险,忽然他们发现一只老虎正深情的望着他们,John撒腿就要跑,Bill却迅速的从背包里拿出一双跑鞋穿在脚上,John看到后气急败坏的对说Bill“你穿什么鞋也跑不过老虎的”Bill同情的看了他一眼,回答说“我干吗要和老虎比,我只要跑过你就够了。”大笑以后不免想起John的境遇是不是有点象中国的程序员呢?我个人习惯把软件从业人员分为初级程

    2022年10月11日
    4
  • NamedParameterJdbcTemplate学习总结

    NamedParameterJdbcTemplate学习总结NamedParameterJdbcTemplate学习总结

    2022年4月20日
    47
  • EnableEventValidation启用事件验证

    EnableEventValidation启用事件验证根据出错页面给出的提示消息可以知道,默认情况下是启用了事件验证的,在Aspx页HTML部分的Page指令处添加如下属性,就可以在页面回发时禁用事件验证<%@PageLanguage=”C#”EnableEventValidation=”false”.%>分析:出现这个错误一般是因为在客户端调用了js代码,改写了页面控件中的值,而通过postback再次requ…

    2022年7月24日
    15
  • api接口开放平台_手机系统分享接口在哪里

    api接口开放平台_手机系统分享接口在哪里免费在线接口(资源链接)1.csdnhttps://blog.csdn.net/c__chao/article/details/785737372.sojsonhttps://www.sojson.com/api/3.bejsonhttp://www.bejson.com/knownjson/webInterface/4.csdnhttps://blog.csdn.net/ishxiao/article/details/528573615.juhe(部分免费)https://www.j

    2022年10月3日
    4

发表回复

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

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