Dear Kamailio Community,
I encounter an issue when using db_redis with the usrloc module. Below are my relevant Kamailio configurations:
# kamailio 6.1.1
modparam("db_redis", "schema_path", "/usr/share/kamailio/db_redis") modparam("db_redis", "keys", "location=entry:ruid&usrdom:username,domain&timer:expires")
modparam("usrloc", "timer_interval", 60) modparam("usrloc", "timer_procs", 1) modparam("usrloc", "use_domain", 0) modparam("usrloc", "db_url", "redis://localhost:6379/0") modparam("usrloc", "db_mode", 3)
After user 1001 successfully registers, I execute the KEYS * command in redis-cli, and the output is as follows:
redis-cli KEYS *
1) "location::index::timer" 2) "location:entry::uloc-69cb7f3b-499e-1" 3) "location:timer::2026-03-31 16:01:59"
My question: I cannot find the corresponding user location information via the username in redis-cli.
Could anyone help me solve this problem?
Thank you very much!
Best regards,
Log is as follows, where is the problem?
INFO: db_redis [redis_connection.c:281]: db_redis_connect(): connecting to redis at localhost:6379 DEBUG: db_redis [redis_connection.c:347]: db_redis_connect(): connection opened to redis://localhost:6379/0 DEBUG: db_redis [redis_connection.c:414]: db_redis_connect(): connection opened to redis://localhost:6379/0 DEBUG: db_redis [redis_connection.c:479]: db_redis_new_connection(): connection opened to redis://localhost:6379/0 DEBUG: db_redis [redis_dbase.c:2926]: db_redis_query(): querying prefix (table) 'version' DEBUG: db_redis [redis_dbase.c:211]: db_redis_return_version(): get table version DEBUG: <core> [lib/srdb1/db_res.c:122]: db_new_result(): allocate 56 bytes for result set at 0x7f71f88639e0 DEBUG: <core> [lib/srdb1/db_res.c:188]: db_allocate_rows(): allocate 16 bytes for rows at 0x7f71f8863a90 DEBUG: <core> [lib/srdb1/db_res.c:158]: db_allocate_columns(): allocate 8 bytes for result names at 0x7f71f8863b10 DEBUG: <core> [lib/srdb1/db_res.c:168]: db_allocate_columns(): allocate 4 bytes for result types at 0x7f71f8863b90 DEBUG: <core> [lib/srdb1/db_row.c:118]: db_allocate_row(): allocate 32 bytes for row values at 0x7f71f8863c10 DEBUG: db_redis [redis_dbase.c:251]: db_redis_return_version(): returning short-cut table version 9 for table 'location' 0(15894) DEBUG: db_redis [redis_dbase.c:3592]: db_redis_f DEBUG: <core> [lib/srdb1/db_res.c:81]: db_free_columns(): freeing 1 columns DEBUG: <core> [lib/srdb1/db_res.c:99]: db_free_columns(): freeing result names at 0x7f71f8863b10 DEBUG: <core> [lib/srdb1/db_res.c:104]: db_free_columns(): freeing result types at 0x7f71f8863b90 DEBUG: <core> [lib/srdb1/db_res.c:54]: db_free_rows(): freeing 1 rows DEBUG: <core> [lib/srdb1/db_row.c:96]: db_free_row(): freeing row values at 0x7f71f8863c10 DEBUG: <core> [lib/srdb1/db_res.c:62]: db_free_rows(): freeing rows at 0x7f71f8863a90 DEBUG: <core> [lib/srdb1/db_res.c:140]: db_free_result(): freeing result set at 0x7f71f88639e0 DEBUG: db_redis [redis_dbase.c:2926]: db_redis_query(): querying prefix (table) 'location' DEBUG: db_redis [redis_dbase.c:676]: db_redis_build_query_keys(): build query keys DEBUG: db_redis [redis_dbase.c:328]: db_redis_find_query_key(): checking for existence of entry key 'ruid' in query DEBUG: db_redis [redis_dbase.c:439]: db_redis_find_query_key(): key 'ruid' for type 'entry' not found, unable to use this type DEBUG: db_redis [redis_dbase.c:711]: db_redis_build_query_keys(): no direct entry key found, checking type keys DEBUG: db_redis [redis_dbase.c:717]: db_redis_build_query_keys(): checking type 'usrdom' DEBUG: db_redis [redis_dbase.c:328]: db_redis_find_query_key(): checking for existence of entry key 'username' in query DEBUG: db_redis [redis_dbase.c:348]: db_redis_find_query_key(): found key in entry key DEBUG: db_redis [redis_dbase.c:140]: db_redis_val2str(): converting string value 'dummy_user' with len 10 to str DEBUG: db_redis [redis_dbase.c:430]: db_redis_find_query_key(): entry key so far is 'location:usrdom::dummy_user' DEBUG: db_redis [redis_dbase.c:328]: db_redis_find_query_key(): checking for existence of entry key 'domain' in query DEBUG: db_redis [redis_dbase.c:439]: db_redis_find_query_key(): key 'domain' for type 'usrdom' not found, unable to use this type DEBUG: db_redis [redis_dbase.c:717]: db_redis_build_query_keys(): checking type 'timer' DEBUG: db_redis [redis_dbase.c:328]: db_redis_find_query_key(): checking for existence of entry key 'expires' in query DEBUG: db_redis [redis_dbase.c:439]: db_redis_find_query_key(): key 'expires' for type 'timer' not found, unable to use this type DEBUG: db_redis [redis_dbase.c:2975]: db_redis_query(): unable to build query keys, falling back to full table scan DEBUG: <core> [lib/srdb1/db_res.c:122]: db_new_result(): allocate 56 bytes for result set at 0x7f71f8863a60 DEBUG: <core> [lib/srdb1/db_res.c:158]: db_allocate_columns(): allocate 8 bytes for result names at 0x7f71f8863b10 DEBUG: <core> [lib/srdb1/db_res.c:168]: db_allocate_columns(): allocate 4 bytes for result types at 0x7f71f8863b90
...
WARNING: db_redis [redis_dbase.c:1665]: db_redis_perform_query(): performing full table scan on table 'location' while doing the query WARNING: db_redis [redis_dbase.c:1669]: db_redis_perform_query(): scan key 0 is 'expires' WARNING: db_redis [redis_dbase.c:1669]: db_redis_perform_query(): scan key 1 is 'partition' WARNING: db_redis [redis_dbase.c:1669]: db_redis_perform_query(): scan key 2 is 'keepalive'