如何将第三方缓存实现到自定义类或库

时间:2016-03-31 00:09:03

标签: php

我目前正在开发一个可以从缓存解决方案中获益的小类,因为它会向第三方API发出HTTP请求。

我真的不想强迫用户使用某些特定的预先实现的缓存解决方案。我也希望保持用法非常简单。

相反,我更愿意让班级用户决定他或她会使用哪种缓存机制。

在这种情况下,最佳实践实施是什么?

我认为一个简单的getter / setter方法是合适的:

$class->retrieveFromCache(function() {
    return UserDefinedCache::get('user_defined_key');
});

$class->writeToCache(function($value) {
    UserDefinedCache::set('user_defined_key', $value);
});

这使用户能够使用他或她想要的任何缓存。保持实施和使用简单。

此外,该类还必须存储和检索cookie中的值。我会以类似的方式为它实现访问器。因此,用户可以自由使用最适合他或她的环境或框架的cookie机制。

$class->getCookieValue(function() {
    return $_COOKIE['custom_name'];
});

$class->setCookieValue(function($value) {
    setcookie('custom_name', $value);
});

这是一个很好的实施吗?我忽略了一些缺点吗?或者有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

I would follow the PSR-6 proposal

如果要使用多个适配器,可能有多种方法可以将其归档。有这样的工厂

$cacheInstance = CacheFactory::get('MyFancyCacheAdapter', ['options' => 'here']);

返回给定适配器的已配置实例。适配器应实现PSR-6 CacheItemPoolInterface。

但是,实现它时要记住的主要事情是所有缓存引擎或适配器应该实现相同的接口,以便它们易于切换和使用。

另一方面,我不会尝试重新发明轮子。已经做得很好的缓存库like this one for example。如果你不喜欢它,我想你也可以找到很多其他的。

  

此外,该类还必须存储和检索cookie中的值。我以类似的方式为它实现访问器。因此,用户可以自由使用最适合他或她的环境或框架的cookie机制。

Cookie不是缓存。从技术上讲,你可以实现一个缓存引擎并将数据存储在cookie中,但我认为这是非常误导的,技术上不正确,并且不遵循关注点分离的原则。