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

配置范例如下:

  1. // 二级缓存
  2. props.put(Environment.USE_SECOND_LEVEL_CACHE, true);
  3. props.put(Environment.USE_QUERY_CACHE, true);
  4. props.put(Environment.CACHE_REGION_FACTORY, org.redisson.hibernate.v52.LocalCachedRedisRegionFactory.class.getName());
  5. props.put(Environment.CACHE_REGION_PREFIX, "hibernate");
  6. // 为Hibernate提供Redis相关的配置
  7. props.put(Environment.CACHE_PROVIDER_CONFIG, "hibernate-redis.properties");

hibernate-redis.properties文件范例:

hibernate-redis.properties文件

  1. # redisson配置文件地址
  2. redisson-config=conf/redisson.yaml
  3. # 为缓存指定默认过期时间
  4. redis.expiryInSeconds.default=120
  5. # 为缓存指定默认过期策略
  6. # 如果过期策略采用了`ON_CHANGE`、`ON_CHANGE_WITH_CLEAR_ON_RECONNECT`或是`ON_CHANGE_WITH_LOAD_ON_RECONNECT`
  7. # 那么在修改或删除映射元素的时候,相应的映射元素将被从所有掌握该缓存的Hibernate本地缓存实例中驱除
  8. redis.localCache.invalidationPolicy.default=ON_CHANGE_WITH_CLEAR_ON_RECONNECT
  9. # 如果本地缓存最大数量设定为`0`则表示默认缓存的元素数量不受限制
  10. redis.localCache.cacheSize.default=10000
  11. # 有`LFU`、`LRU`、`SOFT`、`WEAK`以及`NONE`这几种默认驱逐策略可供选择
  12. redis.localCache.evictionPolicy.default=LFU
  13. # 默认每个本地缓存中的元素过期时间
  14. redis.localCache.timeToLiveInMillis.default=1000000
  15. # 默认每个本地缓存中的元素最大闲置时间
  16. redis.localCache.maxIdleInMillis.default=1000000
  17. # 指定`player`区域的过期时间
  18. redis.expiryInSeconds.hibernate.player=900
  19. # `player`区域的本地缓存相关设定
  20. redis.localCache.invalidationPolicy.hibernate.player=ON_CHANGE_WITH_CLEAR_ON_RECONNECT
  21. redis.localCache.cacheSize.hibernate.player=10000
  22. redis.localCache.evictionPolicy.hibernate.player=LFU
  23. redis.localCache.timeToLiveInMillis.hibernate.player=1000000
  24. redis.localCache.maxIdleInMillis.hibernate.player=1000000

需要注意的是: redis.localCache.*配置参数仅适用于ClusteredLocalCachedRedisRegionFactory类和LocalCachedRedisRegionFactory类。