【问题标题】:How to create client in hibernate- memcached如何在 hibernate-memcached 中创建客户端
【发布时间】:2012-07-11 11:50:39
【问题描述】:

在 hibernate.cfg.xml 中定义了所有的 memcached 属性后,如何在我的代码中创建一个 memcachedclient?

Hibernate.cfg.xml:-

<property name="hibernate.cache.provider_class">com.googlecode.hibernate.memcached.MemcachedCacheProvider</property>
        <property name="hibernate.cache.use_second_level_cache">true</property>
        <property name="hibernate.cache.use_query_cache">false</property>
        <property name="hibernate.cache.use_minimal_puts">true</property>
        <property name="hibernate.cache.region_prefix">MemcachedCache</property>
        <property name="hibernate.memcached.memcacheClientFactory">com.googlecode.hibernate.memcached.dangamemcached.DangaMemcacheClientFactory</property>      
        <property name="hibernate.Memcached.servers"> 10.2.200.114:11211 </property>
        <property name="hibernate.Memcached.cacheTimeSeconds">300</property>
        <property name="hibernate.Memcached.connectionFactory">KetamaConnectionFactory</property>  
        <property name="hibernate.memcached.keyStrategy">HashCodeKeyStrategy</property>
        <property name="hibernate.memcached.readBufferSize">DefaultConnectionFactory.DEFAULT_READ_BUFFER_SIZE</property>
        <property name="hibernate.memcached.operationQueueLength">DefaultConnectionFactory.DEFAULT_OP_QUEUE_LEN</property>
        <property name="hibernate.memcached.operationTimeout">DefaultConnectionFactory.DEFAULT_OPERATION_TIMEOUT</property>
        <property name="hibernate.memcached.hashAlgorithm">HashAlgorithm.KETAMA_HASH</property>
        <property name="hibernate.memcached.clearSupported">false</property>

就像这样

MemcachedClient client = new MemcachedClient(new KetamaConnectionFactory(), AddrUtil.getAddresses("10.2.200.114:11211"));

如果不是,如果我必须使用 hibernate.cfg.xml 中定义的属性,那么我应该如何进行??

【问题讨论】:

    标签: hibernate memcached spymemcached


    【解决方案1】:

    我知道这是一个老问题,但我还是会回答,因为我有完全相同的问题。

    如果您使用 Spring,那么您可以将其作为 bean 连接。

    这是我的持久性配置的一部分:

    <property name="hibernate.cache.provider_class" value="com.googlecode.hibernate.memcached.MemcachedCacheProvider" />
    <property name="hibernate.cache.use_second_level_cache" value="true" />
    <property name="hibernate.cache.use_structured_entries" value="true" />
    <property name="hibernate.memcached.cacheTimeSeconds" value="300" />
    <property name="hibernate.memcached.connectionFactory" value="BinaryConnectionFactory" />
    

    这是相关的 Spring 配置:

    <bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
            <property name="persistenceUnitName" value="persistenceUnit"/>
            <property name="dataSource" ref="dataSource"/>
            <property name="jpaPropertyMap">
                <map>
                    <entry key="hibernate.memcached.servers" value="${MEMCACHIER_SERVERS}" />
                    <entry key="hibernate.memcached.username" value="${MEMCACHIER_USERNAME}" />
                    <entry key="hibernate.memcached.password" value="${MEMCACHIER_PASSWORD}" />
                </map>
            </property>
        </bean>
    
        <bean id="plainCallbackHandler" class="net.spy.memcached.auth.PlainCallbackHandler">
            <constructor-arg index="0" value="${MEMCACHIER_USERNAME}"/>
            <constructor-arg index="1" value="${MEMCACHIER_PASSWORD}"/>
        </bean>
        <bean id="authDescriptor" class="net.spy.memcached.auth.AuthDescriptor">
            <constructor-arg index="0">
                <array><value>PLAIN</value></array>
            </constructor-arg>
            <constructor-arg index="1" ref="plainCallbackHandler"/>
        </bean>
        <bean id="memcachedClient" class="net.spy.memcached.spring.MemcachedClientFactoryBean">
            <property name="servers" value="${MEMCACHIER_SERVERS}"/>
            <property name="protocol" value="BINARY"/>
            <property name="authDescriptor" ref="authDescriptor"/>
        </bean>
    

    那么你当然可以随心所欲地使用它:

    @Inject
    private MemcachedClient memcachedClient;
    

    我使用 1.3 版的 hibernate-memcached 来实现这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 2010-10-18
      • 2020-07-01
      • 1970-01-01
      相关资源
      最近更新 更多