J2Cache 是 OSChina 目前正在使用的兩級緩存框架。第一級緩存使用 Ehcache,第二級緩存使用 Redis 。由於大量的緩存讀取會導致 L2 的網絡成為整個系統的瓶頸,因此 L1 的目標是降低對 L2 的讀取次數。該緩存框架主要用於集群環境中。單機也可使用,用於避免應用重啟導致的 Ehcache 緩存數據丟失。
j2Cache提供了springboot 的集成。
集成方法如下:
1.引入pom.xml
<dependency> <groupId>net.oschina.j2cache</groupId> <artifactId>j2cache-spring-boot2-starter</artifactId> <version>2.7.6-release</version> </dependency> <dependency> <groupId>net.oschina.j2cache</groupId> <artifactId>j2cache-core</artifactId> <version>2.7.7-release</version> </dependency>
2.增加配置文件
ehcache3.xml
<!-- for ehcache 3.x --> <config xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://www.ehcache.org/v3' xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core.xsd"> <!-- Don't remote default cache configuration --> <cache-template name="default"> <key-type>java.lang.String</key-type> <value-type>java.io.Serializable</value-type> <expiry> <ttl unit="seconds">1800</ttl> </expiry> <resources> <heap>1000</heap> <offheap unit="MB">100</offheap> </resources> </cache-template> <!-- <persistence directory="${ecache.path}"/> --> <cache alias="default" uses-template="default"/> </config>
j2cache.properties
#J2Cache configuration ######################################### # Cache Broadcast Method # values: # jgroups -> use jgroups's multicast # redis -> use redis publish/subscribe mechanism ######################################### j2cache.broadcast = net.oschina.j2cache.cache.support.redis.SpringRedisPubSubPolicy # 是否開啟二級緩存 j2cache.l2-cache-open=true j2cache.open-spring-cache= true j2cache.allow-null-values= true j2cache.cache-clean-mode= active j2cache.redis-client=jedis #組播的通道名稱 jgroups.channel.name = j2cache ######################################### # Level 1&2 provider # values: # none -> disable this level cache # ehcache -> use ehcache2 as level 1 cache # ehcache3 -> use ehcache3 as level 1 cache # caffeine -> use caffeine as level 1 cache(only in memory) # redis -> use redis(hashs) as level 2 cache # [classname] -> use custom provider ######################################### j2cache.L1.provider_class = ehcache3 j2cache.L2.provider_class = net.oschina.j2cache.cache.support.redis.SpringRedisProvider #j2cache.L2.provider_class = redis j2cache.L2.config_section = redis #j2cache.L2.provider_class = redis ######################################### # Cache Serialization Provider # values: # fst -> fast-serialization # kyro -> kyro # java -> java standard # [classname implements Serializer] ######################################### j2cache.serialization = fst ######################################### # Ehcache configuration ######################################### #ehcache.name= #ehcache.configXml=/ehcache.xml ehcache3.configXml = /config/ehcache3.xml ######################################### # Caffeine configuration # caffeine.region.[name] = size, xxxx[s|m|h|d] # ######################################### caffeine.region.default = 1000, 1h ######################################### # Redis connection configuration ######################################### ######################################### # Redis Cluster Mode # # single -> single redis server # sentinel -> master-slaves servers # cluster -> cluster servers (數據庫配置無效,使用 database = 0) # sharded -> sharded servers (密碼、數據庫必須在 hosts 中指定,且連接池配置無效 ; redis://user:password@127.0.0.1:6379/0) # ######################################### #redis.mode = sentinel redis.mode = single #cluster name just for sharded redis.cluster_name = mymaster ## redis cache namespace optional, default[j2cache] redis.namespace = j2cache ## connection #redis.hosts = 127.0.0.1:26378,127.0.0.1:26379,127.0.0.1:26380 redis.hosts = 192.168.1.100:6379 redis.timeout = 2000 redis.password = #redis.database = 0 ## redis pub/sub channel name redis.channel = j2cache ## redis pool properties redis.maxTotal = -1 redis.maxIdle = 2000 redis.maxWaitMillis = 100 redis.minEvictableIdleTimeMillis = 864000000 redis.minIdle = 1000 redis.numTestsPerEvictionRun = 10 redis.lifo = false redis.softMinEvictableIdleTimeMillis = 10 redis.testOnBorrow = true redis.testOnReturn = false redis.testWhileIdle = false redis.timeBetweenEvictionRunsMillis = 300000 redis.blockWhenExhausted = true
redis.mode = single 模式支持 single,sentinel,cluster
redis.hosts:需要配置為redis的主機
j2cache.l2-cache-open:是否開啟二級緩存
3.注入CacheChannel
@Component(value = "iCache") public class J2cacheImpl implements ICache { private String region="rx"; @Autowired private CacheChannel cacheChannel;
4.修改配置文件
application.properties
j2cache:
config-location: classpath:/config/j2cache.properties
配置j2cache.properties 文件路徑