Skip to content

CACHEDB_REDIS module

This module is an implementation of a cache system designed to work with a Redis server. It uses hiredis client library to connect to either a single Redis server instance, or to a Redis Server inside a Redis Cluster. It uses the Key-Value interface exported from the core.

  • memory costs are no longer on the server
  • many servers can be used inside a cluster, so the memory is virtually unlimited
  • the cache is 100% persistent. A restart of OpenSIPS server will not affect the DB. The Redis DB is also persistent so it can also be restarted without loss of information.
  • redis is an open-source project so it can be used to exchange data with various other applications
  • By creating a Redis Cluster, multiple OpenSIPS instances can easily share key-value information
  • keys (in key:value pairs) may not contain spaces or control characters

None.

The following libraries or applications must be installed before running OpenSIPS with this module loaded:

  • hiredis: On the latest Debian based distributions, hiredis can be installed by running ‘apt-get install libhiredis-dev’

Alternatively, if hiredis is not available on your OS repos, hiredis can be downloaded from: https://github.com/antirez/hiredis . Download the archive, extract sources, run make,sudo make install.

The urls of the server groups that OpenSIPS will connect to in order to use the from script cache_store,cache_fetch, etc operations. It can be set more than one time. The prefix part of the URL will be the identifier that will be used from the script.

Set cachedb_url parameter
...
modparam("cachedb_redis", "cachedb_url","redis:group1://localhost:6379/")
modparam("cachedb_redis", "cachedb_url","redis:cluster1://random_url:8888/")
...
Use Redis servers
...
cache_store("redis:group1","key","$ru value");
cache_fetch("redis:cluster1","key",$avp(10));
cache_remove("redis:cluster1","key");
...

This parameter specifies how many milliseconds OpenSIPS should wait for connecting to a Redis node.

Set connect_timeout parameter
...
# wait 1 seconds for Redis to connect
modparam("cachedb_redis", "connect_timeout",1000)
...

This parameter specifies how many milliseconds OpenSIPS should wait for a query response from a Redis node.

Set connect_timeout parameter
...
# wait 1 seconds for Redis queries
modparam("cachedb_redis", "query_timeout",1000)
...

The module does not export functions to be used in configuration script.

The cachedb_redis module allows to run RAW queries, thus taking full advantage of the capabilities of the back-end.

The query syntax is the typical REDIS one.

Here are a couple examples of running some Redis queries :

Redis Raw Query Examples
...
$var(my_hash) = "my_hash_name";
$var(my_key) = "my_key_name";
$var(my_value) = "my_key_value";
cache_raw_query("redis","HSET $var(my_hash) $var(my_key) $var(my_value)");
cache_raw_query("redis","HGET $var(my_hash) $var(my_key)","$avp(result)");
xlog("We have fetched $avp(result) \n");
...
$var(my_hash) = "my_hash_name";
$var(my_key1) = "my_key1_name";
$var(my_key2) = "my_key2_name";
$var(my_value1) = "my_key1_value";
$var(my_value2) = "my_key2_value";
cache_raw_query("redis","HSET $var(my_hash) $var(my_key1) $var(my_value1)");
cache_raw_query("redis","HSET $var(my_hash) $var(my_key2) $var(my_value2)");
cache_raw_query("redis","HGETALL $var(my_hash)","$avp(result)");
$var(it) = 0;
while ($(avp(result_final)[$var(it)]) != NULL) {
xlog("Multiple key reply: - we have fetched $(avp(result_final)[$var(it)]) \n");
$var(it) = $var(it) + 1;
}
...

Top contributors by DevScore(1), authored commits(2) and lines added/removed(3)

#NameDevScoreCommitsLines++Lines—
1.Vlad Paiu (@vladpaiu)3117142944
2.Razvan Crainea (@razvancrainea)12914758
3.Stefan Darius (@dariusstefan)7420528
4.jalung5116885
5.Liviu Chircu (@liviuchircu)422220
6.Kristian Høgh31131
7.Ezequiel Lovelle (@lovelle)31114
8.Julián Moreno Patiño3111
9.Bogdan-Andrei Iancu (@bogdan-iancu)2110

(1) DevScore = author_commits + author_lines_added / (project_lines_added / project_commits) + author_lines_deleted / (project_lines_deleted / project_commits)

(2) including any documentation-related commits, excluding merge commits

(3) ignoring whitespace edits, renamed files and auto-generated files

#NameCommit Activity
1.Stefan Darius (@dariusstefan)Jun 2026 - Jul 2026
2.Razvan Crainea (@razvancrainea)Feb 2012 - Jun 2026
3.Kristian HøghApr 2016 - Apr 2016
4.Julián Moreno PatiñoFeb 2016 - Feb 2016
5.Bogdan-Andrei Iancu (@bogdan-iancu)Oct 2014 - Oct 2014
6.Liviu Chircu (@liviuchircu)Mar 2014 - Jul 2014
7.jalungJun 2014 - Jun 2014
8.Vlad Paiu (@vladpaiu)Oct 2011 - Nov 2013
9.Ezequiel Lovelle (@lovelle)May 2013 - May 2013

(1) including any documentation-related commits, excluding merge commits

Last edited by: Razvan Crainea (@razvancrainea), Julián Moreno Patiño, Vlad Paiu (@vladpaiu).

All documentation files (i.e. .md extension) are licensed under the Creative Common License 4.0