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.
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
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
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
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
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
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
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
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
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
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)
nauthilus_redis.redis_hlen
Gets the number of fields in a Redis hash map.
Syntax
local length, error = nauthilus_redis.redis_hlen(handle, key)
Parameters
handle(userdata/string): Redis connection handle or "default" for the default connectionkey(string): The Redis key of the hash map
Returns
length(number): The number of fields in the hash maperror(string): An error message if the operation fails
Example
local nauthilus_redis = require("nauthilus_redis")
local redis_key = "some_key"
local length, err_redis_hlen = nauthilus_redis.redis_hlen(handle, redis_key)
nauthilus_redis.redis_hgetall
Retrieves all fields and values from a Redis hash map.
Syntax
local hash_table, error = nauthilus_redis.redis_hgetall(handle, key)
Parameters
handle(userdata/string): Redis connection handle or "default" for the default connectionkey(string): The Redis key of the hash map
Returns
hash_table(table): A Lua table containing all field-value pairs from the hash maperror(string): An error message if the operation fails
Example
local nauthilus_redis = require("nauthilus_redis")
local redis_key = "some_key"
local all_sessions, err_redis_hgetall = nauthilus_redis.redis_hgetall(handle, redis_key)
nauthilus_redis.redis_hincrby
Increments the integer value of a field in a Redis hash map by a specified amount.
Syntax
local new_value, error = nauthilus_redis.redis_hincrby(handle, key, field, increment)
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 mapincrement(number): The integer value to increment by
Returns
new_value(number): The new value of the field after the increment operationerror(string): An error message if the operation fails
Example
local nauthilus_redis = require("nauthilus_redis")
local key = "some_key"
local field = "some_field"
local increment = 1
local new_value, err = nauthilus_redis.redis_hincrby(handle, key, field, increment)
nauthilus_redis.redis_hincrbyfloat
Increments the floating-point value of a field in a Redis hash map by a specified amount.
Syntax
local new_value, error = nauthilus_redis.redis_hincrbyfloat(handle, key, field, increment)
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 mapincrement(number): The floating-point value to increment by
Returns
new_value(string): The new value of the field after the increment operation (as a string representation of the float)error(string): An error message if the operation fails
Example
local nauthilus_redis = require("nauthilus_redis")
local key = "some_key"
local field = "some_field"
local increment = 1.3
local new_value, err = nauthilus_redis.redis_hincrbyfloat(handle, key, field, increment)
nauthilus_redis.redis_hexists
Checks if a field exists in a Redis hash map.
Syntax
local exists, error = nauthilus_redis.redis_hexists(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 check for existence
Returns
exists(number): 1 if the field exists in the hash, 0 if it does not existerror(string): An error message if the operation fails
Example
local nauthilus_redis = require("nauthilus_redis")
local key = "some_key"
local field = "some_field"
local exists, err = nauthilus_redis.redis_hexists(handle, key, field)
nauthilus_redis.redis_sadd
Adds a member to a Redis set.
Syntax
local added, error = nauthilus_redis.redis_sadd(handle, key, value)
Parameters
handle(userdata/string): Redis connection handle or "default" for the default connectionkey(string): The Redis key of the setvalue(string): The value to add to the set
Returns
added(number): 1 if the member was added to the set, 0 if it was already a membererror(string): An error message if the operation fails
Example
local nauthilus_redis = require("nauthilus_redis")
local key = "some_key"
local value = "some_value"
local added, err = nauthilus_redis.redis_sadd(handle, key, value)
nauthilus_redis.redis_sismember
Checks if a value is a member of a Redis set.
Syntax
local is_member, error = nauthilus_redis.redis_sismember(handle, key, value)
Parameters
handle(userdata/string): Redis connection handle or "default" for the default connectionkey(string): The Redis key of the setvalue(string): The value to check for membership
Returns
is_member(number): 1 if the value is a member of the set, 0 if it is noterror(string): An error message if the operation fails
Example
local nauthilus_redis = require("nauthilus_redis")
local key = "some_key"
local value = "some_value"
local is_member, err = nauthilus_redis.redis_sismember(handle, key, value)
nauthilus_redis.redis_smembers
Retrieves all members from a Redis set.
Syntax
local members, error = nauthilus_redis.redis_smembers(handle, key)
Parameters
handle(userdata/string): Redis connection handle or "default" for the default connectionkey(string): The Redis key of the set