14.3. Hibernate整合
hibernate-redis项目实现了Redisson与Hibernate的完美整合。
14.3.1. Hibernate二级缓存 - 本地缓存和数据分片
Redisson提供了几种不同的Hibernate Cache Factory,按功能主要分为两大类:
本地缓存 类 — 本地缓存(Local Cache)也叫就近缓存(Near Cache)。这类Hibernate Cache的使用主要用于在特定的场景下,映射缓存(MapCache)上的高度频繁的读取操作,使网络通信都被视为瓶颈的情况。Redisson与Redis通信的同时,还将部分数据保存在本地内存里。这样的设计的好处是它能将读取速度提高最多 5倍 。
数据分片 类 — 数据分片(Sharding)类仅适用于Redis集群环境下,因此带有数据分片(Sharding)功能的Hibernate Cache也叫集群分布式Hibernate二级缓存。它利用分库的原理,将单一一个缓存结构切分为若干个小的缓存,并均匀的分布在集群中的各个槽里。这样的设计能使Hibernate缓存突破Redis自身的容量限制,让其容量随集群的扩大而增长。在扩容的同时,还能够使读写性能和元素淘汰处理能力随之成线性增长。
以下列表是Redisson提供的所有Hibernate Cache Factory的名称及其特性:
类名 | 本地缓存功能 Local Cache | 数据分片功能 Sharding |
---|---|---|
SingletonRedisRegionFactory | No | No |
LocalCachedRedisRegionFactory仅限于Redisson PRO版本 | Yes | No |
ClusteredRedisRegionFactory仅限于Redisson PRO版本 | No | Yes |
ClusteredLocalCachedRedisRegionFactory仅限于Redisson PRO版本 | Yes | Yes |
配置范例如下:
// 二级缓存
props.put(Environment.USE_SECOND_LEVEL_CACHE, true);
props.put(Environment.USE_QUERY_CACHE, true);
props.put(Environment.CACHE_REGION_FACTORY, org.redisson.hibernate.v52.LocalCachedRedisRegionFactory.class.getName());
props.put(Environment.CACHE_REGION_PREFIX, "hibernate");
// 为Hibernate提供Redis相关的配置
props.put(Environment.CACHE_PROVIDER_CONFIG, "hibernate-redis.properties");
hibernate-redis.properties文件范例:
hibernate-redis.properties文件
# redisson配置文件地址
redisson-config=conf/redisson.yaml
# 为缓存指定默认过期时间
redis.expiryInSeconds.default=120
# 为缓存指定默认过期策略
# 如果过期策略采用了`ON_CHANGE`、`ON_CHANGE_WITH_CLEAR_ON_RECONNECT`或是`ON_CHANGE_WITH_LOAD_ON_RECONNECT`
# 那么在修改或删除映射元素的时候,相应的映射元素将被从所有掌握该缓存的Hibernate本地缓存实例中驱除
redis.localCache.invalidationPolicy.default=ON_CHANGE_WITH_CLEAR_ON_RECONNECT
# 如果本地缓存最大数量设定为`0`则表示默认缓存的元素数量不受限制
redis.localCache.cacheSize.default=10000
# 有`LFU`、`LRU`、`SOFT`、`WEAK`以及`NONE`这几种默认驱逐策略可供选择
redis.localCache.evictionPolicy.default=LFU
# 默认每个本地缓存中的元素过期时间
redis.localCache.timeToLiveInMillis.default=1000000
# 默认每个本地缓存中的元素最大闲置时间
redis.localCache.maxIdleInMillis.default=1000000
# 指定`player`区域的过期时间
redis.expiryInSeconds.hibernate.player=900
# `player`区域的本地缓存相关设定
redis.localCache.invalidationPolicy.hibernate.player=ON_CHANGE_WITH_CLEAR_ON_RECONNECT
redis.localCache.cacheSize.hibernate.player=10000
redis.localCache.evictionPolicy.hibernate.player=LFU
redis.localCache.timeToLiveInMillis.hibernate.player=1000000
redis.localCache.maxIdleInMillis.hibernate.player=1000000
需要注意的是: redis.localCache.*
配置参数仅适用于ClusteredLocalCachedRedisRegionFactory
类和LocalCachedRedisRegionFactory
类。