缓存具有特定行为的 api 的解决方案
Solution for caching an api with specific behaviour
我正在开发一个服务于游戏的休息api。服务器上每三分钟运行一次作业,更新该游戏的重要信息。所以在这个作业运行后,我需要使缓存无效并使用最近的信息创建一个新缓存。
好的,我在我的应用程序上实现了MemCached,但是一位高级开发人员说拥有其他缓存非常重要。他建议我使用 Varnish,但我真的不知道它是否符合我的逻辑。
您对我如何实现这一点有什么建议吗?
您可以使用 Mcrouter 一个 memcached 协议路由器来基本上复制您的 Memcache。
此配置可以处理您的请求:
{
"pools": {
"A": {
"servers": [
// First Memcache address:
"memcache_1_ip:11211",
// Second Memcache address:
"memcache_2_ip:11211"
]
}
},
"route": {
"type": "OperationSelectorRoute",
"operation_policies": {
"add": "AllSyncRoute|Pool|A",
"delete": "AllSyncRoute|Pool|A",
"get": "LatestRoute|Pool|A",
"set": "AllSyncRoute|Pool|A"
}
}
清漆在您的情况下可以正常工作。当然,Memcached 用于缓存瞬态数据,而 Varnish 是一个完整的页面缓存,因此它非常适合减少后端应用程序的负载(无论它支持哪种语言,PHP 或任何语言)。
您无需对您的应用程序进行任何更改即可使用 Varnish 正确缓存内容(但是您也可以走这条路,并调整您的应用程序以发送正确的缓存 headers)。只需使用有关缓存策略的说明开发 VCL(Varnish 配置语言)文件。
不要对在线找到的 VCL 文件使用完整的复制粘贴。尽可能添加最小的代码片段,了解事情是如何工作的,Varnish 不会让你失望。重要的是:
确保您的缓存因 API 令牌而异(如果您用于 API 身份验证)。您将在 vcl_hash
过程中实现它。
在您的作业中集成缓存清除以更新信息:可以使用 PURGE
HTTP 请求清除 Varnish 缓存(同样,您需要开发必要的 VCL 代码来更新信息)它,在 vcl_recv
过程中)。
我正在开发一个服务于游戏的休息api。服务器上每三分钟运行一次作业,更新该游戏的重要信息。所以在这个作业运行后,我需要使缓存无效并使用最近的信息创建一个新缓存。
好的,我在我的应用程序上实现了MemCached,但是一位高级开发人员说拥有其他缓存非常重要。他建议我使用 Varnish,但我真的不知道它是否符合我的逻辑。
您对我如何实现这一点有什么建议吗?
您可以使用 Mcrouter 一个 memcached 协议路由器来基本上复制您的 Memcache。 此配置可以处理您的请求:
{
"pools": {
"A": {
"servers": [
// First Memcache address:
"memcache_1_ip:11211",
// Second Memcache address:
"memcache_2_ip:11211"
]
}
},
"route": {
"type": "OperationSelectorRoute",
"operation_policies": {
"add": "AllSyncRoute|Pool|A",
"delete": "AllSyncRoute|Pool|A",
"get": "LatestRoute|Pool|A",
"set": "AllSyncRoute|Pool|A"
}
}
清漆在您的情况下可以正常工作。当然,Memcached 用于缓存瞬态数据,而 Varnish 是一个完整的页面缓存,因此它非常适合减少后端应用程序的负载(无论它支持哪种语言,PHP 或任何语言)。
您无需对您的应用程序进行任何更改即可使用 Varnish 正确缓存内容(但是您也可以走这条路,并调整您的应用程序以发送正确的缓存 headers)。只需使用有关缓存策略的说明开发 VCL(Varnish 配置语言)文件。
不要对在线找到的 VCL 文件使用完整的复制粘贴。尽可能添加最小的代码片段,了解事情是如何工作的,Varnish 不会让你失望。重要的是:
确保您的缓存因 API 令牌而异(如果您用于 API 身份验证)。您将在
vcl_hash
过程中实现它。在您的作业中集成缓存清除以更新信息:可以使用
PURGE
HTTP 请求清除 Varnish 缓存(同样,您需要开发必要的 VCL 代码来更新信息)它,在vcl_recv
过程中)。