• 14.3. Hibernate整合
    • 14.3.1. Hibernate二级缓存 - 本地缓存和数据分片
      • hibernate-redis.properties文件

    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类。