Installing and Updating an Extension
Redis supports modules to extend core functionality with new data types, commands, or algorithms. These modules behave like plugins in other systems and are loaded at server startup. Examples include RedisBloom, RedisTimeSeries, RedisJSON, and RedisSearch.
In Elestio-hosted Redis instances or any Docker Compose-based setup, modules can be loaded by specifying them in the service configuration. This guide walks through how to install, load, and manage Redis modules using Docker Compose, along with common issues and best practices.
Installing and Enabling Redis Modules
Redis modules are typically compiled as shared object (.so) files and must be loaded at server startup using the --loadmodule
option. These module files are mounted into the container and referenced from within the container’s file system. To use a module like RedisBloom in a Docker Compose setup:
Update docker-compose.yml
Mount the module file into the container and load it:
services:
redis:
image: redis/redis-stack-server:latest
volumes:
- ./modules/redisbloom.so:/data/redisbloom.so
command: ["redis-server", "--loadmodule", "/data/redisbloom.so"]
ports:
- "6379:6379"
Here:
-
./modules/redisbloom.so
is the local path on your host machine. -
/data/redisbloom.so
is the path inside the container.
Make sure the .so file exists in the specified directory before running Docker Compose.
Restart the Redis Service
After updating the Compose file, restart the service:
docker-compose down
docker-compose up -d
This will reload Redis with the specified module.
Verify the Module is Loaded
Once Redis is running, connect to it using redis-cli:
docker-compose exec redis redis-cli -a <yourPassword>
Run the following command:
MODULE LIST
Expected output:
1) 1) "name"
2) "bf"
3) "ver"
4) (integer) 20207
This confirms the module (in this case, bf for RedisBloom) is loaded and active.
Checking Module Availability & Compatibility
Redis modules must match the Redis server version and platform. You can verify compatibility through the module’s documentation or by testing it in a local development setup before using it in production.
To inspect module-related details:
INFO MODULES
To verify the correct Redis image is being used:
docker-compose exec redis redis-server --version
If a module fails to load, check the container logs:
docker-compose logs redis
This often reveals missing paths or compatibility issues.
Updating or Unloading Modules
Unlike MySQL, Redis does not support dynamic unloading of modules once loaded. To update or remove a module:
-
Stop the container:
docker-compose down
-
Edit docker-compose.yml:
-
Change the .so file path if updating the module.
-
Remove the
--loadmodule
line if unloading the module.
-
-
Restart the container:
docker-compose up -d
Always test updated modules in staging before applying to production.
Troubleshooting Common Module Issues
Issue |
Cause |
Resolution |
---|---|---|
Redis fails to start |
Incorrect module path or incompatible binary |
Check docker-compose logs redis and verify the .so path and architecture |
MODULE command not recognized |
Using a Redis image without module support |
Use an image like redis/redis-stack-server which supports modules |
“Can’t open .so file” |
Volume not mounted or permission denied |
Ensure the .so file exists locally and is readable by Docker |
Module not appearing in MODULE LIST |
Module failed to load silently |
Double-check command and container logs |
Commands from the module not recognized |
Module not loaded properly or incompatible |
Validate Redis version and module compatibility |
Security Considerations
Redis modules execute native code with the same privileges as Redis itself. Only load trusted, vetted modules from official sources. Avoid uploading or executing arbitrary .so files from unknown authors. In multi-tenant or exposed environments, module misuse could lead to instability or security risks. Ensure the redis user inside the container has limited privileges, and module directories have appropriate permissions.
No Comments