2016-02-09 25 views
0

的问题memcached的没有履行高速缓存期满

这似乎为思想,无论什么样的价值观,我们配置的memcached为到期时间使用所有在缓存中的项目得到5分钟的到期时间。

我们已经尝试

  • 使用0到期,所有的文件显示,这意味着该项目应永不过期。
  • 使用过期600秒。
  • 将来使用Unix时间戳几小时(例如,1455058122)。

在所有情况下,当一个项目被缓存并且我检索cachedump时,过期时间戳将来只有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 

回答

0

因此,事实证明,我对这个问题的散布信息的来源导致我使用不正确的配置设置。最后,我决定从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完美工作。

相关问题