Kong Proxy Caching代理缓存插件详解

本文详细介绍了Kong的代理缓存插件(proxy-cache)的配置与使用方法,包括参数设置、缓存策略、缓存Key生成、缓存控制及API管理。通过示例展示了如何在服务、路由和消费者上添加插件,适用于HTTP和HTTPS协议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 基本描述
属性描述
限流策略终止请求限制
插件作用域服务、路由、消费者、全局
适用协议http、https
  • 基本参数
参数描述
name插件名称、此处为proxy-cache
service_id绑定的服务Id
route_id绑定的路由Id
enabled是否启用该插件,默认是true
consumer_id绑定的消费者Id
api_id绑定的API Id,已经废弃
response_code上游服务可以作为缓存的状态码,默认值为200, 301, 404
request_method下游服务可以作为缓存的方法,默认为GET, HEAD
content_type可以作为缓存的 content type
vary_headers用于生成缓存Key的头部信息,如果不指定,所有头部信息都不作为数据源
vary_query_params用于生成缓存Key的查询参数,如果不指定,所有查询参数都作为数据源
cache_ttl缓存的TTL时间,默认是300s
cache_control是否启用Cache-Control行为,默认是false
storage_ttl数据在存储引擎中的TTL时间
strategy缓存策略,可以取 memory 或 redis
memory.dictionary_name当选用 memory 策略时,用于保存缓存实体的 shared dictionary 的名称,这个 shared dictionary
redis.hostredis服务器地址
redis.portredis服务器端口
redis.timeout连接redis服务器超时时间
redis.passwordredis服务器密码
redis.databaseredis数据库
redis.sentinel_masterredis哨兵模式master节点地址
redis.sentinel_roleredis哨兵模式角色
redis.sentinel_addressesredis哨兵模式哨兵地址
  • 使用详情

在服务上添加插件

curl -X POST http://kong:8001/services/{service}/plugins --data "name=proxy-cache" --data "strategy=memory"

在路由上添加插件

curl -X POST http://kong:8001/routes/{route}/plugins --data "name=proxy-cache" --data "strategy=memory"

在消费者上添加插件

curl -X POST http://kong:8001/apis/{api}/plugins --data "name=proxy-cache" --data "strategy=memory"
  • 缓存策略
模式描述
memory内存模式,是一个lua_shared_dict,默认的kong_cache也被Kong的其他插件用于缓存其他数据,使用这种方式比较简单,但不推荐在大规模场景中使用,因为大量使用会对Kong数据缓存操作造成压力
redis支持redis和redis哨兵模式
  • 缓存Key

Kong基于请求方法、完整的客户端请求(路径和请求参数)和绑定在请求上的API或消费者UUID来生成缓存 Key,所以各个API或消费者之间的缓存都是不同的,目前缓存Key的格式是硬编码的,无法调整,缓存的组成方式如下:

key = md5(UUID | method | request)

其中 method 是通过 ngx.req.get_method() 方法获得的,request 是根据 Nginx $request 变量获得的,Kong会在响应的 X-Cache-Key 头中返回缓存Key值,如上所述,可以预先计算缓存Key

  • 缓存控制
    当启用 cache_control 时,Kong将遵守 Cache-Control 头的使用规范,有一些例外情况:
    不支持缓存重新验证
    类似地,no-cache 排除缓存存在
    不支持根据 Vary 计算二级缓存
  • 缓存状态

Kong通过 X-Cache-Status 头表示缓存行为的状态:

状态描述
Miss请求可以缓存,但是缓存中没有数据,数据从代理的服务中获取
Hit缓存命中,数据从缓存中获取
Refresh缓存命中,但因为缓存控制行为或者达到了cache_ttl设置的阈值
Bypass不能使用缓存
  • 存储TTL

       Kong可以在存储引擎中存储数据,存储时间超过 cache_ttl 或 Cache-Control 阈值所限定的时间,这使得Kong在资源过期后,还能维持一份资源的缓存副本,这样客户端在必要时可以使用 max-age 或 max-stale 头请求过期的数据

  • 缓存API
  • 获取缓存实体
GET /proxy-cache/:plugin_id/caches/:cache_id
GET /proxy-cache/:cache_id
  • 删除缓存实体
DELETE /proxy-cache/:plugin_id/caches/:cache_id
DELETE /proxy-cache/:cache_id
  • 清除所有缓存
DELETE /proxy-cache/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

举个栗子の不容易

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值