diff --git a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/ReactiveRedisOperationsSessionRepository.java b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/ReactiveRedisOperationsSessionRepository.java index 6df1ecad..f59c4d82 100644 --- a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/ReactiveRedisOperationsSessionRepository.java +++ b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/ReactiveRedisOperationsSessionRepository.java @@ -59,8 +59,6 @@ public class ReactiveRedisOperationsSessionRepository */ private Integer defaultMaxInactiveInterval; - private RedisFlushMode redisFlushMode = RedisFlushMode.ON_SAVE; - public ReactiveRedisOperationsSessionRepository(ReactiveRedisOperations sessionRedisOperations) { Assert.notNull(sessionRedisOperations, "sessionRedisOperations cannot be null"); this.sessionRedisOperations = sessionRedisOperations; @@ -85,10 +83,11 @@ public class ReactiveRedisOperationsSessionRepository /** * Sets the redis flush mode. Default flush mode is {@link RedisFlushMode#ON_SAVE}. * @param redisFlushMode the new redis flush mode + * @deprecated since 2.2.0 as support {@code IMMEDIATE} is removed */ + @Deprecated public void setRedisFlushMode(RedisFlushMode redisFlushMode) { Assert.notNull(redisFlushMode, "redisFlushMode cannot be null"); - this.redisFlushMode = redisFlushMode; } /** @@ -179,7 +178,6 @@ public class ReactiveRedisOperationsSessionRepository this.delta.put(RedisSessionMapper.MAX_INACTIVE_INTERVAL_KEY, (int) getMaxInactiveInterval().getSeconds()); this.delta.put(RedisSessionMapper.LAST_ACCESSED_TIME_KEY, getLastAccessedTime().toEpochMilli()); this.isNew = true; - this.flushImmediateIfNecessary(); } /** @@ -216,13 +214,13 @@ public class ReactiveRedisOperationsSessionRepository @Override public void setAttribute(String attributeName, Object attributeValue) { this.cached.setAttribute(attributeName, attributeValue); - putAndFlush(getAttributeKey(attributeName), attributeValue); + this.delta.put(getAttributeKey(attributeName), attributeValue); } @Override public void removeAttribute(String attributeName) { this.cached.removeAttribute(attributeName); - putAndFlush(getAttributeKey(attributeName), null); + this.delta.put(getAttributeKey(attributeName), null); } @Override @@ -233,7 +231,7 @@ public class ReactiveRedisOperationsSessionRepository @Override public void setLastAccessedTime(Instant lastAccessedTime) { this.cached.setLastAccessedTime(lastAccessedTime); - putAndFlush(RedisSessionMapper.LAST_ACCESSED_TIME_KEY, getLastAccessedTime().toEpochMilli()); + this.delta.put(RedisSessionMapper.LAST_ACCESSED_TIME_KEY, getLastAccessedTime().toEpochMilli()); } @Override @@ -244,7 +242,7 @@ public class ReactiveRedisOperationsSessionRepository @Override public void setMaxInactiveInterval(Duration interval) { this.cached.setMaxInactiveInterval(interval); - putAndFlush(RedisSessionMapper.MAX_INACTIVE_INTERVAL_KEY, (int) getMaxInactiveInterval().getSeconds()); + this.delta.put(RedisSessionMapper.MAX_INACTIVE_INTERVAL_KEY, (int) getMaxInactiveInterval().getSeconds()); } @Override @@ -261,17 +259,6 @@ public class ReactiveRedisOperationsSessionRepository return !getId().equals(this.originalSessionId); } - private void flushImmediateIfNecessary() { - if (ReactiveRedisOperationsSessionRepository.this.redisFlushMode == RedisFlushMode.IMMEDIATE) { - save(); - } - } - - private void putAndFlush(String a, Object v) { - this.delta.put(a, v); - flushImmediateIfNecessary(); - } - private Mono save() { return Mono.defer(() -> saveChangeSessionId().then(saveDelta()).doOnSuccess((aVoid) -> this.isNew = false)); } diff --git a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/server/EnableRedisWebSession.java b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/server/EnableRedisWebSession.java index 53c0fd1e..dc059568 100644 --- a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/server/EnableRedisWebSession.java +++ b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/server/EnableRedisWebSession.java @@ -93,7 +93,9 @@ public @interface EnableRedisWebSession { * Setting the value to {@code IMMEDIATE} will ensure that the any updates to the * Session are immediately written to the Redis instance. * @return the {@link RedisFlushMode} to use + * @deprecated since 2.2.0 as support {@code IMMEDIATE} is removed */ + @Deprecated RedisFlushMode redisFlushMode() default RedisFlushMode.ON_SAVE; } diff --git a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/server/RedisWebSessionConfiguration.java b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/server/RedisWebSessionConfiguration.java index f69e8b09..09b04d7a 100644 --- a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/server/RedisWebSessionConfiguration.java +++ b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/server/RedisWebSessionConfiguration.java @@ -61,8 +61,6 @@ public class RedisWebSessionConfiguration extends SpringWebSessionConfiguration private String redisNamespace = ReactiveRedisOperationsSessionRepository.DEFAULT_NAMESPACE; - private RedisFlushMode redisFlushMode = RedisFlushMode.ON_SAVE; - private ReactiveRedisConnectionFactory redisConnectionFactory; private RedisSerializer defaultRedisSerializer; @@ -80,7 +78,6 @@ public class RedisWebSessionConfiguration extends SpringWebSessionConfiguration if (StringUtils.hasText(this.redisNamespace)) { sessionRepository.setRedisKeyNamespace(this.redisNamespace); } - sessionRepository.setRedisFlushMode(this.redisFlushMode); return sessionRepository; } @@ -92,9 +89,9 @@ public class RedisWebSessionConfiguration extends SpringWebSessionConfiguration this.redisNamespace = namespace; } + @Deprecated public void setRedisFlushMode(RedisFlushMode redisFlushMode) { Assert.notNull(redisFlushMode, "redisFlushMode cannot be null"); - this.redisFlushMode = redisFlushMode; } @Autowired @@ -135,7 +132,6 @@ public class RedisWebSessionConfiguration extends SpringWebSessionConfiguration if (StringUtils.hasText(redisNamespaceValue)) { this.redisNamespace = this.embeddedValueResolver.resolveStringValue(redisNamespaceValue); } - this.redisFlushMode = attributes.getEnum("redisFlushMode"); } private ReactiveRedisTemplate createReactiveRedisTemplate() { diff --git a/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/ReactiveRedisOperationsSessionRepositoryTests.java b/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/ReactiveRedisOperationsSessionRepositoryTests.java index 8a572397..d26627f8 100644 --- a/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/ReactiveRedisOperationsSessionRepositoryTests.java +++ b/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/ReactiveRedisOperationsSessionRepositoryTests.java @@ -106,19 +106,6 @@ class ReactiveRedisOperationsSessionRepositoryTests { assertThat(ReflectionTestUtils.getField(this.repository, "defaultMaxInactiveInterval")).isEqualTo(600); } - @Test - void customRedisFlushMode() { - this.repository.setRedisFlushMode(RedisFlushMode.IMMEDIATE); - - assertThat(ReflectionTestUtils.getField(this.repository, "redisFlushMode")).isEqualTo(RedisFlushMode.IMMEDIATE); - } - - @Test - void nullRedisFlushMode() { - assertThatIllegalArgumentException().isThrownBy(() -> this.repository.setRedisFlushMode(null)) - .withMessage("redisFlushMode cannot be null"); - } - @Test void createSessionDefaultMaxInactiveInterval() { StepVerifier.create(this.repository.createSession()) diff --git a/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/config/annotation/web/server/RedisWebSessionConfigurationTests.java b/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/config/annotation/web/server/RedisWebSessionConfigurationTests.java index a55b2596..7726cbac 100644 --- a/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/config/annotation/web/server/RedisWebSessionConfigurationTests.java +++ b/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/config/annotation/web/server/RedisWebSessionConfigurationTests.java @@ -30,7 +30,6 @@ import org.springframework.data.redis.core.ReactiveRedisOperations; import org.springframework.data.redis.serializer.RedisSerializationContext; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.session.data.redis.ReactiveRedisOperationsSessionRepository; -import org.springframework.session.data.redis.RedisFlushMode; import org.springframework.session.data.redis.config.annotation.SpringSessionRedisConnectionFactory; import org.springframework.session.data.redis.config.annotation.SpringSessionRedisOperations; import org.springframework.test.util.ReflectionTestUtils; @@ -108,16 +107,6 @@ class RedisWebSessionConfigurationTests { .isEqualTo(MAX_INACTIVE_INTERVAL_IN_SECONDS); } - @Test - void customFlushMode() { - registerAndRefresh(RedisConfig.class, CustomFlushModeConfig.class); - - ReactiveRedisOperationsSessionRepository repository = this.context - .getBean(ReactiveRedisOperationsSessionRepository.class); - assertThat(repository).isNotNull(); - assertThat(ReflectionTestUtils.getField(repository, "redisFlushMode")).isEqualTo(RedisFlushMode.IMMEDIATE); - } - @Test void qualifiedConnectionFactoryRedisConfig() { registerAndRefresh(RedisConfig.class, QualifiedConnectionFactoryRedisConfig.class); @@ -260,11 +249,6 @@ class RedisWebSessionConfigurationTests { } - @EnableRedisWebSession(redisFlushMode = RedisFlushMode.IMMEDIATE) - static class CustomFlushModeConfig { - - } - @EnableRedisWebSession static class QualifiedConnectionFactoryRedisConfig {