hibernate 使用 memcached 開啟二級快取
阿新 • • 發佈:2019-01-24
現在的專案配置的是memcached二級快取,使用的是hibernate4.18版本
1.匯入所需的jar包
commons-codec-1.10.jar
hibernate3-memcached-1.5.jar(hibernate3使用此包)
hibernate4-memcached-1.0.jar(hibernate4使用此包)
memcached-2.5.jar
slf4j-api-1.6.1.jar
spy-2.4.jar
2.修改applicationContext的hibernate配置
<property name="hibernateProperties"> <props> <prop key="hibernate.dialect">#{jdbc['hibernate.dialect']}</prop> <prop key="hibernate.hbm2ddl.auto">#{jdbc['hibernate.hbm2ddl.auto']}</prop> <prop key="hibernate.show_sql">#{jdbc['hibernate.show_sql']}</prop> <prop key="hibernate.format_sql">#{jdbc['hibernate.format_sql']}</prop> <prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop> <!-- 快取配置 --> <prop key="hibernate.cache.use_query_cache">true</prop><!-- 開啟快取 --> <prop key="hibernate.cache.use_second_level_cache">true</prop><!-- 開啟二級快取 --> <!-- hibernate3 二級快取提供類 <prop key="hibernate.cache.provider_class"> com.googlecode.hibernate.memcached.MemcachedCacheProvider </prop> --> <!-- hibernate4 二級快取提供類--> <prop key="hibernate.cache.region.factory_class"> com.googlecode.hibernate.memcached.MemcachedRegionFactory </prop> <prop key="hibernate.cache.use_structured_entries">true</prop><!-- 結構化儲存 --> <prop key="hibernate.max_fetch_depth">3</prop> <prop key="hibernate.memcached.servers">192.168.39.39:11211</prop><!-- 二級快取伺服器位置和埠 --> <!-- 二級快取字首名稱--> <prop key="hibernate.cache.region_prefix">quality.cache.memcached</prop> <prop key="hibernate.memcached.operationTimeout">5000</prop><!-- 操作超時時間,單位ms --> <prop key="hibernate.memcached.cacheTimeSeconds">200</prop><!-- 快取失效時間,單位秒 --> </props> </property>
3.測試快取效果
hibernate使用快取需2步
在實體類開啟快取,可以使用註解或hbm配置。因為專案中用的是註解,這裡的是註解
@Entity @cache(usage=CacheConcurrencyStrategy.READ_WRITE) @Table(name="t_user") public class User { @Id @Column(name="ID",length=32) @GeneratedValue(generator="uuid") @GenericGenerator(name="uuid",strategy="uuid") private String id; ................
執行查詢方法時開啟快取
@Override
public <T> List<T> findEntities(Class<T> c) {
String hql = "from "+c.getSimpleName();
Query query = getSession().createQuery(hql);
query.setCacheable(true);
return query.list();
}
這樣就可以使用memcached二級快取了,可以看到console只打印出一句查詢sql。
注意:
hibernate.memcached.servers 可以配置多個server:用空格隔開,這多個server是類似叢集的關係,但server本生的配置可以完全獨立