Redis plugin for the Salt caching subsystem.
New in version 2017.7.0.
As Redis provides a simple mechanism for very fast key-value store, in order to privde the necessary features for the Salt caching subsystem, the following conventions are used:
/
, e.g.: $KEY_minions/alpha/stuff
where minions/alpha
is the bank name and stuff
is the key name.keys <pattern>
which is very inefficient as it goes through all the keys on the remote Redis server. Instead, each bank hierarchy has a Redis SET associated which stores the list of sub-banks. By default, these keys begin with $BANK_
.$BANKEYS_
.For example, to store the key my-key
under the bank root-bank/sub-bank/leaf-bank
, the following hierarchy will be built:
127.0.0.1:6379> SMEMBERS $BANK_root-bank 1) "sub-bank" 127.0.0.1:6379> SMEMBERS $BANK_root-bank/sub-bank 1) "leaf-bank" 127.0.0.1:6379> SMEMBERS $BANKEYS_root-bank/sub-bank/leaf-bank 1) "my-key" 127.0.0.1:6379> GET $KEY_root-bank/sub-bank/leaf-bank/my-key "my-value"
There are three types of keys stored:
$BANK_*
is a Redis SET containing the list of banks under the current bank$BANKEYS_*
is a Redis SET containing the list of keys under the current bank$KEY_*
keeps the value of the keyThese prefixes and the separator can be adjusted using the configuration options:
$BANK
$BANKEYS
$KEY
_
The connection details can be specified using:
localhost
6379
False
A list of host, port dictionaries pointing to cluster members. At least one is required but multiple nodes are better
cache.redis.cluster.startup_nodes
- host: redis-member-1
port: 6379
- host: redis-member-2
port: 6379
False
Some cluster providers restrict certain redis commands such as CONFIG for enhanced security. Set this option to true to skip checks that required advanced privileges.
Note
Most cloud hosted redis clusters will require this to be set to True
'0'
The database index.
Note
The database index must be specified as string not as integer value!
unix_socket_path:
New in version 2018.3.1.
Path to a UNIX socket for access. Overrides host / port.
Configuration Example:
cache.redis.host: localhost cache.redis.port: 6379 cache.redis.db: '0' cache.redis.password: my pass cache.redis.bank_prefix: #BANK cache.redis.bank_keys_prefix: #BANKEYS cache.redis.key_prefix: #KEY cache.redis.separator: '@'
Cluster Configuration Example:
cache.redis.cluster_mode: true cache.redis.cluster.skip_full_coverage_check: true cache.redis.cluster.startup_nodes: - host: redis-member-1 port: 6379 - host: redis-member-2 port: 6379 cache.redis.db: '0' cache.redis.password: my pass cache.redis.bank_prefix: #BANK cache.redis.bank_keys_prefix: #BANKEYS cache.redis.key_prefix: #KEY cache.redis.separator: '@'
Checks if the specified bank contains the specified key.
Fetch data from the Redis cache.
Remove the key from the cache bank with all the key content. If no key is specified, remove the entire bank with all keys and sub-banks inside. This function is using the Redis pipelining for best performance. However, when removing a whole bank, in order to re-create the tree, there are a couple of requests made. In total:
This is not quite optimal, as if we need to flush a bank having a very long list of sub-banks, the number of requests to build the sub-tree may grow quite big.
An improvement for this would be loading a custom Lua script in the Redis instance of the user (using the register_script
feature) and call it whenever we flush. This script would only need to build this sub-tree causing problems. It can be added later and the behaviour should not change as the user needs to explicitly allow Salt inject scripts in their Redis instance.
Lists entries stored in the specified bank.
Store the data in a Redis key.
© 2019 SaltStack.
Licensed under the Apache License, Version 2.0.
https://docs.saltstack.com/en/latest/ref/cache/all/salt.cache.redis_cache.html