gpt4 book ai didi

使用 Memcached 进行 Spring-Hibernate 缓存

转载 作者:行者123 更新时间:2023-12-04 23:53:15 24 4
gpt4 key购买 nike

我有一个应用程序,其后端是用 Spring 和 Hibernate 制作的。

我想应用内存缓存来使应用程序更具可扩展性。起初我以为我可以将 hibernate 的二级缓存与 memcache 集成,但问题是应用程序中编写的所有 HQL 都像 book.grade.id,其中 Book 和 Grade 是两个独立的实体,因此,二级缓存缓存机制失败。

谁能给我推荐一种实现缓存的方法?我看过 EHCache,但我现在想要 Memcache 实现。我的应用程序将受到多台服务器的攻击,但只存在 1 台数据库服务器。鉴于要求的条件,有什么建议吗?

最佳答案

下面提到的是您可以遵循的步骤。

  1. pom.xml 更改为包含用于使用 xmemcache 的 memcache 和客户端实现的抽象缓存机制。

    com.google.code.simple-spring-memcached Spring 缓存 3.1.0

    <dependency>
    <groupId>com.google.code.simple-spring-memcached</groupId>
    <artifactId>xmemcached-provider</artifactId>
    <version>3.1.0</version>
    </dependency>

注意:您还需要包含 cglib,因为它是基于 aop 的。

  1. configuration.xml 文件修改

   **defining beans**

<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="defaultCache"/>
<!-- 5 minutes -->
<constructor-arg name="expiration" index="1" value="300"/>
<!-- @CacheEvict(..., "allEntries" = true) doesn't work -->
<constructor-arg name="allowClear" index="2" value="false"/>
</bean>
</set>
</property>

</bean>


<bean name="defaultCache" class="com.google.code.ssm.CacheFactory">
<property name="cacheName" value="defaultCache" />
<property name="cacheClientFactory">
<bean name="cacheClientFactory"
class="com.google.code.ssm.providers.xmemcached.MemcacheClientFactoryImpl" />
</property>
<property name="addressProvider">
<bean class="com.google.code.ssm.config.DefaultAddressProvider">
<property name="address" value="x.x.x.x:11211" />
</bean>
</property>
<property name="configuration">
<bean class="com.google.code.ssm.providers.CacheConfiguration">
<property name="consistentHashing" value="true" />
</bean>
</property>

</bean>
  1. 示例方法...

    @Cacheable(value="defaultCache", key="new Integer(#id).toString().concat('.BOOKVO')") public BookVO getBookById(整数 id){

    ...

只有在内存缓存服务器中找不到 key 时,您的方法才会通过此更改访问数据库。

关于使用 Memcached 进行 Spring-Hibernate 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17318879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com