- 1. Overview
- 1. 概述
- 2. Configuration
- 2. 配置方法
- 3. Operations execution
- 3. 程序接口调用方式
- 4. Data serialization
- 4. 数据序列化
- 5. Data partitioning(sharding)
- 5. 单个集合数据分片(Sharding)
- 5.1. Common operations over objects
- 6. Distributed objects
- 6. 分布式对象
- 7. Distributed collections
- 7. 分布式集合
- 8. Distributed locks and synchronizers
- 8. 分布式锁和同步器
- 9. Distributed services
- 9. 分布式服务
- 10. Additional features
- 10. 额外功能
- 11. Redis commands mapping
- 11. Redis 命令和 Redisson 对象匹配列表
- 12. Standalone node
- 12. 独立节点模式
- 13. Tools
- 13. 工具
- 14. Integration with frameworks
- 14. 第三方框架整合
- 15. Dependency list
- 15. 项目依赖列表
- 16. FAQ
- 16. Observability
14. Integration with frameworks
14.1. Spring Framework
14.2. Spring Cache
Redisson provides Redis based Spring Cache implementation made according to Spring Cache specification. Each Cache instance has two important parameters: ttl
and maxIdleTime
. Data is stored infinitely if these settings are not defined or equal to 0
.
Config example:
@Configuration
@ComponentScan
@EnableCaching
public static class Application {
@Bean(destroyMethod="shutdown")
RedissonClient redisson() throws IOException {
Config config = new Config();
config.useClusterServers()
.addNodeAddress("redis://127.0.0.1:7004", "redis://127.0.0.1:7001");
return Redisson.create(config);
}
@Bean
CacheManager cacheManager(RedissonClient redissonClient) {
Map<String, CacheConfig> config = new HashMap<String, CacheConfig>();
// create "testMap" cache with ttl = 24 minutes and maxIdleTime = 12 minutes
config.put("testMap", new CacheConfig(24*60*1000, 12*60*1000));
return new RedissonSpringCacheManager(redissonClient, config);
}
}
Cache configuration can be read from YAML configuration files:
@Configuration
@ComponentScan
@EnableCaching
public static class Application {
@Bean(destroyMethod="shutdown")
RedissonClient redisson(@Value("classpath:/redisson.yaml") Resource configFile) throws IOException {
Config config = Config.fromYAML(configFile.getInputStream());
return Redisson.create(config);
}
@Bean
CacheManager cacheManager(RedissonClient redissonClient) throws IOException {
return new RedissonSpringCacheManager(redissonClient, "classpath:/cache-config.yaml");
}
}
14.2.1 Spring Cache. Local cache and data partitioning
Redisson provides various Spring Cache managers with two important features:
local cache - so called near cache
used to speed up read operations and avoid network roundtrips. It caches Map entries on Redisson side and executes read operations up to 45x faster in comparison with common implementation. Local cache instances with the same name connected to the same pub/sub channel. This channel is used for exchanging of update/invalidate events between all instances. Local cache store doesn't use hashCode()
/equals()
methods of key object, instead it uses hash of serialized state.
data partitioning - although Map object is cluster compatible its content isn't scaled/partitioned across multiple Redis master nodes in cluster. Data partitioning allows to scale available memory, read/write operations and entry eviction process for individual Map instance in Redis cluster.
1. Scripted eviction
Allows to define time to live
or max idle time
parameters per map entry. Redis hash structure doesn't support eviction thus it's done on Redisson side through a custom scheduled task which removes expired entries using Lua script. Eviction task is started once per unique object name at the moment of getting Map instance. If instance isn't used and has expired entries it should be get again to start the eviction process. This leads to extra Redis calls and eviction task per unique map object name.
Entries are cleaned time to time by org.redisson.eviction.EvictionScheduler
. By default, it removes 100 expired entries at a time. This can be changed through cleanUpKeysAmount setting. Task launch time tuned automatically and depends on expired entries amount deleted in previous time and varies between 5 second to 30 minutes by default. This time interval can be changed through minCleanUpDelay and maxCleanUpDelay. For example, if clean task deletes 100 entries each time it will be executed every 5 seconds (minimum execution delay). But if current expired entries amount is lower than previous one then execution delay will be increased by 1.5 times and decreased otherwise.
Available implementations:
Class name | Local cache | Data partitioning | Ultra-fast read/write |
---|---|---|---|
RedissonSpringCacheManager open-source version | ❌ | ❌ | ❌ |
RedissonSpringCacheManager Redisson PRO version | ❌ | ❌ | ✔️ |
RedissonSpringLocalCachedCacheManager available only in Redisson PRO | ✔️ | ❌ | ✔️ |
RedissonClusteredSpringCacheManager available only in Redisson PRO | ❌ | ✔️ | ✔️ |
RedissonClusteredSpringLocalCachedCacheManager available only in Redisson PRO | ✔️ | ✔️ | ✔️ |
2. Advanced eviction
Allows to define time to live
parameter per map entry. Doesn't use an entry eviction task, entries are cleaned on Redis side.
Available implementations:
Class name | Local cache | Data partitioning | Ultra-fast read/write |
---|---|---|---|
RedissonSpringCacheV2Manager available only in Redisson PRO | ❌ | ✔️ | ✔️ |
RedissonSpringLocalCachedCacheV2Manager available only in Redisson PRO | ✔️ | ✔️ | ✔️ |
3. Native eviction
Allows to define time to live
parameter per map entry. Doesn't use an entry eviction task, entries are cleaned on Redis side.
Requires Redis 7.4+.
Available implementations:
Class name | Local cache | Data partitioning | Ultra-fast read/write |
---|---|---|---|
RedissonSpringCacheNativeManager open-source version | ❌ | ❌ | ❌ |
RedissonSpringCacheNativeManager Redisson PRO version | ❌ | ❌ | ✔️ |
RedissonSpringLocalCachedCacheNativeManager available only in Redisson PRO | ✔️ | ❌ | ✔️ |
RedissonClusteredSpringCacheNativeManager available only in Redisson PRO | ❌ | ✔️ | ✔️ |
Local cache
Follow options object can be supplied during local cached managers initialization:
LocalCachedMapOptions options = LocalCachedMapOptions.defaults()
// Defines whether to store a cache miss into the local cache.
// Default value is false.
.storeCacheMiss(false);
// Defines store mode of cache data.
// Follow options are available:
// LOCALCACHE - store data in local cache only.
// LOCALCACHE_REDIS - store data in both Redis and local cache.
.storeMode(StoreMode.LOCALCACHE_REDIS)
// Defines Cache provider used as local cache store.
// Follow options are available:
// REDISSON - uses Redisson own implementation
// CAFFEINE - uses Caffeine implementation
.cacheProvider(CacheProvider.REDISSON)
// Defines local cache eviction policy.
// Follow options are available:
// LFU - Counts how often an item was requested. Those that are used least often are discarded first.
// LRU - Discards the least recently used items first
// SOFT - Uses weak references, entries are removed by GC
// WEAK - Uses soft references, entries are removed by GC
// NONE - No eviction
.evictionPolicy(EvictionPolicy.NONE)
// If cache size is 0 then local cache is unbounded.
.cacheSize(1000)
// Used to load missed updates during any connection failures to Redis.
// Since, local cache updates can't be get in absence of connection to Redis.
// Follow reconnection strategies are available:
// CLEAR - Clear local cache if map instance has been disconnected for a while.
// LOAD - Store invalidated entry hash in invalidation log for 10 minutes
// Cache keys for stored invalidated entry hashes will be removed
// if LocalCachedMap instance has been disconnected less than 10 minutes
// or whole cache will be cleaned otherwise.
// NONE - Default. No reconnection handling
.reconnectionStrategy(ReconnectionStrategy.NONE)
// Used to synchronize local cache changes.
// Follow sync strategies are available:
// INVALIDATE - Default. Invalidate cache entry across all LocalCachedMap instances on map entry change
// UPDATE - Insert/update cache entry across all LocalCachedMap instances on map entry change
// NONE - No synchronizations on map changes
.syncStrategy(SyncStrategy.INVALIDATE)
// time to live for each map entry in local cache
.timeToLive(10000)
// or
.timeToLive(10, TimeUnit.SECONDS)
// max idle time for each map entry in local cache
.maxIdle(10000)
// or
.maxIdle(10, TimeUnit.SECONDS);
Each Spring Cache instance has two important parameters: ttl
and maxIdleTime
and stores data infinitely if they are not defined or equal to 0
.
Complete config example:
@Configuration
@ComponentScan
@EnableCaching
public static class Application {
@Bean(destroyMethod="shutdown")
RedissonClient redisson() throws IOException {
Config config = new Config();
config.useClusterServers()
.addNodeAddress("redis://127.0.0.1:7004", "redis://127.0.0.1:7001");
return Redisson.create(config);
}
@Bean
CacheManager cacheManager(RedissonClient redissonClient) {
Map<String, CacheConfig> config = new HashMap<String, CacheConfig>();
// define local cache settings for "testMap" cache.
// ttl = 48 minutes and maxIdleTime = 24 minutes for local cache entries
LocalCachedMapOptions options = LocalCachedMapOptions.defaults()
.evictionPolicy(EvictionPolicy.LFU)
.timeToLive(48, TimeUnit.MINUTES)
.maxIdle(24, TimeUnit.MINUTES);
.cacheSize(1000);
// create "testMap" Redis cache with ttl = 24 minutes and maxIdleTime = 12 minutes
LocalCachedCacheConfig cfg = new LocalCachedCacheConfig(24*60*1000, 12*60*1000, options);
// Max size of map stored in Redis
cfg.setMaxSize(2000);
config.put("testMap", cfg);
return new RedissonSpringLocalCachedCacheManager(redissonClient, config);
// or
return new RedissonSpringLocalCachedCacheNativeManager(redissonClient, config);
// or
return new RedissonSpringLocalCachedCacheV2Manager(redissonClient, config);
// or
return new RedissonClusteredSpringLocalCachedCacheManager(redissonClient, config);
}
}
Cache configuration could be read from YAML configuration files:
@Configuration
@ComponentScan
@EnableCaching
public static class Application {
@Bean(destroyMethod="shutdown")
RedissonClient redisson(@Value("classpath:/redisson.yaml") Resource configFile) throws IOException {
Config config = Config.fromYAML(configFile.getInputStream());
return Redisson.create(config);
}
@Bean
CacheManager cacheManager(RedissonClient redissonClient) throws IOException {
return new RedissonSpringLocalCachedCacheManager(redissonClient, "classpath:/cache-config.yaml");
}
}
14.2.2 Spring Cache. YAML config format
Below is the configuration of Spring Cache with name testMap
in YAML format:
---
testMap:
ttl: 1440000
maxIdleTime: 720000
localCacheOptions:
invalidationPolicy: "ON_CHANGE"
evictionPolicy: "NONE"
cacheSize: 0
timeToLiveInMillis: 0
maxIdleInMillis: 0
Please note: localCacheOptions
settings are available for org.redisson.spring.cache.RedissonSpringLocalCachedCacheManager
and org.redisson.spring.cache.RedissonSpringClusteredLocalCachedCacheManager
classes only.
14.3. Hibernate Cache
Please find more information regarding this chapter here.
14.3.1. Hibernate Cache. Local cache and data partitioning
Please find more information regarding this chapter here.
14.4 JCache API (JSR-107) implementation
Redisson provides an implementation of JCache API (JSR-107) for Redis.
Below are examples of JCache API usage.
1. Using default config located at /redisson-jcache.yaml
:
MutableConfiguration<String, String> config = new MutableConfiguration<>();
CacheManager manager = Caching.getCachingProvider().getCacheManager();
Cache<String, String> cache = manager.createCache("namedCache", config);
2. Using config file with custom location:
MutableConfiguration<String, String> config = new MutableConfiguration<>();
// yaml config
URI redissonConfigUri = getClass().getResource("redisson-jcache.yaml").toURI();
CacheManager manager = Caching.getCachingProvider().getCacheManager(redissonConfigUri, null);
Cache<String, String> cache = manager.createCache("namedCache", config);
3. Using Redisson's config object:
MutableConfiguration<String, String> jcacheConfig = new MutableConfiguration<>();
Config redissonCfg = ...
Configuration<String, String> config = RedissonConfiguration.fromConfig(redissonCfg, jcacheConfig);
CacheManager manager = Caching.getCachingProvider().getCacheManager();
Cache<String, String> cache = manager.createCache("namedCache", config);
4. Using Redisson instance object:
MutableConfiguration<String, String> jcacheConfig = new MutableConfiguration<>();
RedissonClient redisson = ...
Configuration<String, String> config = RedissonConfiguration.fromInstance(redisson, jcacheConfig);
CacheManager manager = Caching.getCachingProvider().getCacheManager();
Cache<String, String> cache = manager.createCache("namedCache", config);
Read more here about Redisson configuration.
Provided implementation fully passes TCK tests. Here is the test module.
14.4.1 JCache API. Asynchronous, Reactive and RxJava3 interfaces
Along with usual JCache API, Redisson provides Asynchronous, Reactive and RxJava3 API.
Asynchronous interface. Each method returns org.redisson.api.RFuture
object.
Example:
MutableConfiguration<String, String> config = new MutableConfiguration<>();
CacheManager manager = Caching.getCachingProvider().getCacheManager();
Cache<String, String> cache = manager.createCache("myCache", config);
CacheAsync<String, String> asyncCache = cache.unwrap(CacheAsync.class);
RFuture<Void> putFuture = asyncCache.putAsync("1", "2");
RFuture<String> getFuture = asyncCache.getAsync("1");
Reactive interface. Each method returns reactor.core.publisher.Mono
object.
Example:
MutableConfiguration<String, String> config = new MutableConfiguration<>();
CacheManager manager = Caching.getCachingProvider().getCacheManager();
Cache<String, String> cache = manager.createCache("myCache", config);
CacheReactive<String, String> reactiveCache = cache.unwrap(CacheReactive.class);
Mono<Void> putFuture = reactiveCache.put("1", "2");
Mono<String> getFuture = reactiveCache.get("1");
RxJava3 interface. Each method returns one of the following object: io.reactivex.Completable
, io.reactivex.Single
, io.reactivex.Maybe
.
Example:
MutableConfiguration<String, String> config = new MutableConfiguration<>();
CacheManager manager = Caching.getCachingProvider().getCacheManager();
Cache<String, String> cache = manager.createCache("myCache", config);
CacheRx<String, String> rxCache = cache.unwrap(CacheRx.class);
Completable putFuture = rxCache.put("1", "2");
Maybe<String> getFuture = rxCache.get("1");
14.4.2 JCache API. Local cache and data partitioning
Redisson provides JCache implementations with two important features:
local cache - so called near cache used to speed up read operations and avoid network roundtrips. It caches JCache entries on Redisson side and executes read operations up to 45x faster in comparison with common implementation. Local cache instances with the same name connected to the same pub/sub channel. This channel is used for exchanging of update/invalidate events between all instances. Local cache store doesn't use hashCode()/equals() methods of key object, instead it uses hash of serialized state.
data partitioning - although JCache instance is cluster compatible its content isn't scaled/partitioned across multiple Redis master nodes in cluster. Data partitioning allows to scale available memory, read/write operations and entry eviction process for individual JCache instance in Redis cluster.
fallback mode - if set to true
and Redis is down the errors won't be thrown allowing application continue to operate without Redis.
Below is the complete list of available managers:
Local cache | Data partitioning | Ultra-fast read/write | Fallback mode | |
---|---|---|---|---|
JCache open-source version | ❌ | ❌ | ❌ | ❌ |
JCache Redisson PRO version | ❌ | ❌ | ✔️ | ✔️ |
JCache with local cache available only in Redisson PRO | ✔️ | ❌ | ✔️ | ✔️ |
JCache with data partitioning available only in Redisson PRO | ❌ | ✔️ | ✔️ | ✔️ |
JCache with local cache and data partitioning available only in Redisson PRO | ✔️ | ✔️ | ✔️ | ✔️ |
1.1. Local cache configuration:
LocalCacheConfiguration<String, String> configuration = new LocalCacheConfiguration<>()
// Defines whether to store a cache miss into the local cache.
// Default value is false.
.storeCacheMiss(false);
// Defines store mode of cache data.
// Follow options are available:
// LOCALCACHE - store data in local cache only and use Redis only for data update/invalidation.
// LOCALCACHE_REDIS - store data in both Redis and local cache.
.storeMode(StoreMode.LOCALCACHE_REDIS)
// Defines Cache provider used as local cache store.
// Follow options are available:
// REDISSON - uses Redisson own implementation
// CAFFEINE - uses Caffeine implementation
.cacheProvider(CacheProvider.REDISSON)
// Defines local cache eviction policy.
// Follow options are available:
// LFU - Counts how often an item was requested. Those that are used least often are discarded first.
// LRU - Discards the least recently used items first
// SOFT - Uses weak references, entries are removed by GC
// WEAK - Uses soft references, entries are removed by GC
// NONE - No eviction
.evictionPolicy(EvictionPolicy.NONE)
// If cache size is 0 then local cache is unbounded.
.cacheSize(1000)
// Used to load missed updates during any connection failures to Redis.
// Since, local cache updates can't be get in absence of connection to Redis.
// Follow reconnection strategies are available:
// CLEAR - Clear local cache if map instance has been disconnected for a while.
// LOAD - Store invalidated entry hash in invalidation log for 10 minutes
// Cache keys for stored invalidated entry hashes will be removed
// if LocalCachedMap instance has been disconnected less than 10 minutes
// or whole cache will be cleaned otherwise.
// NONE - Default. No reconnection handling
.reconnectionStrategy(ReconnectionStrategy.NONE)
// Used to synchronize local cache changes.
// Follow sync strategies are available:
// INVALIDATE - Default. Invalidate cache entry across all LocalCachedMap instances on map entry change
// UPDATE - Insert/update cache entry across all LocalCachedMap instances on map entry change
// NONE - No synchronizations on map changes
.syncStrategy(SyncStrategy.INVALIDATE)
// time to live for each map entry in local cache
.timeToLive(10000)
// or
.timeToLive(10, TimeUnit.SECONDS)
// max idle time for each map entry in local cache
.maxIdle(10000)
// or
.maxIdle(10, TimeUnit.SECONDS);
1.2. Local cache usage examples:
LocalCacheConfiguration<String, String> config = new LocalCacheConfiguration<>();
.setEvictionPolicy(EvictionPolicy.LFU)
.setTimeToLive(48, TimeUnit.MINUTES)
.setMaxIdle(24, TimeUnit.MINUTES);
.setCacheSize(1000);
CacheManager manager = Caching.getCachingProvider().getCacheManager();
Cache<String, String> cache = manager.createCache("myCache", config);
// or
URI redissonConfigUri = getClass().getResource("redisson-jcache.yaml").toURI();
CacheManager manager = Caching.getCachingProvider().getCacheManager(redissonConfigUri, null);
Cache<String, String> cache = manager.createCache("myCache", config);
// or
Config redissonCfg = ...
Configuration<String, String> rConfig = RedissonConfiguration.fromConfig(redissonCfg, config);
CacheManager manager = Caching.getCachingProvider().getCacheManager();
Cache<String, String> cache = manager.createCache("namedCache", rConfig);
1.3. Data partitioning usage examples:
ClusteredConfiguration<String, String> config = new ClusteredConfiguration<>();
CacheManager manager = Caching.getCachingProvider().getCacheManager();
Cache<String, String> cache = manager.createCache("myCache", config);
// or
URI redissonConfigUri = getClass().getResource("redisson-jcache.yaml").toURI();
CacheManager manager = Caching.getCachingProvider().getCacheManager(redissonConfigUri, null);
Cache<String, String> cache = manager.createCache("myCache", config);
// or
Config redissonCfg = ...
Configuration<String, String> rConfig = RedissonConfiguration.fromConfig(redissonCfg, config);
CacheManager manager = Caching.getCachingProvider().getCacheManager();
Cache<String, String> cache = manager.createCache("namedCache", rConfig);
1.4. Local cache with data partitioning configuration:
ClusteredLocalCacheConfiguration<String, String> configuration = new ClusteredLocalCacheConfiguration<>()
// Defines whether to store a cache miss into the local cache.
// Default value is false.
.storeCacheMiss(false);
// Defines store mode of cache data.
// Follow options are available:
// LOCALCACHE - store data in local cache only and use Redis only for data update/invalidation.
// LOCALCACHE_REDIS - store data in both Redis and local cache.
.storeMode(StoreMode.LOCALCACHE_REDIS)
// Defines Cache provider used as local cache store.
// Follow options are available:
// REDISSON - uses Redisson own implementation
// CAFFEINE - uses Caffeine implementation
.cacheProvider(CacheProvider.REDISSON)
// Defines local cache eviction policy.
// Follow options are available:
// LFU - Counts how often an item was requested. Those that are used least often are discarded first.
// LRU - Discards the least recently used items first
// SOFT - Uses weak references, entries are removed by GC
// WEAK - Uses soft references, entries are removed by GC
// NONE - No eviction
.evictionPolicy(EvictionPolicy.NONE)
// If cache size is 0 then local cache is unbounded.
.cacheSize(1000)
// Used to load missed updates during any connection failures to Redis.
// Since, local cache updates can't be get in absence of connection to Redis.
// Follow reconnection strategies are available:
// CLEAR - Clear local cache if map instance has been disconnected for a while.
// LOAD - Store invalidated entry hash in invalidation log for 10 minutes
// Cache keys for stored invalidated entry hashes will be removed
// if LocalCachedMap instance has been disconnected less than 10 minutes
// or whole cache will be cleaned otherwise.
// NONE - Default. No reconnection handling
.reconnectionStrategy(ReconnectionStrategy.NONE)
// Used to synchronize local cache changes.
// Follow sync strategies are available:
// INVALIDATE - Default. Invalidate cache entry across all LocalCachedMap instances on map entry change
// UPDATE - Insert/update cache entry across all LocalCachedMap instances on map entry change
// NONE - No synchronizations on map changes
.syncStrategy(SyncStrategy.INVALIDATE)
// time to live for each map entry in local cache
.timeToLive(10000)
// or
.timeToLive(10, TimeUnit.SECONDS)
// max idle time for each map entry in local cache
.maxIdle(10000)
// or
.maxIdle(10, TimeUnit.SECONDS);
1.5. Local cache with data partitioning usage examples:
ClusteredLocalCacheConfiguration<String, String> config = new ClusteredLocalCacheConfiguration<>();
CacheManager manager = Caching.getCachingProvider().getCacheManager();
Cache<String, String> cache = manager.createCache("myCache", config);
// or
URI redissonConfigUri = getClass().getResource("redisson-jcache.yaml").toURI();
CacheManager manager = Caching.getCachingProvider().getCacheManager(redissonConfigUri, null);
Cache<String, String> cache = manager.createCache("myCache", config);
// or
Config redissonCfg = ...
Configuration<String, String> rConfig = RedissonConfiguration.fromConfig(redissonCfg, config);
CacheManager manager = Caching.getCachingProvider().getCacheManager();
Cache<String, String> cache = manager.createCache("namedCache", rConfig);
14.4.3. Open Liberty or WebSphere Liberty integration
Distributed Cache configuration example:
<library id="jCacheVendorLib">
<file name="${shared.resource.dir}/redisson-all-3.36.0.jar"/>
</library>
<cache id="io.openliberty.cache.authentication" name="io.openliberty.cache.authentication"
cacheManagerRef="CacheManager" />
<cacheManager id="CacheManager" uri="file:${server.config.dir}/redisson-jcache.yaml">
<properties fallback="true"/>
<cachingProvider jCacheLibraryRef="jCacheVendorLib"/>
</cacheManager>
Distributed Session persistence configuration example:
<featureManager>
<feature>servlet-6.0</feature>
<feature>sessionCache-1.0</feature>
</featureManager>
<httpEndpoint httpPort="${http.port}" httpsPort="${https.port}"
id="defaultHttpEndpoint" host="*" />
<library id="jCacheVendorLib">
<file name="${shared.resource.dir}/redisson-all-3.36.0.jar"/>
</library>
<httpSessionCache cacheManagerRef="CacheManager"/>
<cacheManager id="CacheManager" uri="file:${server.config.dir}/redisson-jcache.yaml">
<properties fallback="true"/>
<cachingProvider jCacheLibraryRef="jCacheVendorLib"/>
</cacheManager>
Settings below are available only in Redisson PRO edition.
Follow settings are available per JCache instance:
Parameter | fallback |
Description | Skip errors if Redis cache is unavailable |
Default value | false |
Parameter | implementation |
Description | Cache implementation.cache - standard implementationclustered-local-cache - data partitioning and local cache supportlocal-cache - local cache supportclustered-cache - data partitioning support |
Default value | cache |
Parameter | localcache.store_cache_miss |
Description | Defines whether to store a cache miss into the local cache. |
Default value | false |
Parameter | localcache.cache_provider |
Description | Cache provider used as local cache store.REDISSON and CAFFEINE providers are available. |
Default value | REDISSON |
Parameter | localcache.store_mode |
Description | Store mode of cache data.LOCALCACHE - store data in local cache only and use Redis only for data update/invalidationLOCALCACHE_REDIS - store data in both Redis and local cache |
Default value | LOCALCACHE |
Parameter | localcache.max_idle_time |
Description | Max idle time per entry in local cache. Defined in milliseconds.0 value means this setting doesn't affect expiration |
Default value | 0 |
Parameter | localcache.time_to_live |
Description | Time to live per entry in local cache. Defined in milliseconds.0 value means this setting doesn't affect expiration |
Default value | 0 |
Parameter | localcache.eviction_policy |
Description | Eviction policy applied to local cache entries when cache size limit reached.LFU , LRU , SOFT , WEAK and NONE policies are available. |
Default value | NONE |
Parameter | localcache.sync_strategy |
Description | Sync strategy used to synchronize local cache changes across all instances.INVALIDATE - Invalidate cache entry across all LocalCachedMap instances on map entry changeUPDATE - Update cache entry across all LocalCachedMap instances on map entry changeNONE - No synchronizations on map changes |
Default value | INVALIDATE |
Parameter | localcache.reconnection_strategy |
Description | Reconnection strategy used to load missed local cache updates through Hibernate during any connection failures to Redis.CLEAR - Clear local cache if map instance has been disconnected for a whileLOAD - Store invalidated entry hash in invalidation log for 10 minutes. Cache keys for stored invalidated entry hashes will be removed if LocalCachedMap instance has been disconnected less than 10 minutes or whole cache will be cleaned otherwiseNONE - No reconnection handling |
Default value | NONE |
Parameter | localcache.size |
Description | Max size of local cache. Superfluous entries in Redis are evicted using defined eviction policy.0 value means unbounded cache. |
Default value | 0 |
14.5. MyBatis Cache
Please find more information regarding this chapter here.
14.5.1. MyBatis Cache. Local cache and data partitioning
Please find more information regarding this chapter here.
14.6. Tomcat Redis Session Manager
Please find more information regarding this chapter here.
14.7. Spring Session
Please note that Redis notify-keyspace-events
setting should contain Exg
letters to make Spring Session integration work.
Ensure you have Spring Session library in your classpath, add it if necessary:
Maven
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-core</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-data-33</artifactId>
<version>3.36.0</version>
</dependency>
Gradle
compile 'org.springframework.session:spring-session-core:3.3.2'
compile 'org.redisson:redisson-spring-data-33:3.36.0'
Usage example of Spring Http Session configuration:
Add configuration class which extends AbstractHttpSessionApplicationInitializer
class:
@Configuration
@EnableRedisHttpSession
public class SessionConfig extends AbstractHttpSessionApplicationInitializer {
@Bean
public RedissonConnectionFactory redissonConnectionFactory(RedissonClient redisson) {
return new RedissonConnectionFactory(redisson);
}
@Bean(destroyMethod = "shutdown")
public RedissonClient redisson(@Value("classpath:/redisson.yaml") Resource configFile) throws IOException {
Config config = Config.fromYAML(configFile.getInputStream());
return Redisson.create(config);
}
}
Usage example of Spring WebFlux’s Session configuration:
Add configuration class which extends AbstractReactiveWebInitializer
class:
@Configuration
@EnableRedisWebSession
public class SessionConfig extends AbstractReactiveWebInitializer {
@Bean
public RedissonConnectionFactory redissonConnectionFactory(RedissonClient redisson) {
return new RedissonConnectionFactory(redisson);
}
@Bean(destroyMethod = "shutdown")
public RedissonClient redisson(@Value("classpath:/redisson.yaml") Resource configFile) throws IOException {
Config config = Config.fromYAML(configFile.getInputStream());
return Redisson.create(config);
}
}
Usage example with Spring Boot configuration:
Add Spring Session Data Redis library in classpath:
Maven
<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> <version>3.3.2</version> </dependency>
Gradle
compile 'org.springframework.session:spring-session-data-redis:3.3.2'
Add Redisson Spring Data Redis library in classpath:
Maven
<dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-data-33</artifactId> <version>3.36.0</version> </dependency>
Gradle
compile 'org.redisson:redisson-spring-data-33:3.36.0'
Define follow properties in spring-boot settings
spring.session.store-type=redis
spring.redis.redisson.file=classpath:redisson.yaml
spring.session.timeout.seconds=900
Try Redisson PRO with ultra-fast performance and support by SLA.
14.8. Spring Transaction Manager
Redisson provides implementation of both org.springframework.transaction.PlatformTransactionManager
and org.springframework.transaction.ReactiveTransactionManager
interfaces to participant in Spring transactions. See also Transactions section.
Usage example of Spring Transaction Management:
@Configuration
@EnableTransactionManagement
public class RedissonTransactionContextConfig {
@Bean
public TransactionalBean transactionBean() {
return new TransactionalBean();
}
@Bean
public RedissonTransactionManager transactionManager(RedissonClient redisson) {
return new RedissonTransactionManager(redisson);
}
@Bean(destroyMethod="shutdown")
public RedissonClient redisson(@Value("classpath:/redisson.yaml") Resource configFile) throws IOException {
Config config = Config.fromYAML(configFile.getInputStream());
return Redisson.create(config);
}
}
public class TransactionalBean {
@Autowired
private RedissonTransactionManager transactionManager;
@Transactional
public void commitData() {
RTransaction transaction = transactionManager.getCurrentTransaction();
RMap<String, String> map = transaction.getMap("test1");
map.put("1", "2");
}
}
Usage example of Reactive Spring Transaction Management:
@Configuration
@EnableTransactionManagement
public class RedissonReactiveTransactionContextConfig {
@Bean
public TransactionalBean transactionBean() {
return new TransactionalBean();
}
@Bean
public ReactiveRedissonTransactionManager transactionManager(RedissonReactiveClient redisson) {
return new ReactiveRedissonTransactionManager(redisson);
}
@Bean(destroyMethod="shutdown")
public RedissonReactiveClient redisson(@Value("classpath:/redisson.yaml") Resource configFile) throws IOException {
Config config = Config.fromYAML(configFile.getInputStream());
return Redisson.createReactive(config);
}
}
public class TransactionalBean {
@Autowired
private ReactiveRedissonTransactionManager transactionManager;
@Transactional
public Mono<Void> commitData() {
Mono<RTransactionReactive> transaction = transactionManager.getCurrentTransaction();
return transaction.flatMap(t -> {
RMapReactive<String, String> map = t.getMap("test1");
return map.put("1", "2");
}).then();
}
}
14.9. Spring Cloud Stream
This feature is available only in Redisson PRO edition.
Redisson implements Spring Cloud Stream integration based on the reliable Redis Stream structure for message delivery. To use Redis binder with Redisson you need to add Spring Cloud Stream Binder library in classpath:
Maven
<dependency>
<groupId>pro.redisson</groupId>
<artifactId>spring-cloud-stream-binder-redisson</artifactId>
<version>3.36.0</version>
</dependency>
Gradle
compile 'pro.redisson:spring-cloud-stream-binder-redisson:3.36.0'
Compatible with Spring versions below.
Spring Cloud Stream | Spring Cloud | Spring Boot |
---|---|---|
4.1.x | 2023.0.x | 3.0.x, 3.1.x, 3.2.x |
4.0.x | 2022.0.x | 3.0.x, 3.1.x, 3.2.x |
3.2.x | 2021.0.x | 2.6.x, 2.7.x (Starting with 2021.0.3 of Spring Cloud) |
3.1.x | 2020.0.x | 2.4.x, 2.5.x (Starting with 2020.0.3 of Spring Cloud) |
14.9.1 Receiving messages
Register the input binder (an event sink) for receiving messages as follows:
@Bean
public Consumer<MyObject> receiveMessage() {
return obj -> {
// consume received object ...
};
}
Define channel id in the configuration file application.properties
. Example for receiveMessage
bean defined above connected to my-channel
channel:
spring.cloud.stream.bindings.receiveMessage-in-0.destination=my-channel
14.9.2 Publishing messages
Register the output binder (an event source) for publishing messages as follows:
@Bean
public Supplier<MyObject> feedSupplier() {
return () -> {
// ...
return new MyObject();
};
}
Define channel id in the configuration file application.properties
. Example for feedSupplier
bean defined above connected to my-channel
channel:
spring.cloud.stream.bindings.feedSupplier-out-0.destination=my-channel
spring.cloud.stream.bindings.feedSupplier-out-0.producer.useNativeEncoding=true
14.10. Spring Data Redis
Please find information regarding this chapter here.
14.11. Spring Boot Starter
Please find the information regarding this chapter here.
14.12. Micronaut
Please find the information regarding this chapter here.
14.13. Quarkus
Please find the information regarding this chapter here.
14.14. Helidon
Please find the information regarding this chapter here.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论