gpt4 book ai didi

php - symfony2中使用redis缓存重复请求

转载 作者:IT王子 更新时间:2023-10-29 06:04:31 26 4
gpt4 key购买 nike

这是我当前的设置:

snc_redis:
clients:
default:
type: predis
alias: cache
dsn: "redis://127.0.0.1"
doctrine:
metadata_cache:
client: cache
entity_manager: default
document_manager: default
result_cache:
client: cache
entity_manager: [bo, aff, fs]
query_cache:
client: cache
entity_manager: default

我有一个 API 可以获取多个重复请求(通常是快速连续的),我可以使用此设置在重复请求时发回缓存的响应吗?也可以设置缓存过期时间吗?

最佳答案

根据您提供的配置示例,我猜您想要缓存 Doctrine 结果而不是完整的 HTTP 响应(尽管后者是可能的,请参见下文)。

如果是这样,最简单的方法就是每当你创建一个 Doctrine 查询时,将它设置为使用 result cache您已在上面设置为使用 redis。

$qb = $em->createQueryBuilder();
// do query things
$query = $qb->getQuery();
$query->useResultCache(true, 3600, 'my_cache_id');

这将使用您的缓存 ID 将该查询的结果缓存一个小时。清除缓存有点麻烦:

$cache = $em->getConfiguration()->getResultCacheImpl();
$cache->delete('my_cache_id');

如果您想缓存完整的响应 - 即您在应用程序内进行一些需要很长时间的处理 - 那么有很多方法可以做到这一点。可以将其序列化并弹出到 redis 中:

$myResults = $service->getLongRunningResults();
$serialized = serialize($myResults);
$redisClient = $container->get('snc_redis.default');
$redisClient->setex('my_id', $serialized, 3600);

或者查看专用的 HTTP 缓存解决方案,如 varnish或查看 Symfony documentation on HTTP caching .

编辑:SncRedisBundle 提供了它自己的 Doctrine CacheProvider 版本。因此,虽然在您的回答中您创建了自己的类(class),但您也可以这样做:

my_cache_service:
class: Snc\RedixBundle\Doctrine\Cache\RedisCache
calls:
- [ setRedis, [ @snc_redis.default ] ]

这几乎可以完成您的类(class)正在做的事情。因此,您使用 $app_cache->fetch('id') 而不是 $app_cache->get('id')。通过这种方式,您可以在不更改应用类的情况下切换缓存的后端,只需更改服务描述即可。

关于php - symfony2中使用redis缓存重复请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32176436/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com