Class RedisSessionStore
- java.lang.Object
-
- io.lettuce.core.pubsub.RedisPubSubAdapter<java.lang.String,java.lang.String>
-
- io.micronaut.configuration.lettuce.session.RedisSessionStore
-
- All Implemented Interfaces:
io.lettuce.core.pubsub.RedisPubSubListener<java.lang.String,java.lang.String>,io.micronaut.session.SessionStore<io.micronaut.configuration.lettuce.session.RedisSessionStore.RedisSession>,java.lang.AutoCloseable
@Singleton @Primary @Requires(property="micronaut.session.http.redis.enabled", value="true") @Replaces(io.micronaut.session.InMemorySessionStore.class) public class RedisSessionStore extends io.lettuce.core.pubsub.RedisPubSubAdapter<java.lang.String,java.lang.String> implements io.micronaut.session.SessionStore<io.micronaut.configuration.lettuce.session.RedisSessionStore.RedisSession>, java.lang.AutoCloseableAn implementation of the
SessionStoreinterface for Redis. Partially inspired by Spring Session.Session serialization
Sessions are stored within Redis hashes. The values contained within the sessions are serialized by the
ObjectSerializerconfigured byRedisHttpSessionConfiguration.getValueSerializer()which by default uses Java serialization. The Jackson Micronaut module includes the ability the configure JSON serialization as an alternative.Storage Details
Sessions are stored within Redis hashes by default prefixed with
micronaut:session:sessions:[SESSION_ID]. The expiry of the hash is set to 5 minutes after the actual expiry and expired sessions are simply not returned byfindSession(String)More exact session expiry entries are stored with keys
micronaut:session:expiry:[SESSION_ID]and current active sessions are tracked within sorted set at the keymicronaut:session:active-sessions. The entries within the set are sorted by expiry time and a scheduled job that runs every minute periodically touches the keys within the set that match the last minute thus ensuring Redis propagates expiry events in a timely manner.Redis Pub/Sub
This implementation requires the Redis instance to have keyspace event notification enabled with
notify-keyspace-events Egx. The implementation will attempt to enable this programmatically. This behaviour can be disabled withRedisHttpSessionConfiguration.isEnableKeyspaceEvents()- Since:
- 1.0
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringREDIS_SESSION_ENABLED
-
Constructor Summary
Constructors Constructor Description RedisSessionStore(io.micronaut.session.SessionIdGenerator sessionIdGenerator, RedisHttpSessionConfiguration sessionConfiguration, io.micronaut.context.BeanLocator beanLocator, io.micronaut.core.serialize.ObjectSerializer defaultSerializer, java.util.concurrent.ExecutorService scheduledExecutorService, io.micronaut.context.event.ApplicationEventPublisher eventPublisher)Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclose()java.util.concurrent.CompletableFuture<java.lang.Boolean>deleteSession(java.lang.String id)java.util.concurrent.CompletableFuture<java.util.Optional<io.micronaut.configuration.lettuce.session.RedisSessionStore.RedisSession>>findSession(java.lang.String id)io.micronaut.core.serialize.ObjectSerializergetValueSerializer()Getter.voidmessage(java.lang.String channel, java.lang.String message)voidmessage(java.lang.String pattern, java.lang.String channel, java.lang.String message)io.micronaut.configuration.lettuce.session.RedisSessionStore.RedisSessionnewSession()java.util.concurrent.CompletableFuture<io.micronaut.configuration.lettuce.session.RedisSessionStore.RedisSession>save(io.micronaut.configuration.lettuce.session.RedisSessionStore.RedisSession session)
-
-
-
Field Detail
-
REDIS_SESSION_ENABLED
public static final java.lang.String REDIS_SESSION_ENABLED
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
RedisSessionStore
public RedisSessionStore(io.micronaut.session.SessionIdGenerator sessionIdGenerator, RedisHttpSessionConfiguration sessionConfiguration, io.micronaut.context.BeanLocator beanLocator, io.micronaut.core.serialize.ObjectSerializer defaultSerializer, @Named("scheduled") java.util.concurrent.ExecutorService scheduledExecutorService, io.micronaut.context.event.ApplicationEventPublisher eventPublisher)Constructor.- Parameters:
sessionIdGenerator- sessionIdGeneratorsessionConfiguration- sessionConfigurationbeanLocator- beanLocatordefaultSerializer- The default value serializerscheduledExecutorService- scheduledExecutorServiceeventPublisher- eventPublisher
-
-
Method Detail
-
getValueSerializer
public io.micronaut.core.serialize.ObjectSerializer getValueSerializer()
Getter.- Returns:
- ObjectSerializer
-
message
public void message(java.lang.String channel, java.lang.String message)- Specified by:
messagein interfaceio.lettuce.core.pubsub.RedisPubSubListener<java.lang.String,java.lang.String>- Overrides:
messagein classio.lettuce.core.pubsub.RedisPubSubAdapter<java.lang.String,java.lang.String>
-
message
public void message(java.lang.String pattern, java.lang.String channel, java.lang.String message)- Specified by:
messagein interfaceio.lettuce.core.pubsub.RedisPubSubListener<java.lang.String,java.lang.String>- Overrides:
messagein classio.lettuce.core.pubsub.RedisPubSubAdapter<java.lang.String,java.lang.String>
-
newSession
public io.micronaut.configuration.lettuce.session.RedisSessionStore.RedisSession newSession()
- Specified by:
newSessionin interfaceio.micronaut.session.SessionStore<io.micronaut.configuration.lettuce.session.RedisSessionStore.RedisSession>
-
findSession
public java.util.concurrent.CompletableFuture<java.util.Optional<io.micronaut.configuration.lettuce.session.RedisSessionStore.RedisSession>> findSession(java.lang.String id)
- Specified by:
findSessionin interfaceio.micronaut.session.SessionStore<io.micronaut.configuration.lettuce.session.RedisSessionStore.RedisSession>
-
deleteSession
public java.util.concurrent.CompletableFuture<java.lang.Boolean> deleteSession(java.lang.String id)
- Specified by:
deleteSessionin interfaceio.micronaut.session.SessionStore<io.micronaut.configuration.lettuce.session.RedisSessionStore.RedisSession>
-
save
public java.util.concurrent.CompletableFuture<io.micronaut.configuration.lettuce.session.RedisSessionStore.RedisSession> save(io.micronaut.configuration.lettuce.session.RedisSessionStore.RedisSession session)
- Specified by:
savein interfaceio.micronaut.session.SessionStore<io.micronaut.configuration.lettuce.session.RedisSessionStore.RedisSession>
-
close
@PreDestroy public void close()
- Specified by:
closein interfacejava.lang.AutoCloseable
-
-