من با memcached در Spring کار کردم و جواب هم گرفتم. این کارو به صورت لوکال انجام دادم و مشکلی در کش کردن داده ها نداشتم. اما وقتی میخوام همین همین کار رو در Hibernate دقیقا با همون تنظیماتی که در Spring داشتم استفاده کنم، کش صورت نمیگیره!! به نظر شما چه دلیلی میتونه داشته باشه؟
<aop:aspectj-autoproxy />
<import resource="simplesm-context.xml" />
<bean name="cacheManager" class="com.google.code.ssm.spring.SSMCacheManager">
<property name="caches">
<set>
<bean class="com.google.code.ssm.spring.SSMCache">
<constructor-arg name="cache" index="0" ref="mycache"/>
<!-- 5 minutes -->
<constructor-arg name="expiration" index="1" value="0"/>
<!-- @CacheEvict(..., "allEntries" = true) doesn't work -->
<constructor-arg name="allowClear" index="2" value="false"/>
</bean>
</set>
</property>
</bean>
<bean name="mycache" class="com.google.code.ssm.CacheFactory">
<property name="cacheClientFactory">
<bean class="com.google.code.ssm.providers.xmemcached.MemcacheClientFactoryImpl" />
</property>
<property name="addressProvider">
<bean class="com.google.code.ssm.config.DefaultAddressProvider">
<property name="address" value="127.0.0.1:11211" />
</bean>
</property>
<property name="configuration">
<bean class="com.google.code.ssm.providers.CacheConfiguration">
<property name="consistentHashing" value="true" />
</bean>
</property>
</bean>
نحوه استفاده از انوتیشن مربوط به کش هم اینجوری بوده. هم در سرویسی که در Spring استفاده کردم و هم در Hibernate
فقط بدنه تابع سرویس دهنده فرق میکنه .
@ReadThroughSingleCache(namespace = "mycache", expiration = 600)
public Employee getEmplyee(@ParameterValueKeyProvider int employeeId)