Spring Boot Starter
Integrates Redisson with Spring Boot library. Depends on Spring Data Redis module.
Supports Spring Boot 1.3.x - 3.4.x
Usage
1. Add redisson-spring-boot-starter dependency into your project:
Maven
<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>xVERSIONx</version></dependency>
Gradle
compile 'org.redisson:redisson-spring-boot-starter:xVERSIONx'
redisson-spring-boot-starter depends on redisson-spring-data module compatible with the latest version of Spring Boot. Downgrade redisson-spring-data module if necessary to support previous Spring Boot versions:
| redisson-spring-data module name |
Spring Boot version |
|---|---|
| redisson-spring-data-16 | 1.3.y |
| redisson-spring-data-17 | 1.4.y |
| redisson-spring-data-18 | 1.5.y |
| redisson-spring-data-2x | 2.x.y |
| redisson-spring-data-3x | 3.x.y |
For Gradle, you can downgrade to redisson-spring-data-27 this way:
implementation ("org.redisson:redisson-spring-boot-starter:xVERSIONx") {exclude group: 'org.redisson', module: 'redisson-spring-data-34'}implementation "org.redisson:redisson-spring-data-27:xVERSIONx"
2. Add settings into application.settings file
Using common Spring Boot 3.x+ settings:
spring:data:redis:database:host:port:password:ssl:timeout:connectTimeout:clientName:cluster:nodes:sentinel:master:nodes:
Using common Spring Boot up to 2.7.x settings:
spring:redis:database:host:port:password:ssl:timeout:connectTimeout:clientName:cluster:nodes:sentinel:master:nodes:
Using Redisson config file: (single mode, replicated mode, cluster mode, sentinel mode, proxy mode, multi cluster mode, multi sentinel mode)
spring:redis:redisson:file: classpath:redisson.yaml
Using Redisson settings: (single mode, replicated mode, cluster mode, sentinel mode, proxy mode, multi cluster mode, multi sentinel mode)
spring:redis:redisson:config: |clusterServersConfig:idleConnectionTimeout: 10000connectTimeout: 10000timeout: 3000retryAttempts: 3retryInterval: 1500failedSlaveReconnectionInterval: 3000failedSlaveCheckInterval: 60000password: nullsubscriptionsPerConnection: 5clientName: nullloadBalancer: !<org.redisson.connection.balancer.RoundRobinLoadBalancer> {}subscriptionConnectionMinimumIdleSize: 1subscriptionConnectionPoolSize: 50slaveConnectionMinimumIdleSize: 24slaveConnectionPoolSize: 64masterConnectionMinimumIdleSize: 24masterConnectionPoolSize: 64readMode: "SLAVE"subscriptionMode: "SLAVE"nodeAddresses:- "redis://127.0.0.1:7004"- "redis://127.0.0.1:7001"- "redis://127.0.0.1:7000"scanInterval: 1000pingConnectionInterval: 0keepAlive: falsetcpNoDelay: falsethreads: 16nettyThreads: 32codec: !<org.redisson.codec.Kryo5Codec> {}transportMode: "NIO"
3. Available Spring Beans:
RedissonClientRedissonRxClientRedissonReactiveClientRedisTemplateReactiveRedisTemplateReactiveRedisOperations
Upgrade to Redisson PRO with advanced features.
FAQ
Q: How to replace Netty version brought by Spring Boot?
You need to define netty version in properties section of your Maven project.
<properties><netty.version>4.1.107.Final</netty.version></properties>
Q: How to disable Redisson?
You may not have Redis or Valkey in some environments. In this case Redisson can be disabled:
- Using Annotations
Spring Boot 2.7+
@SpringBootApplication@EnableAutoConfiguration(exclude = {RedissonAutoConfigurationV2.class})public class Application {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}}
Spring Boot up to 2.6
@SpringBootApplication@EnableAutoConfiguration(exclude = {RedissonAutoConfiguration.class})public class Application {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}}
- Using application.yml file
Spring Boot 2.7+
spring:autoconfigure:exclude:- org.redisson.spring.starter.RedissonAutoConfigurationV2
Spring Boot up to 2.6
spring:autoconfigure:exclude:- org.redisson.spring.starter.RedissonAutoConfiguration
Spring Boot Starter
Integrates Redisson with Spring Boot library. Depends on Spring Data Redis module.
Supports Spring Boot 1.3.x - 3.4.x
Usage
1. Add redisson-spring-boot-starter dependency into your project:
Maven
<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>xVERSIONx</version></dependency>
Gradle
compile 'org.redisson:redisson-spring-boot-starter:xVERSIONx'
redisson-spring-boot-starter depends on redisson-spring-data module compatible with the latest version of Spring Boot. Downgrade redisson-spring-data module if necessary to support previous Spring Boot versions:
| redisson-spring-data module name |
Spring Boot version |
|---|---|
| redisson-spring-data-16 | 1.3.y |
| redisson-spring-data-17 | 1.4.y |
| redisson-spring-data-18 | 1.5.y |
| redisson-spring-data-2x | 2.x.y |
| redisson-spring-data-3x | 3.x.y |
For Gradle, you can downgrade to redisson-spring-data-27 this way:
implementation ("org.redisson:redisson-spring-boot-starter:xVERSIONx") {exclude group: 'org.redisson', module: 'redisson-spring-data-34'}implementation "org.redisson:redisson-spring-data-27:xVERSIONx"
2. Add settings into application.settings file
Using common Spring Boot 3.x+ settings:
spring:data:redis:database:host:port:password:ssl:timeout:connectTimeout:clientName:cluster:nodes:sentinel:master:nodes:
Using common Spring Boot up to 2.7.x settings:
spring:redis:database:host:port:password:ssl:timeout:connectTimeout:clientName:cluster:nodes:sentinel:master:nodes:
Using Redisson config file: (single mode, replicated mode, cluster mode, sentinel mode, proxy mode, multi cluster mode, multi sentinel mode)
spring:redis:redisson:file: classpath:redisson.yaml
Using Redisson settings: (single mode, replicated mode, cluster mode, sentinel mode, proxy mode, multi cluster mode, multi sentinel mode)
spring:redis:redisson:config: |clusterServersConfig:idleConnectionTimeout: 10000connectTimeout: 10000timeout: 3000retryAttempts: 3retryInterval: 1500failedSlaveReconnectionInterval: 3000failedSlaveCheckInterval: 60000password: nullsubscriptionsPerConnection: 5clientName: nullloadBalancer: !<org.redisson.connection.balancer.RoundRobinLoadBalancer> {}subscriptionConnectionMinimumIdleSize: 1subscriptionConnectionPoolSize: 50slaveConnectionMinimumIdleSize: 24slaveConnectionPoolSize: 64masterConnectionMinimumIdleSize: 24masterConnectionPoolSize: 64readMode: "SLAVE"subscriptionMode: "SLAVE"nodeAddresses:- "redis://127.0.0.1:7004"- "redis://127.0.0.1:7001"- "redis://127.0.0.1:7000"scanInterval: 1000pingConnectionInterval: 0keepAlive: falsetcpNoDelay: falsethreads: 16nettyThreads: 32codec: !<org.redisson.codec.Kryo5Codec> {}transportMode: "NIO"
3. Available Spring Beans:
RedissonClientRedissonRxClientRedissonReactiveClientRedisTemplateReactiveRedisTemplateReactiveRedisOperations
Upgrade to Redisson PRO with advanced features.
FAQ
Q: How to replace Netty version brought by Spring Boot?
You need to define netty version in properties section of your Maven project.
<properties><netty.version>4.1.107.Final</netty.version></properties>
Q: How to disable Redisson?
You may not have Redis or Valkey in some environments. In this case Redisson can be disabled:
- Using Annotations Spring Boot 2.7+
@SpringBootApplication@EnableAutoConfiguration(exclude = {RedissonAutoConfigurationV2.class})public class Application {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}}
Spring Boot up to 2.6
@SpringBootApplication@EnableAutoConfiguration(exclude = {RedissonAutoConfiguration.class})public class Application {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}}
- Using application.yml file Spring Boot 2.7+
spring:autoconfigure:exclude:- org.redisson.spring.starter.RedissonAutoConfigurationV2
Spring Boot up to 2.6
spring:autoconfigure:exclude:- org.redisson.spring.starter.RedissonAutoConfiguration
Spring Cache
Redisson provides various Spring Cache implementations. 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@EnableCachingpublic 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);}@BeanCacheManager cacheManager(RedissonClient redissonClient) {Map<String, CacheConfig> config = new HashMap<String, CacheConfig>();// create "testMap" cache with ttl = 24 minutes and maxIdleTime = 12 minutesconfig.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@EnableCachingpublic 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);}@BeanCacheManager cacheManager(RedissonClient redissonClient) throws IOException {return new RedissonSpringCacheManager(redissonClient, "classpath:/cache-config.yaml");}}
Eviction, 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 or Valkey master nodes in cluster. Data partitioning allows to scale available memory, read/write operations and entry eviction process for individual Map instance in cluster.
Scripted eviction
Allows to define time to live or max idle time parameters per map entry. Eviction is 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 or Valkey 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 |
✔️ | ✔️ | ✔️ |
Advanced eviction
Allows to define time to live parameter per map entry. Doesn’t use an entry eviction task, entries are cleaned on Redis or Valkey 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 |
✔️ | ✔️ | ✔️ |
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 or Valkey 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 entry in local cache.timeToLive(Duration.ofSeconds(10))// max idle time for each entry in local cache.maxIdle(Duration.ofSeconds(10));// Defines how to listen expired event sent by Redis or Valkey upon this instance deletion//// Follow expiration policies are available:// DONT_SUBSCRIBE - Don't subscribe on expire event// SUBSCRIBE_WITH_KEYEVENT_PATTERN - Subscribe on expire event using `__keyevent@*:expired` pattern// SUBSCRIBE_WITH_KEYSPACE_CHANNEL - Subscribe on expire event using `__keyspace@N__:name` channel.expirationEventPolicy(ExpirationEventPolicy.SUBSCRIBE_WITH_KEYEVENT_PATTERN)
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@EnableCachingpublic 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);}@BeanCacheManager 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 entriesLocalCachedMapOptions options = LocalCachedMapOptions.defaults().evictionPolicy(EvictionPolicy.LFU).timeToLive(48, TimeUnit.MINUTES).maxIdle(24, TimeUnit.MINUTES).cacheSize(1000);// create "testMap" Redis or Valkey cache with ttl = 24 minutes and maxIdleTime = 12 minutesLocalCachedCacheConfig cfg = new LocalCachedCacheConfig(24*60*1000, 12*60*1000, options);// Max size of map stored in Rediscfg.setMaxSize(2000);config.put("testMap", cfg);return new RedissonSpringLocalCachedCacheManager(redissonClient, config);// orreturn new RedissonSpringLocalCachedCacheNativeManager(redissonClient, config);// orreturn new RedissonSpringLocalCachedCacheV2Manager(redissonClient, config);// orreturn new RedissonClusteredSpringLocalCachedCacheManager(redissonClient, config);}}
Cache configuration could be read from YAML configuration files:
@Configuration@ComponentScan@EnableCachingpublic 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);}@BeanCacheManager cacheManager(RedissonClient redissonClient) throws IOException {return new RedissonSpringLocalCachedCacheManager(redissonClient, "classpath:/cache-config.yaml");}}
YAML config format
Below is the configuration of Spring Cache with name testMap in YAML format:
---testMap:ttl: 1440000maxIdleTime: 720000localCacheOptions:invalidationPolicy: "ON_CHANGE"evictionPolicy: "NONE"cacheSize: 0timeToLiveInMillis: 0maxIdleInMillis: 0
localCacheOptionssettings are available forRedissonSpringLocalCachedCacheManager,RedissonClusteredSpringLocalCachedCacheManager,RedissonSpringLocalCachedCacheV2ManagerandRedissonSpringLocalCachedCacheNativeManagerclasses only.
Spring Session
Please note that Redis or Valkey 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.4.1</version></dependency><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-data-34</artifactId><version>xVERSIONx</version></dependency>
Gradle
compile 'org.springframework.session:spring-session-core:3.4.1'compile 'org.redisson:redisson-spring-data-34:xVERSIONx'
Spring Http Session configuration
Add configuration class which extends AbstractHttpSessionApplicationInitializer class:
@Configuration@EnableRedisHttpSessionpublic class SessionConfig extends AbstractHttpSessionApplicationInitializer {@Beanpublic 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);}}
Spring WebFlux’s Session configuration
Add configuration class which extends AbstractReactiveWebInitializer class:
@Configuration@EnableRedisWebSessionpublic class SessionConfig extends AbstractReactiveWebInitializer {@Beanpublic 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);}}
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.2.1</version></dependency>
Gradle:
compile 'org.springframework.session:spring-session-data-redis:3.4.1'
- Add Redisson Spring Data Redis library in classpath: Maven:
<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-data-34</artifactId><version>xVERSIONx</version></dependency>
Gradle:
compile 'org.redisson:redisson-spring-data-34:xVERSIONx'
- Define follow properties in spring-boot settings
spring.session.store-type=redisspring.redis.redisson.file=classpath:redisson.yamlspring.session.timeout.seconds=900
Upgrade to Redisson PRO with advanced features.
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.
Spring Transaction Management
@Configuration@EnableTransactionManagementpublic class RedissonTransactionContextConfig {@Beanpublic TransactionalBean transactionBean() {return new TransactionalBean();}@Beanpublic 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 {@Autowiredprivate RedissonTransactionManager transactionManager;@Transactionalpublic void commitData() {RTransaction transaction = transactionManager.getCurrentTransaction();RMap<String, String> map = transaction.getMap("test1");map.put("1", "2");}}
Reactive Spring Transaction Management
@Configuration@EnableTransactionManagementpublic class RedissonReactiveTransactionContextConfig {@Beanpublic TransactionalBean transactionBean() {return new TransactionalBean();}@Beanpublic 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 {@Autowiredprivate ReactiveRedissonTransactionManager transactionManager;@Transactionalpublic 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();}}
Spring Cloud Stream
This feature is available only in Redisson PRO edition.
Redisson implements Spring Cloud Stream integration based on the reliable Stream structure for message delivery. To use Redis or Valkey 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>xVERSIONx</version></dependency>
Gradle:
compile 'pro.redisson:spring-cloud-stream-binder-redisson:xVERSIONx'
Compatible with Spring versions below.
| Spring Cloud Stream | Spring Cloud | Spring Boot |
|---|---|---|
| 4.2.x | 2024.0.x | 3.4.x |
| 4.1.x | 2023.0.x | 3.0.x - 3.3.x |
| 4.0.x | 2022.0.x | 3.0.x - 3.3.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) |
Receiving messages
Register the input binder (an event sink) for receiving messages as follows:
@Beanpublic 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
Publishing messages
Register the output binder (an event source) for publishing messages as follows:
@Beanpublic 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-channelspring.cloud.stream.bindings.feedSupplier-out-0.producer.useNativeEncoding=true
Spring Data Redis
Integrates Redisson with Spring Data Redis library. Implements Spring Data’s RedisConnectionFactory and ReactiveRedisConnectionFactory interfaces and allows to interact with Redis or Valkey through RedisTemplate, ReactiveRedisTemplate or ReactiveRedisOperations object.
Usage
- Add
redisson-spring-datadependency into your project: Maven:
<dependency><groupId>org.redisson</groupId><!-- for Spring Data Redis v.1.6.x --><artifactId>redisson-spring-data-16</artifactId><!-- for Spring Data Redis v.1.7.x --><artifactId>redisson-spring-data-17</artifactId><!-- for Spring Data Redis v.1.8.x --><artifactId>redisson-spring-data-18</artifactId><!-- for Spring Data Redis v.2.0.x --><artifactId>redisson-spring-data-20</artifactId><!-- for Spring Data Redis v.2.1.x --><artifactId>redisson-spring-data-21</artifactId><!-- for Spring Data Redis v.2.2.x --><artifactId>redisson-spring-data-22</artifactId><!-- for Spring Data Redis v.2.3.x --><artifactId>redisson-spring-data-23</artifactId><!-- for Spring Data Redis v.2.4.x --><artifactId>redisson-spring-data-24</artifactId><!-- for Spring Data Redis v.2.5.x --><artifactId>redisson-spring-data-25</artifactId><!-- for Spring Data Redis v.2.6.x --><artifactId>redisson-spring-data-26</artifactId><!-- for Spring Data Redis v.2.7.x --><artifactId>redisson-spring-data-27</artifactId><!-- for Spring Data Redis v.3.0.x --><artifactId>redisson-spring-data-30</artifactId><!-- for Spring Data Redis v.3.1.x --><artifactId>redisson-spring-data-31</artifactId><!-- for Spring Data Redis v.3.2.x --><artifactId>redisson-spring-data-32</artifactId><!-- for Spring Data Redis v.3.3.x --><artifactId>redisson-spring-data-33</artifactId><!-- for Spring Data Redis v.3.4.x --><artifactId>redisson-spring-data-34</artifactId><version>xVERSIONx</version></dependency>
Gradle:
// for Spring Data Redis v.1.6.xcompile 'org.redisson:redisson-spring-data-16:xVERSIONx'// for Spring Data Redis v.1.7.xcompile 'org.redisson:redisson-spring-data-17:xVERSIONx'// for Spring Data Redis v.1.8.xcompile 'org.redisson:redisson-spring-data-18:xVERSIONx'// for Spring Data Redis v.2.0.xcompile 'org.redisson:redisson-spring-data-20:xVERSIONx'// for Spring Data Redis v.2.1.xcompile 'org.redisson:redisson-spring-data-21:xVERSIONx'// for Spring Data Redis v.2.2.xcompile 'org.redisson:redisson-spring-data-22:xVERSIONx'// for Spring Data Redis v.2.3.xcompile 'org.redisson:redisson-spring-data-23:xVERSIONx'// for Spring Data Redis v.2.4.xcompile 'org.redisson:redisson-spring-data-24:xVERSIONx'// for Spring Data Redis v.2.5.xcompile 'org.redisson:redisson-spring-data-25:xVERSIONx'// for Spring Data Redis v.2.6.xcompile 'org.redisson:redisson-spring-data-26:xVERSIONx'// for Spring Data Redis v.2.7.xcompile 'org.redisson:redisson-spring-data-27:xVERSIONx'// for Spring Data Redis v.3.0.xcompile 'org.redisson:redisson-spring-data-30:xVERSIONx'// for Spring Data Redis v.3.1.xcompile 'org.redisson:redisson-spring-data-31:xVERSIONx'// for Spring Data Redis v.3.2.xcompile 'org.redisson:redisson-spring-data-32:xVERSIONx'// for Spring Data Redis v.3.3.xcompile 'org.redisson:redisson-spring-data-33:xVERSIONx'// for Spring Data Redis v.3.4.xcompile 'org.redisson:redisson-spring-data-34:xVERSIONx'
- Register
RedissonConnectionFactoryin Spring context:
@Configurationpublic class RedissonSpringDataConfig {@Beanpublic 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);}}
Upgrade to Redisson PRO with advanced features.
Spring Session
Please note that Redis or Valkey 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.4.1</version></dependency><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-data-34</artifactId><version>xVERSIONx</version></dependency>
Gradle
compile 'org.springframework.session:spring-session-core:3.4.1'compile 'org.redisson:redisson-spring-data-34:xVERSIONx'
Spring Http Session configuration
Add configuration class which extends AbstractHttpSessionApplicationInitializer class:
@Configuration@EnableRedisHttpSessionpublic class SessionConfig extends AbstractHttpSessionApplicationInitializer {@Beanpublic 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);}}
Spring WebFlux’s Session configuration
Add configuration class which extends AbstractReactiveWebInitializer class:
@Configuration@EnableRedisWebSessionpublic class SessionConfig extends AbstractReactiveWebInitializer {@Beanpublic 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);}}
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.2.1</version></dependency>
Gradle:
compile 'org.springframework.session:spring-session-data-redis:3.4.1'
- Add Redisson Spring Data Redis library in classpath:
Maven:
<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-data-34</artifactId><version>xVERSIONx</version></dependency>
Gradle:
compile 'org.redisson:redisson-spring-data-34:xVERSIONx'
- Define follow properties in spring-boot settings
spring.session.store-type=redisspring.redis.redisson.file=classpath:redisson.yamlspring.session.timeout.seconds=900
Upgrade to Redisson PRO with advanced features.
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.
Spring Transaction Management
@Configuration@EnableTransactionManagementpublic class RedissonTransactionContextConfig {@Beanpublic TransactionalBean transactionBean() {return new TransactionalBean();}@Beanpublic 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 {@Autowiredprivate RedissonTransactionManager transactionManager;@Transactionalpublic void commitData() {RTransaction transaction = transactionManager.getCurrentTransaction();RMap<String, String> map = transaction.getMap("test1");map.put("1", "2");}}
Reactive Spring Transaction Management
@Configuration@EnableTransactionManagementpublic class RedissonReactiveTransactionContextConfig {@Beanpublic TransactionalBean transactionBean() {return new TransactionalBean();}@Beanpublic 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 {@Autowiredprivate ReactiveRedissonTransactionManager transactionManager;@Transactionalpublic 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();}}
Spring Cloud Stream
This feature is available only in Redisson PRO edition.
Redisson implements Spring Cloud Stream integration based on the reliable Stream structure for message delivery. To use Redis or Valkey 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>xVERSIONx</version></dependency>
Gradle:
compile 'pro.redisson:spring-cloud-stream-binder-redisson:xVERSIONx'
Compatible with Spring versions below.
| Spring Cloud Stream | Spring Cloud | Spring Boot |
|---|---|---|
| 4.2.x | 2024.0.x | 3.4.x |
| 4.1.x | 2023.0.x | 3.0.x - 3.3.x |
| 4.0.x | 2022.0.x | 3.0.x - 3.3.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) |
Receiving messages
Register the input binder (an event sink) for receiving messages as follows:
@Beanpublic 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
Publishing messages
Register the output binder (an event source) for publishing messages as follows:
@Beanpublic 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-channelspring.cloud.stream.bindings.feedSupplier-out-0.producer.useNativeEncoding=true
Spring Data Redis
Integrates Redisson with Spring Data Redis library. Implements Spring Data’s RedisConnectionFactory and ReactiveRedisConnectionFactory interfaces and allows to interact with Redis or Valkey through RedisTemplate, ReactiveRedisTemplate or ReactiveRedisOperations object.
Usage
- Add
redisson-spring-datadependency into your project:
Maven:
<dependency><groupId>org.redisson</groupId><!-- for Spring Data Redis v.1.6.x --><artifactId>redisson-spring-data-16</artifactId><!-- for Spring Data Redis v.1.7.x --><artifactId>redisson-spring-data-17</artifactId><!-- for Spring Data Redis v.1.8.x --><artifactId>redisson-spring-data-18</artifactId><!-- for Spring Data Redis v.2.0.x --><artifactId>redisson-spring-data-20</artifactId><!-- for Spring Data Redis v.2.1.x --><artifactId>redisson-spring-data-21</artifactId><!-- for Spring Data Redis v.2.2.x --><artifactId>redisson-spring-data-22</artifactId><!-- for Spring Data Redis v.2.3.x --><artifactId>redisson-spring-data-23</artifactId><!-- for Spring Data Redis v.2.4.x --><artifactId>redisson-spring-data-24</artifactId><!-- for Spring Data Redis v.2.5.x --><artifactId>redisson-spring-data-25</artifactId><!-- for Spring Data Redis v.2.6.x --><artifactId>redisson-spring-data-26</artifactId><!-- for Spring Data Redis v.2.7.x --><artifactId>redisson-spring-data-27</artifactId><!-- for Spring Data Redis v.3.0.x --><artifactId>redisson-spring-data-30</artifactId><!-- for Spring Data Redis v.3.1.x --><artifactId>redisson-spring-data-31</artifactId><!-- for Spring Data Redis v.3.2.x --><artifactId>redisson-spring-data-32</artifactId><!-- for Spring Data Redis v.3.3.x --><artifactId>redisson-spring-data-33</artifactId><!-- for Spring Data Redis v.3.4.x --><artifactId>redisson-spring-data-34</artifactId><version>xVERSIONx</version></dependency>
Gradle:
// for Spring Data Redis v.1.6.xcompile 'org.redisson:redisson-spring-data-16:xVERSIONx'// for Spring Data Redis v.1.7.xcompile 'org.redisson:redisson-spring-data-17:xVERSIONx'// for Spring Data Redis v.1.8.xcompile 'org.redisson:redisson-spring-data-18:xVERSIONx'// for Spring Data Redis v.2.0.xcompile 'org.redisson:redisson-spring-data-20:xVERSIONx'// for Spring Data Redis v.2.1.xcompile 'org.redisson:redisson-spring-data-21:xVERSIONx'// for Spring Data Redis v.2.2.xcompile 'org.redisson:redisson-spring-data-22:xVERSIONx'// for Spring Data Redis v.2.3.xcompile 'org.redisson:redisson-spring-data-23:xVERSIONx'// for Spring Data Redis v.2.4.xcompile 'org.redisson:redisson-spring-data-24:xVERSIONx'// for Spring Data Redis v.2.5.xcompile 'org.redisson:redisson-spring-data-25:xVERSIONx'// for Spring Data Redis v.2.6.xcompile 'org.redisson:redisson-spring-data-26:xVERSIONx'// for Spring Data Redis v.2.7.xcompile 'org.redisson:redisson-spring-data-27:xVERSIONx'// for Spring Data Redis v.3.0.xcompile 'org.redisson:redisson-spring-data-30:xVERSIONx'// for Spring Data Redis v.3.1.xcompile 'org.redisson:redisson-spring-data-31:xVERSIONx'// for Spring Data Redis v.3.2.xcompile 'org.redisson:redisson-spring-data-32:xVERSIONx'// for Spring Data Redis v.3.3.xcompile 'org.redisson:redisson-spring-data-33:xVERSIONx'// for Spring Data Redis v.3.4.xcompile 'org.redisson:redisson-spring-data-34:xVERSIONx'
- Register
RedissonConnectionFactoryin Spring context:
@Configurationpublic class RedissonSpringDataConfig {@Beanpublic 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);}}
Upgrade to Redisson PRO with advanced features.
