Redis
There is basic Redis support in Nauthilus. Most of the time it should be enough to use simple Redis keys and string values as arguments. Type conversion can be done within Lua itself.
dynamic_loader("nauthilus_redis")
local nauthilus_redis = require("nauthilus_redis")
Redis custom pools
In the init script of the Nauthilus server, you can define custom pools. For each Redis command, the first parameter is either a string called "default" or a connection handle. The "default" will use Redis servers from the Nauthilus server itself.
How to register a new pool?
Register a custom pool
Syntax
local result, error = nauthilus_redis.register_redis_pool(name, mode, config)
Parameters
name
(string) - Name of the new redis poolmode
(string) - Defines the type of redis configuration, Possible values are:-
- standalone - Configure a simple standalone Redis instance
- cluster - Configure a Redis cluster
- sentinel - Configure a Redis sentinel
- sentinel_replica - Configure a failover client primaryly for read requests
config
(table) - The configuration parameters for the new pool- address (string) - Address for the standalone system (master or replica)
- addresses (table) - List of addresses for clusters and sentinels
- master_name (string) - Master name is for sentinels
- sentinel_username (string) - Optional username for sentinels
- sentinel_password (string) - Optional password for sentinels
- username (string) - Optional username (used for standalone or sentinel setups)
- password (string) - Optional password (used for standalone or sentinel setups)
- db (number) - The database number in Redis
- pool_size (number) - Maximum number of connections in the pool
- min_idle_conns (number) - Minimum number of idle connections in the pool
- tls_enabled (boolean) - Activates TLS support
- tls_cert_file (string) - Optional path to a certificate file in PEM format
- tls_key_file (string) - Optional path to a key file in PEM format
Returns
result
(string) - "OK" is returned, if the pool was configured successfully.error
(string) - An error message, if an error occurs.
Example
local _, err_redis_reg = nauthilus_redis.register_redis_pool("my_custom_name", "sentinel", {
addresses = { "redis-sentinel-sentinel.ot-operators:26379" },
master_name = "myMaster",
password = "",
db = 3,
pool_size = 10,
min_idle_conns = 1,
tls_enabled = false
})
To get the handle of this pool, do the following in you Lua scripts:
local custom_pool, err_redis_client = nauthilus_redis.get_redis_connection("my_custom_name")
Now you can use custom_pool as the first argument to each Redis function.
You can define as many pools as you like. Currently supported is "standalone", "sentinel" and "cluster".
Documentation for the parameters is TODO.
In the following, I will use the name "handle" for a pool handler.
Functions
nauthilus_redis.redis_set
Stores a value in Redis with an optional expiration time.
Syntax
local result, error = nauthilus_redis.redis_set(handle, key, value, expiration)
Parameters
handle
(userdata/string): Redis connection handle or "default" for the default connectionkey
(string): The Redis key to store the value undervalue
(string): The value to storeexpiration
(number, optional): Time in seconds after which the key will expire
Returns
result
(string): "OK" if the operation was successfulerror
(string): An error message if the operation fails
Example
dynamic_loader("nauthilus_redis")
local nauthilus_redis = require("nauthilus_redis")
local result, error = nauthilus_redis.redis_set(handle, "key", "value", 3600)
nauthilus_redis.redis_incr
Increments a numeric value stored in Redis by one.
Syntax
local number, error = nauthilus_redis.redis_incr(handle, key)
Parameters
handle
(userdata/string): Redis connection handle or "default" for the default connectionkey
(string): The Redis key whose value should be incremented
Returns
number
(number): The new value after incrementingerror
(string): An error message if the operation fails
Example
dynamic_loader("nauthilus_redis")
local nauthilus_redis = require("nauthilus_redis")
local number, error = nauthilus_redis.redis_incr(handle, "key")
nauthilus_redis.redis_get
Retrieves a value from Redis by key.
Syntax
local result, error = nauthilus_redis.redis_get(handle, key)
Parameters
handle
(userdata/string): Redis connection handle or "default" for the default connectionkey
(string): The Redis key to retrieve the value for
Returns
result
(string): The value stored at the specified keyerror
(string): An error message if the operation fails
Example
dynamic_loader("nauthilus_redis")
local nauthilus_redis = require("nauthilus_redis")
local result, error = nauthilus_redis.redis_get(handle, "key")
nauthilus_redis.redis_expire
Sets an expiration time (in seconds) for a Redis key.
Syntax
local result, error = nauthilus_redis.redis_expire(handle, key, seconds)
Parameters
handle
(userdata/string): Redis connection handle or "default" for the default connectionkey
(string): The Redis key to set expiration forseconds
(number): The expiration time in seconds
Returns
result
(string): "OK" if the operation was successfulerror
(string): An error message if the operation fails
Example
dynamic_loader("nauthilus_redis")
local nauthilus_redis = require("nauthilus_redis")
local result, error = nauthilus_redis.redis_expire(handle, "key", 3600)
nauthilus_redis.redis_del
Deletes a key from Redis.
Syntax
local result, error = nauthilus_redis.redis_del(handle, key)
Parameters
handle
(userdata/string): Redis connection handle or "default" for the default connectionkey
(string): The Redis key to delete
Returns
result
(string): "OK" if the operation was successfulerror
(string): An error message if the operation fails
Example
dynamic_loader("nauthilus_redis")
local nauthilus_redis = require("nauthilus_redis")
local result, error = nauthilus_redis.redis_del(handle, "key")
nauthilus_redis.redis_rename
Renames a Redis key to a new name.
Syntax
local result, err = nauthilus_redis.redis_rename(handle, oldkey, newkey)
Parameters
handle
(userdata/string): Redis connection handle or "default" for the default connectionoldkey
(string): The current name of the Redis keynewkey
(string): The new name for the Redis key
Returns
result
(string): "OK" if the operation was successfulerr
(string): An error message if the operation fails
Example
dynamic_loader("nauthilus_redis")
local nauthilus_redis = require("nauthilus_redis")
local oldkey = "abc"
local newkey = "def"
local result, err = nauthilus_redis.redis_rename(handle, oldkey, newkey)
nauthilus_redis.redis_hget
Retrieves a value for a specific field from a Redis hash map.
Syntax
local value, error = nauthilus_redis.redis_hget(handle, key, field)
Parameters
handle
(userdata/string): Redis connection handle or "default" for the default connectionkey
(string): The Redis key of the hash mapfield
(string): The field name within the hash map
Returns
value
(string): The value of the specified fielderror
(string): An error message if the operation fails
Example
dynamic_loader("nauthilus_redis")
local nauthilus_redis = require("nauthilus_redis")
local redis_key = "some_key"
local already_sent_mail, err_redis_hget = nauthilus_redis.redis_hget(handle, redis_key, "send_mail")
nauthilus_redis.redis_hset
Sets a field value in a Redis hash map.
Syntax
local result, error = nauthilus_redis.redis_hset(handle, key, field, value)
Parameters
handle
(userdata/string): Redis connection handle or "default" for the default connectionkey
(string): The Redis key of the hash mapfield
(string): The field name within the hash mapvalue
(string/number): The value to set for the field
Returns
result
(number): 1 if field is a new field in the hash and value was set, 0 if field already exists and the value was updatederror
(string): An error message if the operation fails
Example
dynamic_loader("nauthilus_redis")
local nauthilus_redis = require("nauthilus_redis")
local redis_key = "some_key"
local result, err_redis_hset = nauthilus_redis.redis_hset(handle, redis_key, "send_mail", 1)
nauthilus_redis.redis_hdel
Deletes a field from a Redis hash map.
Syntax
local deleted, error = nauthilus_redis.redis_hdel(handle, key, field)
Parameters
handle
(userdata/string): Redis connection handle or "default" for the default connectionkey
(string): The Redis key of the hash mapfield
(string): The field name to delete from the hash map
Returns
deleted
(number): The number of fields that were removed (1 if successful, 0 if field did not exist)error
(string): An error message if the operation fails
Example
dynamic_loader("nauthilus_redis")
local nauthilus_redis = require("nauthilus_redis")
local result = {}
result.dovecot_session = "123"
local redis_key = "some_key"
local deleted, err_redis_hdel = nauthilus_redis.redis_hdel(handle, redis_key, result.dovecot_session)