【问题标题】:Memcached not honouring cache expiryMemcached 不遵守缓存到期
【发布时间】:2016-05-19 23:47:25
【问题描述】:

问题

似乎认为无论我们将 memcached 配置为使用什么值作为过期时间,缓存中的所有项目的过期时间都是 5 分钟。

我们的尝试

  • 使用 0 的过期时间,所有文档都表明这意味着项目永远不会过期。
  • 使用 600 秒的过期时间。
  • 使用未来几个小时后的 Unix 时间戳(例如 1455058122)。

在所有情况下,当一个项目被缓存并且我检索缓存转储时,到期时间戳只是未来 5 分钟。

这非常令人沮丧,因为除了这个主要缺陷之外,memcached 的效果非常好。

设置

  • .NET 3.5
  • Visual Studio 2015
  • NHibernate 3.1.0.4000
  • EnyimCached 2.3.0.0
  • Memcached 1.4.5_4_gaa7839e

Web.config

<enyimmemcache>
    <memcached protocol="Binary">
        <servers>
            <add key="MemcachedAddress" address="127.0.0.1" port="11211" />
            <!-- Add new servers here -->
        </servers>
        <socketPool connectionTimeout="00:00:02" />
        <cache region="system" expiration="0" priority="5" />
    </memcached>
</enyimmemcache>

休眠配置

<property name="cache.provider_class">NHibernate.Caches.EnyimMemcached.MemCacheProvider,NHibernate.Caches.EnyimMemcached</property>
<property name="cache.use_second_level_cache">true</property>

Stats.bat

@echo off>nul

setlocal EnableDelayedExpansion

IF "%1"=="-o" rm dump.log

set SAVESTAMP=%DATE:/=-%@%TIME::=:%

echo --------------[%SAVESTAMP%]-------------- >> dump.log

echo stats items | nc 127.0.0.1 11211 > statsitems

SET myvar=""

FOR /f "tokens=1,2,3 delims=:" %%i in (statsitems) do (
    if NOT %%j==!myvar! (
        SET myvar=%%j
        echo stats cachedump !myvar! 1000000 | nc 127.0.0.1 11211 >> dump.log
    )
)

rm statsitems

【问题讨论】:

    标签: .net nhibernate memcached


    【解决方案1】:

    解决方案

    事实证明,我在该主题上的分散信息来源导致我使用了不正确的配置设置。最后我决定从 github 上获取 Enyim 源并自己调查问题,结果发现 web.config 中的配置甚至没有被使用。由于 Enyim 正在寻找名称为 enyim.com 的部分,而我使用的是 com.enyim,哦,语义学。正确的配置如下。

    Web.config

    <sectionGroup name="enyim.com">
        <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />
        <section name="log" type="Enyim.Caching.Configuration.LoggerSection, Enyim.Caching" />
    </sectionGroup>
    
    <enyim.com>
        <log factory="Enyim.Caching.Log4NetFactory, Enyim.Caching.Log4NetAdapter" />
        <memcached protocol="Binary">
          <servers>
            <add address="127.0.0.1" port="11211" />
            <!-- Add new servers here -->
          </servers>
          <socketPool connectionTimeout="00:00:02" />
        </memcached>
    </enyim.com>
    

    Hibernate.config

    <property name="cache.provider_class">NHibernate.Caches.EnyimMemcached.MemCacheProvider,NHibernate.Caches.EnyimMemcached</property>
    <property name="cache.use_second_level_cache">true</property>
    <property name="cache.default_expiration">2419200</property>
    

    所以我们有了它。所有项目的有效期为 28 天,memcached 完美运行。

    【讨论】:

      猜你喜欢
      • 2010-11-18
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      • 2019-11-08
      相关资源
      最近更新 更多