跳转到主要内容

与memcache相关的缓存工具和配置

项目描述

Develop Master Release

简介

本软件包结合了lovely.memcached和plone.memoize.ram的功能。它为EEA的Memcaches提供了装饰器和实用工具。该装饰器允许您设置由eea.cache所知的依赖关系。

内容

主要功能

  1. 扩展并覆盖 plone.memoize 缓存适配器以与 memcache 一起工作

  2. 提供扩展的 @cache 装饰器,支持

    • 按方法覆盖缓存寿命

    • 依赖字符串以批量无效化缓存

    • 当触发 ObjectModifiedEvent 时自动无效化缓存

  3. 通过 URL 手动无效化缓存的可能

安装

  • 将 eea.cache 添加到您的 buildout 的 eggs 和 zcml 部分,并重新运行 buildout

    eggs =
      ...
      eea.cache
    
    zcml =
      ...
      eea.cache
      eea.cache-overrides
  • 您可以从 https://github.com/eea/eea.cache/tree/master/buildouts/plone4 下载示例 buildout

  • 在“站点设置”>“插件”中安装 eea.cache

  • 启动 memcache

    $ bin/memcached start

依赖关系

源代码

最新源代码(与 Zope 2 兼容)

缓存装饰器

>>> def key(method, self):
...     return method.__name__

>>> from eea.cache import cache
>>> @cache(key, dependencies=["frontpage"])
... def myMethod(num):
...     return num*num

让我们清除任何正在运行的 memcache

>>> from eea.cache.event import InvalidateMemCacheEvent
>>> from zope.event import notify
>>> notify(InvalidateMemCacheEvent(raw=True, dependencies=['frontpage']))

现在我们的 myMethod 将通过方法“key”返回的键和依赖项“frontpage”进行缓存

>>> myMethod(2)
4
>>> myMethod(3)
4

>>> notify(InvalidateMemCacheEvent(raw=True, dependencies=['frontpage']))
>>> myMethod(3)
9

缓存生存期

默认情况下,您的内容在 memcache 中缓存一小时(3600秒)。您可以通过在 ZMI > portal_properties > site_properties 中添加一个 int 属性来更改此属性,属性名为 memcached_defaultLifetime,并将其值设置为 86400(一天)等。

按键覆盖缓存生存期

从 eea.cache 5.1 开始,您还可以传递一个包含持续时间的寿命键,这将覆盖来自门户属性或 lovely.memcached 的默认寿命 3600 秒

ex: in order to cache the result only for 4 minutes
>>> @cache(key, dependencies=["frontpage"], lifetime=240)
... def myMethod(num):
...     return num*num

无效化缓存

如果您为 BrowserView 方法或直接在 Zope 对象方法上使用缓存装饰器,则在对象被修改时(触发 ObjectModifiedEvent)将自动无效化缓存

>>> from Products.Five.browser import BrowserView

>>> class XXX(BrowserView):
...     @cache(key)
...     def title(self):
...         return self.context.title_or_id()

您可以通过向 @cache 装饰器提供 auto_invalidate 参数来禁用自动无效化

>>> @cache(key, auto_invalidate=False)
... def title(self):
...     return self.context.title_or_id()

memcache.invalidate

为了手动无效化每个对象的 memcached 缓存,该包提供了一个名为 memcache.invalidate 的浏览器视图。它将无效化与当前对象 UID 相关的所有 memcached 方法

https://127.0.0.1:2020/Plone/front-page/memcache.invalidate

您还可以手动无效化相关项和反向引用

https://127.0.0.1:2020/Plone/front-page/memcache.invalidate/relatedItems

https://127.0.0.1:2020/Plone/front-page/memcache.invalidate/backRefs

默认情况下,此方法可以由具有以下角色的用户调用

  • 编辑器

  • 共同编辑器

  • 所有者

  • 经理

varnish.invalidate

为了手动无效化每个对象的 memcached 缓存,该包提供了一个名为 varnish.invalidate 的浏览器视图。它将无效化与当前对象 UID 相关的所有 memcached 方法

https://127.0.0.1:2020/Plone/front-page/varnish.invalidate

您还可以手动无效化相关项和反向引用

https://127.0.0.1:2020/Plone/front-page/varnish.invalidate/relatedItems

https://127.0.0.1:2020/Plone/front-page/varnish.invalidate/backRefs

默认情况下,此方法可以由具有以下角色的用户调用

  • 编辑器

  • 共同编辑器

  • 所有者

  • 经理

cache.invalidate

为了手动无效化每个对象的缓存(memcached 和 varnish),该包提供了一个名为 cache.invalidate 的浏览器视图。它将调用 memcache.invalidate 和 varnish.invalidate

https://127.0.0.1:2020/Plone/front-page/cache.invalidate

您还可以手动无效化相关项和反向引用

https://127.0.0.1:2020/Plone/front-page/cache.invalidate/relatedItems

https://127.0.0.1:2020/Plone/front-page/cache.invalidate/backRefs

默认情况下,此方法可以由具有以下角色的用户调用

  • 编辑器

  • 共同编辑器

  • 所有者

  • 经理

cache.settings

每个对象都有一个缓存选项卡,您可以在其中手动选择要无效化的缓存。默认情况下,您可以无效化 memcache 和 varnish。您还有可能无效化相关项和反向引用的 memcache 和/或 varnish。

此表单可以扩展以包含更多选项。有关更详细的示例,请参阅 eea.pdf

configure.zcml:

<adapter
  zcml:condition="installed eea.cache"
  factory=".behavior.ExtraBehavior"
  />

<adapter
  zcml:condition="installed eea.cache"
  factory=".behavior.ExtraSettings"
  name="eea.pdf.cache.extender"
  />

behavior.py:

# Model
class IExtraSettings(model.Schema):
    """ Extra settings
    """
    pdf = schema.Bool(
        title=_(u"PDF"),
        description=_(u"Invalidate latest generated PDF file"),
        required=False,
        default=False
    )


# Behaviour
class ExtraBehavior(object):
    implements(IExtraSettings)
    adapts(IPDFAware)

    def __init__(self, context):
        self.context = context

    @property
    def pdf(self):
        """ PDF
        """
        return False

    @pdf.setter
    def pdf(self, value):
        """ Invalidate last generated PDF?
        """
        if not value:
            return

        removePdfFiles()

# Form
class ExtraSettings(extensible.FormExtender):
    adapts(IPDFAware, ILayer, SettingsForm)

    def __init__(self, context, request, form):
        self.context = context
        self.request = request
        self.form = form

    def update(self):
        """ Extend form
        """
        self.add(IExtraSettings, prefix="extra")
        self.move('pdf', after='varnish', prefix='extra')

资金和项目管理

EEA - 欧洲环境局(欧盟)

变更日志

9.5 - (2021-12-16)

  • 更改:Plone 6 / pip 安装就绪。删除 includeDependencies [avoinea]

9.4 - (2020-03-10)

  • 错误修复:避免缓存键包含 utf-8 字符时的错误 [ichim-dvaid refs #113458]

9.3 - (2020-03-04)

  • 错误修复:删除对 plone.app.caching 的硬依赖:缺少 VARNISH.__name__ [avoinea]

9.2 - (2019-12-13)

  • 错误修复:修复了卸载配置文件 [avoinea]

9.1 - (2019-11-21)

  • 特性:使所有Dexterity内容缓存感知 [avoinea 引用 #110155]

  • 特性:添加了对Python 3和Plone 5.2的支持 [alecghica 引用 #110155]

9.0 - (2019-06-06)

  • 变更:缓存装饰器不再缓存空结果 [ichim-david 引用 #104467]

  • 特性:缓存装饰器现在具有cache_empty参数,如果设置为True,则仍然会缓存空结果 [ichim-david 引用 #104467]

8.5 - (2019-01-28)

  • Jenkins:添加sonarqube步骤 [avoinea 引用 #101552]

  • 变更:更新了指向eea.europa.eu的URL,使用https:// [alecghica 引用 #95849]

8.4 - (2018-06-13)

  • 错误修复:lambda不接受任何参数(给出1个) [avoinea]

8.3 - (2018-06-06)

  • 错误修复:修复了relatedItems缓存失效问题 [avoinea 引用 #95891]

8.2 - (2018-05-24)

  • 错误修复:加快了对反向引用的缓存失效处理 [avoinea 引用 #95020]

  • 特性:将invalidate_cache方法替换为使用eea.cache的方法 [alecghica 引用 #95020]

  • 特性:“刷新此页”方法将您重定向回原始上下文 [alecghica 引用 #95020]

  • 特性:在默认视图的上下文中调用cache.settings时,它也会使父缓存失效 [alecghica 引用 #95020]

  • 错误修复:修复了在所有invalidate方法下,当存在损坏的关系且找不到对象而是None时的错误情况 [alecghica 引用 #95020]

8.1 - (2017-12-12)

  • 变更:将eeacms/zptlint替换为eeacms/plone-test:4 zptlint [avoinea 引用 #90415]

8.0 - (2017-11-07)

  • 变更:删除了Sphinx生成的文档 [petchesi-iulian 引用 #88212]

7.9 - (2017-05-22)

  • 变更:修复了PyLint警告和错误 [valipod 引用 #84949]

7.8 - (2017-05-15)

  • 变更:修复了PyLint警告和错误 [eduard-fironda 引用 #84949]

7.7 - (2017-04-24)

  • 变更:更新了包信息 [eduard-fironda]

7.6 - (2016-05-19)

  • 错误修复:修复了pylint警告 [chiridra 引用 #71940]

7.5 - (2015-08-18)

  • 变更:自动在plone上下文中包含zcml,以便使此包能够在不将其添加到buildout zcml指令的情况下工作 [avoinea]

  • 特性:实现了对pylibmc的支持 [razvanchitu 引用 #27571]

7.4 - (2015-03-17)

  • 变更:在jenkins构建安装脚本中切换到curl [olimpiurob 引用 #22402]

  • 变更:将jenkins构建安装脚本中的fetch URL更改为主EEA CPB存储库中的安装脚本 [olimpiurob 引用 #22402]

7.3 - (2014-12-23)

  • 错误修复:修复了buildout执行的libevent下载 [ghicaale 引用 #21453]

7.2 - (2014-11-20)

  • 变更:添加了InvalidateEverything事件,以便能够使memcache和varnish失效,而无需在ObjectModifiedEvent上添加订阅者 [voineali 引用 #21852, #21850, #21851]

  • 变更:将缓存失效迁移到plone.z3cform,以便可以轻松扩展 [voineali 引用 #21630]

7.1 - (2014-10-01)

  • 特性:现在在缓存表单中将invalidate Memcache显示为选项之一 [ghicaale 引用 #21143]

  • 特性:创建了一个处理程序,用于仅使Varnish失效 [ghicaale 引用 #21143]

  • 特性:改进了结果消息 [ghicaale 引用 #21143]

7.0 - (2014-08-27)

  • 升级步骤:在“Plone > 网站设置 > 扩展”中安装EEA Cache [voineali 引用 #20678]

  • 预升级步骤:在eeacache-overrides之前,在buildout zcml指令中添加eeacache [voineali 引用 #20678]

  • 特性:添加了一个名为cache.invalidate的浏览器视图,允许编辑器手动使缓存失效(包括varnish和memcache)。它还支持相关项和反向引用的失效 [voineali 引用 #20678]

  • 特性:添加了一个名为memcache.invalidate的浏览器视图,允许用户手动使memcache失效。它还支持相关项和反向引用memcache的失效 [voineali 引用 #20678]

  • 变更:在ObjectModifiedEvent触发时,自动使与当前对象UID关联的所有缓存失效 [voineali 引用 #20678]

6.3 - (2014-01-21)

  • 错误修复:从README.rst中移除了错误添加的块引用 [ichim-david 引用 #18064]

  • 特性:添加了Sphinx生成的文档(页面模板格式) [batradav 引用 #9502]

6.2 - (2013-10-04)

  • 变更:更新了zope导入,以符合eeacache对Plone 4.1的最小要求 [ichimdav 引用 #15651]

6.1 - (2013-06-17)

  • 清理:使用logger.debug代替logger.info进行调试消息 [avoinea]

6.0 - (2013-05-20)

  • 特性:移除了lovely.memcached依赖 [voineali 引用 #14343]

5.1 - (2013-02-04)

  • 特性:添加了贡献者信息 [ciobabog 引用 #13892]

  • 特性:增加了向缓存装饰器传递生命周期密钥的功能,以便在不同的默认生命周期内缓存它 [ichimdav #13677]

  • 升级步骤:(可选)在 ZMI > portal_properties > site_properties 中添加一个名为 memcached_defaultLifetimeint 属性,并将其值设置为 86400(一天)或任何适合您需求的值。

  • 特性:可以设置 memcached 默认生命周期,直到现在都是硬编码为一小时(3600秒)[voineali refs #13677]

5.0 - (2012-10-08)

  • 更改:更新了 README 和 egg 的元数据 [voineali refs #5434]

4.3 - (2012-07-13)

  • 错误修复:修复了 HISTORY.txt 文件中的标记 [ciobabog refs #5231]

4.2 - (2012-02-06)

  • 无更改

4.0 - (2011-11-07)

  • 特性:Plone 4.x 兼容版本 [ghicaale #4309]

0.3 - (2010-11-22)

  • 错误修复:修复了测试命名空间,以便在 hudson 中使用 [voineali #3821]

0.2 - (2010-11-10)

  • 错误修复:添加了模拟 memcache 客户端,以修复损坏的 doctests [voineali]

0.1 - (2009-11-10)

  • 初始发布

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

eea.cache-9.5.zip (49.0 kB 查看散列

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面