Infinispan Server includes an endpoint that implements the RESP3 protocol and allows you to interact with remote caches using Redis clients.
include::../topics/proc_server_configuring_resp.adoc :leveloffset: +2
1. Mapping caches to Redis logical databases
Use the cache aliases
configuration attributes to map caches to Redis logical databases.
The default respCache
is mapped to logical database 0
.
Infinispan can use multiple logical databases even in clustered mode, as opposed to Redis which only supports database
|
1.1. Differences between Infinispan and Redis implementation
Infinispan provides different guarantees compared to Redis for some functionalities. This chapter summarizes the differences and, when possible, alternative configurations for a similar behavior.
1.1.1. Isolation
Redis utilizes a single thread to handle user requests, which provides serializable isolation and atomic behavior for multi-key requests.
Infinispan provides a relaxed isolation level, which is configurable.
Concurrent requests might perceive a partial result for commands that access multiple keys, such as MSET
, where only a subset of the keys were inserted in the cache before the operation finishes.
The only alternative in Infinispan for an atomic behavior is to submit multi-keys operations within a MULTI…EXEC
block.
However, this requires configuring the default cache with transactional capabilities.
Infinispan does not provide serializable transactions. See the cache configuration guide for more information. |
1.1.2. Transactions
Applications utilizing the MULTI…EXEC
commands should update the default cache configuration to enable transactional capabilities.
Transactions in Redis do not have the concept of rollback to revert in case of failures.
Infinispan provides ACID transactions and rollback in case of failures.
Additionally, the transactions are distributed in cluster mode and can operate across many slots.
The recommended configuration utilizes |
1.2. Redis commands
The Infinispan RESP endpoint implements the following Redis commands:
-
This commands includes all required fields, but some fields are set to 0
as they do not apply to Infinispan. -
See the MULTI command.
-
This command behaves like FLUSHDB
and flushes only the current database. -
This command is deprecated. Use the SET
command with the appropriate flags instead. -
This implementation attempts to return all attributes that a real Redis server returns. However, in most cases, the values are set to 0
because they cannot be retrieved, or don’t apply to Infinispan. -
The current implementation has a time complexity of O(N), where N is the size of the list. -
The current implementation is atomic for rotation when the source and destination are the same list. For different lists, there is relaxed consistency for concurrent operations or failures unless the resp cache is configured to use transactions. -
This command will return the memory used by the key and the value. It doesn’t include the memory used by additional metadata associated with the entry. -
This command will return the same fields as a real Redis server, but all values will be set to 0
. -
This command always returns an empty list of modules. -
The current implementation has a relaxed isolation level. Redis offers serializable transactions. -
This command is deprecated. Use the SET
command with the appropriate flags. -
Cursors are reaped in case they have not been used within a timeout. The timeout is 5 minutes. -
Infinispan allows the SELECT command both in local and clustered mode, unlike Redis Cluster which forbids use of this command and only supports database zero. -
This command is deprecated. Use the SET
command with the appropriate flags instead. -
This command is deprecated. Use the SET
command with the appropriate flags instead. -
The current implementation has a relaxed isolation level. A client can see the source and destination set without the element. The operation is not atomic, it could remove the element from source and fails to insert to the target set. -
This command is deprecated. Use the GETRANGE
command instead.