Interface RedisCacheWriter

All Superinterfaces:
CacheStatisticsProvider

public interface RedisCacheWriter extends CacheStatisticsProvider
RedisCacheWriter provides low-level access to Redis commands (SET, SETNX, GET, EXPIRE,...) used for caching.

The RedisCacheWriter may be shared by multiple cache implementations and is responsible for reading/writing binary data from/to Redis. The implementation honors potential cache lock flags that might be set.

The default RedisCacheWriter implementation can be customized with BatchStrategy to tune performance behavior.

Since:
2.0
Author:
Christoph Strobl, Mark Paluch, John Blum
  • Method Details

    • nonLockingRedisCacheWriter

      static RedisCacheWriter nonLockingRedisCacheWriter(RedisConnectionFactory connectionFactory)
      Create new RedisCacheWriter without locking behavior.
      Parameters:
      connectionFactory - must not be null.
      Returns:
      new instance of DefaultRedisCacheWriter.
    • nonLockingRedisCacheWriter

      static RedisCacheWriter nonLockingRedisCacheWriter(RedisConnectionFactory connectionFactory, BatchStrategy batchStrategy)
      Create new RedisCacheWriter without locking behavior.
      Parameters:
      connectionFactory - must not be null.
      batchStrategy - must not be null.
      Returns:
      new instance of DefaultRedisCacheWriter.
      Since:
      2.6
    • lockingRedisCacheWriter

      static RedisCacheWriter lockingRedisCacheWriter(RedisConnectionFactory connectionFactory)
      Create new RedisCacheWriter with locking behavior.
      Parameters:
      connectionFactory - must not be null.
      Returns:
      new instance of DefaultRedisCacheWriter.
    • lockingRedisCacheWriter

      static RedisCacheWriter lockingRedisCacheWriter(RedisConnectionFactory connectionFactory, BatchStrategy batchStrategy)
      Create new RedisCacheWriter with locking behavior.
      Parameters:
      connectionFactory - must not be null.
      batchStrategy - must not be null.
      Returns:
      new instance of DefaultRedisCacheWriter.
      Since:
      2.6
    • lockingRedisCacheWriter

      static RedisCacheWriter lockingRedisCacheWriter(RedisConnectionFactory connectionFactory, Duration sleepTime, RedisCacheWriter.TtlFunction lockTtlFunction, BatchStrategy batchStrategy)
      Create new RedisCacheWriter with locking behavior.
      Parameters:
      connectionFactory - must not be null.
      sleepTime - sleep time between lock access attempts, must not be null.
      lockTtlFunction - TTL function to compute the Lock TTL. The function is called with contextual keys and values (such as the cache name on cleanup or the actual key/value on put requests); must not be null.
      batchStrategy - must not be null.
      Returns:
      new instance of DefaultRedisCacheWriter.
      Since:
      3.2
    • get

      @Nullable byte[] get(String name, byte[] key)
      Get the binary value representation from Redis stored for the given key.
      Parameters:
      name - must not be null.
      key - must not be null.
      Returns:
      null if key does not exist.
      See Also:
    • get

      @Nullable default byte[] get(String name, byte[] key, @Nullable Duration ttl)
      Get the binary value representation from Redis stored for the given key and set the given TTL expiration for the cache entry.
      Parameters:
      name - must not be null.
      key - must not be null.
      ttl - Duration specifying the expiration timeout for the cache entry.
      Returns:
      null if key does not exist or has expired.
    • supportsAsyncRetrieve

      default boolean supportsAsyncRetrieve()
      Determines whether the asynchronous retrieve(String, byte[]) and retrieve(String, byte[], Duration) cache operations are supported by the implementation.

      The main factor for whether the retrieve operation can be supported will primarily be determined by the Redis driver in use at runtime.

      Returns false by default. This will have an effect of RedisCache.retrieve(Object) and RedisCache.retrieve(Object, Supplier) throwing an UnsupportedOperationException.

      Returns:
      true if asynchronous retrieve operations are supported by the implementation.
      Since:
      3.2
    • retrieve

      default CompletableFuture<byte[]> retrieve(String name, byte[] key)
      Asynchronously retrieves the value to which the RedisCache maps the given key.

      This operation is non-blocking.

      Parameters:
      name - String with the name of the RedisCache.
      key - key mapped to the value in the RedisCache.
      Returns:
      the value to which the RedisCache maps the given key.
      Since:
      3.2
      See Also:
    • retrieve

      CompletableFuture<byte[]> retrieve(String name, byte[] key, @Nullable Duration ttl)
      Asynchronously retrieves the value to which the RedisCache maps the given key setting the TTL expiration for the cache entry.

      This operation is non-blocking.

      Parameters:
      name - String with the name of the RedisCache.
      key - key mapped to the value in the RedisCache.
      ttl - Duration specifying the expiration timeout for the cache entry.
      Returns:
      the value to which the RedisCache maps the given key.
      Since:
      3.2
    • put

      void put(String name, byte[] key, byte[] value, @Nullable Duration ttl)
      Write the given key/value pair to Redis and set the expiration time if defined.
      Parameters:
      name - The cache name must not be null.
      key - The key for the cache entry. Must not be null.
      value - The value stored for the key. Must not be null.
      ttl - Optional expiration time. Can be null.
    • store

      CompletableFuture<Void> store(String name, byte[] key, byte[] value, @Nullable Duration ttl)
      Store the given key/value pair asynchronously to Redis and set the expiration time if defined.

      This operation is non-blocking.

      Parameters:
      name - The cache name must not be null.
      key - The key for the cache entry. Must not be null.
      value - The value stored for the key. Must not be null.
      ttl - Optional expiration time. Can be null.
      Since:
      3.2
    • putIfAbsent

      @Nullable byte[] putIfAbsent(String name, byte[] key, byte[] value, @Nullable Duration ttl)
      Write the given value to Redis if the key does not already exist.
      Parameters:
      name - The cache name must not be null.
      key - The key for the cache entry. Must not be null.
      value - The value stored for the key. Must not be null.
      ttl - Optional expiration time. Can be null.
      Returns:
      null if the value has been written, the value stored for the key if it already exists.
    • remove

      void remove(String name, byte[] key)
      Remove the given key from Redis.
      Parameters:
      name - The cache name must not be null.
      key - The key for the cache entry. Must not be null.
    • clean

      void clean(String name, byte[] pattern)
      Remove all keys following the given pattern.
      Parameters:
      name - The cache name must not be null.
      pattern - The pattern for the keys to remove. Must not be null.
    • clearStatistics

      void clearStatistics(String name)
      Reset all statistics counters and gauges for this cache.
      Since:
      2.4
    • withStatisticsCollector

      RedisCacheWriter withStatisticsCollector(CacheStatisticsCollector cacheStatisticsCollector)
      Obtain a RedisCacheWriter using the given CacheStatisticsCollector to collect metrics.
      Parameters:
      cacheStatisticsCollector - must not be null.
      Returns:
      new instance of RedisCacheWriter.