Class LettuceConnection
- All Implemented Interfaces:
AutoCloseable
,DefaultedRedisConnection
,RedisCommands
,RedisCommandsProvider
,RedisConnection
,RedisConnectionCommands
,RedisGeoCommands
,RedisHashCommands
,RedisHyperLogLogCommands
,RedisKeyCommands
,RedisListCommands
,RedisPubSubCommands
,RedisScriptingCommands
,RedisServerCommands
,RedisSetCommands
,RedisStreamCommands
,RedisStringCommands
,RedisTxCommands
,RedisZSetCommands
- Direct Known Subclasses:
LettuceClusterConnection
RedisConnection
implementation on top of Lettuce Redis
client.
While the underlying Lettuce RedisClient and StatefulRedisConnection instances used by
LettuceConnection
are Thread-safe, this class itself is not Thread-safe. Therefore, instances of
LettuceConnection
should not be shared across multiple Threads when executing Redis commands and other
operations. If optimal performance is required by your application(s), then we recommend direct access to the
low-level, API provided by the underlying Lettuce client library (driver), where such Thread-safety guarantees can be
made. Simply call getNativeConnection()
and use the native resource as required.
- Author:
- Costin Leau, Jennifer Hickey, Christoph Strobl, Thomas Darimont, David Liu, Mark Paluch, Ninad Divadkar, Tamil Selvan, ihaohong, John Blum
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic interface
Strategy interface to control pipelining flush behavior.static interface
State object associated with flushing of the currently ongoing pipeline.Nested classes/interfaces inherited from interface org.springframework.data.redis.connection.RedisGeoCommands
RedisGeoCommands.DistanceUnit, RedisGeoCommands.GeoCommandArgs, RedisGeoCommands.GeoLocation<T>, RedisGeoCommands.GeoRadiusCommandArgs, RedisGeoCommands.GeoSearchCommandArgs, RedisGeoCommands.GeoSearchStoreCommandArgs
Nested classes/interfaces inherited from interface org.springframework.data.redis.connection.RedisListCommands
RedisListCommands.Direction, RedisListCommands.Position
Nested classes/interfaces inherited from interface org.springframework.data.redis.connection.RedisServerCommands
RedisServerCommands.FlushOption, RedisServerCommands.MigrateOption, RedisServerCommands.ShutdownOption
Nested classes/interfaces inherited from interface org.springframework.data.redis.connection.RedisStreamCommands
RedisStreamCommands.XAddOptions, RedisStreamCommands.XClaimOptions, RedisStreamCommands.XPendingOptions
Nested classes/interfaces inherited from interface org.springframework.data.redis.connection.RedisStringCommands
RedisStringCommands.BitOperation, RedisStringCommands.SetOption
Nested classes/interfaces inherited from interface org.springframework.data.redis.connection.RedisZSetCommands
RedisZSetCommands.Limit, RedisZSetCommands.Range, RedisZSetCommands.ZAddArgs
-
Constructor Summary
ConstructorDescriptionLettuceConnection
(long timeout, io.lettuce.core.RedisClient client) Instantiates a new lettuce connection.LettuceConnection
(io.lettuce.core.api.StatefulRedisConnection<byte[], byte[]> sharedConnection, long timeout, io.lettuce.core.AbstractRedisClient client, int defaultDbIndex) LettuceConnection
(io.lettuce.core.api.StatefulRedisConnection<byte[], byte[]> sharedConnection, long timeout, io.lettuce.core.RedisClient client) Instantiates a new lettuce connection.LettuceConnection
(io.lettuce.core.api.StatefulRedisConnection<byte[], byte[]> sharedConnection, LettuceConnectionProvider connectionProvider, long timeout, int defaultDbIndex) -
Method Summary
Modifier and TypeMethodDescriptionvoid
close()
Closes (or quits) the connection.Executes the commands in the pipeline and returns their result.commands()
GetRedisCommands
.protected org.springframework.dao.DataAccessException
void
discard()
Discard all commands issued afterRedisTxCommands.multi()
.protected LettuceSubscription
doCreateSubscription
(MessageListener listener, io.lettuce.core.pubsub.StatefulRedisPubSubConnection<byte[], byte[]> connection, LettuceConnectionProvider connectionProvider) Customization hook to create aLettuceSubscription
.protected io.lettuce.core.api.StatefulConnection<byte[],
byte[]> byte[]
echo
(byte[] message) Returnsmessage
via server roundtrip.exec()
Executes all queued commands in a transaction started withRedisTxCommands.multi()
.Native or raw execution of the given Redis command along with the given arguments.'Native' or 'raw' execution of the given command along-side the given arguments.GetRedisGeoCommands
.protected io.lettuce.core.cluster.api.async.RedisClusterAsyncCommands<byte[],
byte[]> protected io.lettuce.core.cluster.api.sync.RedisClusterCommands<byte[],
byte[]> io.lettuce.core.cluster.api.async.RedisClusterAsyncCommands<byte[],
byte[]> Returns the native connection (the underlying library/driver object).protected RedisSentinelConnection
getSentinelConnection
(RedisNode sentinel) GetRedisSentinelCommands
connected to given node.Returns the current subscription for this connection or null if the connection is not subscribed.GetRedisHashCommands
.protected boolean
Check if node is active by sending ping.boolean
isClosed()
Indicates whether the underlying connection is closed or not.boolean
Indicates whether the connection is currently pipelined or not.boolean
Indicates whether the connection is in "queue"(or "MULTI") mode or not.boolean
Indicates whether the current connection is subscribed (to at least one channel) or not.GetRedisKeyCommands
.GetRedisListCommands
.void
multi()
Mark the start of a transaction block.void
Activates the pipeline mode for this connection.ping()
Test connection.void
pSubscribe
(MessageListener listener, byte[]... patterns) Subscribes the connection to all channels matching the given patterns.publish
(byte[] channel, byte[] message) Publishes the given message to the given channel.void
select
(int dbIndex) Select the DB with given positivedbIndex
.GetRedisServerCommands
.GetRedisSetCommands
.void
setConvertPipelineAndTxResults
(boolean convertPipelineAndTxResults) Specifies if pipelined and transaction results should be converted to the expected data type.void
setPipeliningFlushPolicy
(LettuceConnection.PipeliningFlushPolicy pipeliningFlushPolicy) Configures the flushing policy when using pipelining.GetRedisStreamCommands
.GetRedisStringCommands
.void
subscribe
(MessageListener listener, byte[]... channels) Subscribes the connection to the given channels.protected io.lettuce.core.pubsub.StatefulRedisPubSubConnection<byte[],
byte[]> close()
the current connection and open a new pub/sub connection to the Redis server.void
unwatch()
Flushes all the previouslyRedisTxCommands.watch(byte[]...)
keys.void
watch
(byte[]... keys) Watch givenkeys
for modifications during transaction started withRedisTxCommands.multi()
.GetRedisZSetCommands
.Methods inherited from class org.springframework.data.redis.connection.AbstractRedisConnection
getSentinelConnection, hasRedisSentinelConfigured, setSentinelConfiguration
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.springframework.data.redis.connection.DefaultedRedisConnection
append, bgReWriteAof, bgSave, bitCount, bitCount, bitField, bitOp, bitPos, bLMove, bLPop, bRPop, bRPopLPush, bZPopMax, bZPopMin, copy, dbSize, decr, decrBy, del, dump, encodingOf, eval, evalSha, evalSha, exists, exists, expire, expireAt, flushAll, flushAll, flushDb, flushDb, geoAdd, geoAdd, geoAdd, geoDist, geoDist, geoHash, geoPos, geoRadius, geoRadius, geoRadiusByMember, geoRadiusByMember, geoRemove, geoSearch, geoSearchStore, get, getBit, getClientList, getClientName, getConfig, getDel, getEx, getRange, getSet, hDel, hExists, hGet, hGetAll, hIncrBy, hIncrBy, hKeys, hLen, hMGet, hMSet, hRandField, hRandField, hRandFieldWithValues, hRandFieldWithValues, hScan, hSet, hSetNX, hStrLen, hVals, idletime, incr, incrBy, incrBy, info, info, keys, killClient, lastSave, lIndex, lInsert, lLen, lMove, lPop, lPop, lPos, lPush, lPushX, lRange, lRem, lSet, lTrim, mGet, migrate, migrate, move, mSet, mSetNX, persist, pExpire, pExpireAt, pfAdd, pfCount, pfMerge, pSetEx, pTtl, pTtl, randomKey, refcount, rename, renameNX, replicaOf, replicaOfNoOne, resetConfigStats, restore, rewriteConfig, rPop, rPop, rPopLPush, rPush, rPushX, sAdd, save, scan, sCard, scriptExists, scriptFlush, scriptKill, scriptLoad, sDiff, sDiffStore, set, set, setBit, setClientName, setConfig, setEx, setNX, setRange, shutdown, shutdown, sInter, sInterStore, sIsMember, sMembers, sMIsMember, sMove, sort, sort, sPop, sPop, sRandMember, sRandMember, sRem, sScan, strLen, sUnion, sUnionStore, time, time, touch, ttl, ttl, type, unlink, xAck, xAdd, xClaim, xClaimJustId, xDel, xGroupCreate, xGroupCreate, xGroupDelConsumer, xGroupDestroy, xInfo, xInfoConsumers, xInfoGroups, xLen, xPending, xPending, xRange, xRange, xRead, xRead, xReadGroup, xReadGroup, xRevRange, xRevRange, xTrim, xTrim, zAdd, zAdd, zCard, zCount, zCount, zDiff, zDiffStore, zDiffWithScores, zIncrBy, zInter, zInterStore, zInterStore, zInterStore, zInterWithScores, zInterWithScores, zInterWithScores, zLexCount, zMScore, zPopMax, zPopMax, zPopMin, zPopMin, zRandMember, zRandMember, zRandMemberWithScore, zRandMemberWithScore, zRange, zRangeByLex, zRangeByScore, zRangeByScore, zRangeByScore, zRangeByScoreWithScores, zRangeStoreByLex, zRangeStoreByScore, zRangeStoreRevByLex, zRangeStoreRevByScore, zRangeWithScores, zRank, zRem, zRemRange, zRemRangeByLex, zRemRangeByScore, zRemRangeByScore, zRevRange, zRevRangeByLex, zRevRangeByScore, zRevRangeByScoreWithScores, zRevRangeWithScores, zRevRank, zScan, zScore, zUnion, zUnionStore, zUnionStore, zUnionStore, zUnionWithScores, zUnionWithScores, zUnionWithScores
Methods inherited from interface org.springframework.data.redis.connection.RedisGeoCommands
geoAdd, geoRadiusByMember
Methods inherited from interface org.springframework.data.redis.connection.RedisKeyCommands
restore, scan
Methods inherited from interface org.springframework.data.redis.connection.RedisListCommands
lPos
Methods inherited from interface org.springframework.data.redis.connection.RedisStreamCommands
xAck, xAdd, xAdd, xClaim, xDel, xGroupDelConsumer, xPending, xPending, xPending, xPending, xPending
Methods inherited from interface org.springframework.data.redis.connection.RedisStringCommands
bitPos
Methods inherited from interface org.springframework.data.redis.connection.RedisZSetCommands
zAdd, zAdd, zRangeByLex, zRangeByLex, zRangeByScore, zRangeByScore, zRangeByScore, zRangeByScoreWithScores, zRangeByScoreWithScores, zRangeByScoreWithScores, zRangeStoreByLex, zRangeStoreByScore, zRangeStoreRevByLex, zRangeStoreRevByScore, zRevRangeByLex, zRevRangeByLex, zRevRangeByScore, zRevRangeByScore, zRevRangeByScore, zRevRangeByScoreWithScores, zRevRangeByScoreWithScores, zRevRangeByScoreWithScores
-
Constructor Details
-
LettuceConnection
public LettuceConnection(long timeout, io.lettuce.core.RedisClient client) Instantiates a new lettuce connection.- Parameters:
timeout
- The connection timeout (in milliseconds)client
- TheRedisClient
to use when instantiating a native connection
-
LettuceConnection
public LettuceConnection(@Nullable io.lettuce.core.api.StatefulRedisConnection<byte[], byte[]> sharedConnection, long timeout, io.lettuce.core.RedisClient client) Instantiates a new lettuce connection.- Parameters:
sharedConnection
- A native connection that is shared with otherLettuceConnection
s. Will not be used for transactions or blocking operationstimeout
- The connection timeout (in milliseconds)client
- TheRedisClient
to use when making pub/sub, blocking, and tx connections
-
LettuceConnection
public LettuceConnection(@Nullable io.lettuce.core.api.StatefulRedisConnection<byte[], byte[]> sharedConnection, long timeout, @Nullable io.lettuce.core.AbstractRedisClient client, int defaultDbIndex) - Parameters:
sharedConnection
- A native connection that is shared with otherLettuceConnection
s. Should not be used for transactions or blocking operations.timeout
- The connection timeout (in milliseconds)client
- TheRedisClient
to use when making pub/sub connections.defaultDbIndex
- The db index to use along withRedisClient
when establishing a dedicated connection.- Since:
- 1.7
-
LettuceConnection
public LettuceConnection(@Nullable io.lettuce.core.api.StatefulRedisConnection<byte[], byte[]> sharedConnection, LettuceConnectionProvider connectionProvider, long timeout, int defaultDbIndex) - Parameters:
sharedConnection
- A native connection that is shared with otherLettuceConnection
s. Should not be used for transactions or blocking operations.connectionProvider
- connection provider to obtain and release native connections.timeout
- The connection timeout (in milliseconds)defaultDbIndex
- The db index to use along withRedisClient
when establishing a dedicated connection.- Since:
- 2.0
-
-
Method Details
-
convertLettuceAccessException
-
commands
Description copied from interface:RedisCommandsProvider
GetRedisCommands
.- Returns:
- never null.
-
geoCommands
Description copied from interface:RedisCommandsProvider
GetRedisGeoCommands
.- Returns:
- never null.
-
hashCommands
Description copied from interface:RedisCommandsProvider
GetRedisHashCommands
.- Returns:
- never null.
-
hyperLogLogCommands
Description copied from interface:RedisCommandsProvider
- Returns:
- never null.
-
keyCommands
Description copied from interface:RedisCommandsProvider
GetRedisKeyCommands
.- Returns:
- never null.
-
listCommands
Description copied from interface:RedisCommandsProvider
GetRedisListCommands
.- Returns:
- never null.
-
scriptingCommands
Description copied from interface:RedisCommandsProvider
- Returns:
- never null.
-
setCommands
Description copied from interface:RedisCommandsProvider
GetRedisSetCommands
.- Returns:
- never null.
-
serverCommands
Description copied from interface:RedisCommandsProvider
GetRedisServerCommands
.- Returns:
- never null.
-
streamCommands
Description copied from interface:RedisCommandsProvider
GetRedisStreamCommands
.- Returns:
- never null.
-
stringCommands
Description copied from interface:RedisCommandsProvider
GetRedisStringCommands
.- Returns:
- never null.
-
zSetCommands
Description copied from interface:RedisCommandsProvider
GetRedisZSetCommands
.- Returns:
- never null.
-
execute
Description copied from interface:RedisCommands
Native or raw execution of the given Redis command along with the given arguments.The command is executed as is, with as little interpretation as possible - it is up to the caller to take care of any processing of arguments or the result.
- Parameters:
command
- Rediscommand
to execute; must not be null.args
- optional array of command arguments; may be empty;- Returns:
- the execution result; may be null.
-
execute
@Nullable public Object execute(String command, @Nullable io.lettuce.core.output.CommandOutput commandOutputTypeHint, byte[]... args) 'Native' or 'raw' execution of the given command along-side the given arguments.- Parameters:
command
- Command to executecommandOutputTypeHint
- Type of Output to use, may be (may be null).args
- Possible command arguments (may be null)- Returns:
- execution result.
- See Also:
-
close
public void close()Description copied from interface:RedisConnection
Closes (or quits) the connection.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceRedisConnection
- Overrides:
close
in classAbstractRedisConnection
-
isClosed
public boolean isClosed()Description copied from interface:RedisConnection
Indicates whether the underlying connection is closed or not.- Returns:
- true if the connection is closed, false otherwise.
-
getNativeConnection
public io.lettuce.core.cluster.api.async.RedisClusterAsyncCommands<byte[],byte[]> getNativeConnection()Description copied from interface:RedisConnection
Returns the native connection (the underlying library/driver object).- Returns:
- underlying, native object
-
isQueueing
public boolean isQueueing()Description copied from interface:RedisConnection
Indicates whether the connection is in "queue"(or "MULTI") mode or not. When queueing, all commands are postponed until EXEC or DISCARD commands are issued. Since in queueing no results are returned, the connection will return NULL on all operations that interact with the data.- Returns:
- true if the connection is in queue/MULTI mode, false otherwise
-
isPipelined
public boolean isPipelined()Description copied from interface:RedisConnection
Indicates whether the connection is currently pipelined or not.- Returns:
- true if the connection is pipelined, false otherwise
- See Also:
-
openPipeline
public void openPipeline()Description copied from interface:RedisConnection
Activates the pipeline mode for this connection. When pipelined, all commands return null (the reply is read at the end throughRedisConnection.closePipeline()
. Calling this method when the connection is already pipelined has no effect. Pipelining is used for issuing commands without requesting the response right away but rather at the end of the batch. While somewhat similar to MULTI, pipelining does not guarantee atomicity - it only tries to improve performance when issuing a lot of commands (such as in batching scenarios).Note:
Consider doing some performance testing before using this feature since in many cases the performance benefits are minimal yet the impact on usage are not.- See Also:
-
closePipeline
Description copied from interface:RedisConnection
Executes the commands in the pipeline and returns their result. If the connection is not pipelined, an empty collection is returned.- Returns:
- the result of the executed commands.
-
echo
public byte[] echo(byte[] message) Description copied from interface:RedisConnectionCommands
Returnsmessage
via server roundtrip.- Parameters:
message
- the message to echo.- Returns:
- the message or null when used in pipeline / transaction.
- See Also:
-
ping
Description copied from interface:RedisConnectionCommands
Test connection.- Returns:
- Server response message - usually PONG. null when used in pipeline / transaction.
- See Also:
-
discard
public void discard()Description copied from interface:RedisTxCommands
Discard all commands issued afterRedisTxCommands.multi()
.- See Also:
-
exec
Description copied from interface:RedisTxCommands
Executes all queued commands in a transaction started withRedisTxCommands.multi()
.
If used along withRedisTxCommands.watch(byte[]...)
the operation will fail if any of watched keys has been modified.- Returns:
- List of replies for each executed command.
- See Also:
-
multi
public void multi()Description copied from interface:RedisTxCommands
Mark the start of a transaction block.
Commands will be queued and can then be executed by callingRedisTxCommands.exec()
or rolled back usingRedisTxCommands.discard()
- See Also:
-
select
public void select(int dbIndex) Description copied from interface:RedisConnectionCommands
Select the DB with given positivedbIndex
.- Parameters:
dbIndex
- the database index.- See Also:
-
unwatch
public void unwatch()Description copied from interface:RedisTxCommands
Flushes all the previouslyRedisTxCommands.watch(byte[]...)
keys.- See Also:
-
watch
public void watch(byte[]... keys) Description copied from interface:RedisTxCommands
Watch givenkeys
for modifications during transaction started withRedisTxCommands.multi()
.- Parameters:
keys
- must not be null.- See Also:
-
publish
Description copied from interface:RedisPubSubCommands
Publishes the given message to the given channel.- Parameters:
channel
- the channel to publish to. Must not be null.message
- message to publish. Must not be null.- Returns:
- the number of clients that received the message or null when used in pipeline / transaction.
- See Also:
-
getSubscription
Description copied from interface:RedisPubSubCommands
Returns the current subscription for this connection or null if the connection is not subscribed.- Returns:
- the current subscription, null if none is available.
-
isSubscribed
public boolean isSubscribed()Description copied from interface:RedisPubSubCommands
Indicates whether the current connection is subscribed (to at least one channel) or not.- Returns:
- true if the connection is subscribed, false otherwise
-
pSubscribe
Description copied from interface:RedisPubSubCommands
Subscribes the connection to all channels matching the given patterns. Once subscribed, a connection enters listening mode and can only subscribe to other channels or unsubscribe. No other commands are accepted until the connection is unsubscribed.Note that this operation is blocking and the current thread starts waiting for new messages immediately.
- Parameters:
listener
- message listener, must not be null.patterns
- channel name patterns, must not be null.- See Also:
-
subscribe
Description copied from interface:RedisPubSubCommands
Subscribes the connection to the given channels. Once subscribed, a connection enters listening mode and can only subscribe to other channels or unsubscribe. No other commands are accepted until the connection is unsubscribed.Note that this operation is blocking and the current thread starts waiting for new messages immediately.
- Parameters:
listener
- message listener, must not be null.channels
- channel names, must not be null.- See Also:
-
setConvertPipelineAndTxResults
public void setConvertPipelineAndTxResults(boolean convertPipelineAndTxResults) Specifies if pipelined and transaction results should be converted to the expected data type. If false, results ofclosePipeline()
andexec()
will be of the type returned by the Lettuce driver- Parameters:
convertPipelineAndTxResults
- Whether or not to convert pipeline and tx results
-
setPipeliningFlushPolicy
Configures the flushing policy when using pipelining.- Parameters:
pipeliningFlushPolicy
- the flushing policy to control when commands get written to the Redis connection.- Since:
- 2.3
- See Also:
-
LettuceConnection.PipeliningFlushPolicy.flushEachCommand()
openPipeline()
StatefulConnection.flushCommands()
-
switchToPubSub
protected io.lettuce.core.pubsub.StatefulRedisPubSubConnection<byte[],byte[]> switchToPubSub()close()
the current connection and open a new pub/sub connection to the Redis server.- Returns:
- never null.
-
doCreateSubscription
protected LettuceSubscription doCreateSubscription(MessageListener listener, io.lettuce.core.pubsub.StatefulRedisPubSubConnection<byte[], byte[]> connection, LettuceConnectionProvider connectionProvider) Customization hook to create aLettuceSubscription
.- Parameters:
listener
- theMessageListener
to notify.connection
- Pub/Sub connection.connectionProvider
- theLettuceConnectionProvider
for connection release.- Returns:
- a
LettuceSubscription
. - Since:
- 2.2
-
getConnection
protected io.lettuce.core.cluster.api.sync.RedisClusterCommands<byte[],byte[]> getConnection() -
getAsyncDedicatedConnection
protected io.lettuce.core.cluster.api.async.RedisClusterAsyncCommands<byte[],byte[]> getAsyncDedicatedConnection() -
doGetAsyncDedicatedConnection
protected io.lettuce.core.api.StatefulConnection<byte[],byte[]> doGetAsyncDedicatedConnection() -
isActive
Description copied from class:AbstractRedisConnection
Check if node is active by sending ping.- Overrides:
isActive
in classAbstractRedisConnection
- Returns:
-
getSentinelConnection
Description copied from class:AbstractRedisConnection
GetRedisSentinelCommands
connected to given node.- Overrides:
getSentinelConnection
in classAbstractRedisConnection
- Returns:
-