Django Redis Panel
A Django Admin panel for browsing, inspecting, and managing Redis keys. No postgres/mysql models or changes required.
Docs
https://yassi.github.io/dj-redis-panel/
Features
- Browse Redis Keys: Search and filter Redis keys with pattern matching
- Instance Overview: Monitor Redis instance metrics and database statistics
- Key Management: View, edit, and delete Redis keys with support for all data types
- Feature Toggles: Granular control over operations (delete, edit, TTL updates)
- Pagination: Both traditional page-based and cursor-based pagination support
- Django Admin Integration: Seamless integration with Django admin styling and dark mode
- Permission Control: Respects Django aβ¦
Django Redis Panel
A Django Admin panel for browsing, inspecting, and managing Redis keys. No postgres/mysql models or changes required.
Docs
https://yassi.github.io/dj-redis-panel/
Features
- Browse Redis Keys: Search and filter Redis keys with pattern matching
- Instance Overview: Monitor Redis instance metrics and database statistics
- Key Management: View, edit, and delete Redis keys with support for all data types
- Feature Toggles: Granular control over operations (delete, edit, TTL updates)
- Pagination: Both traditional page-based and cursor-based pagination support
- Django Admin Integration: Seamless integration with Django admin styling and dark mode
- Permission Control: Respects Django admin permissions and staff-only access
- Multiple Instances: Support for multiple Redis instances with different configurations
Supported Redis Data Types
- String: View and edit string values, including binary data
- List: Browse list items with pagination
- Set: View set members
- Hash: Display hash fields and values in a table format
- Sorted Set: Show sorted set members with scores
Binary Data Support
Django Redis Panel provides full support for displaying and editing arbitrary byte strings:
- Safe Display: Binary data is displayed as bytes literals (e.g.,
b'\x80\x04\x95...') when it canβt be decoded as text - Editable: You can edit binary data directly using the bytes literal format (
b'...'orb"...") - Round-trip Safe: Binary data maintains integrity through view/edit cycles
- Multiple Formats: Handles both single-quoted (
b'...') and double-quoted (b"...") bytes literals
Project Structure
dj-redis-panel/
βββ dj_redis_panel/ # Main package
β βββ templates/ # Django templates
β βββ redis_utils.py # Redis utilities
β βββ views.py # Django views
β βββ urls.py # URL patterns
βββ example_project/ # Example Django project
βββ tests/ # Test suite
βββ images/ # Screenshots for README
βββ requirements.txt # Development dependencies
Requirements
- Python 3.9+
- Django 4.2+
- Redis 4.0+
- redis-py 4.0+
Screenshots
Django Admin Integration
Seamlessly integrated into your Django admin interface. A new section for dj-redis-panel will appear in the same places where your models appear.
NOTE: This application does not actually introduce any model or migrations.
Instance Overview
Monitor your Redis instances with detailed metrics and database information.
Key Search - Page-based Pagination
Search for keys with traditional page-based navigation.
Key Search - Cursor-based Pagination
Efficient cursor-based pagination for large datasets.
Key Detail - String Values
View and edit string key values with TTL management.
Key Detail - Other data structures
Browse keys with more complex data structures such as hashes, lists, etc.
Installation
1. Install the Package
pip install dj-redis-panel
2. Add to Django Settings
Add dj_redis_panel to your INSTALLED_APPS:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'dj_redis_panel', # Add this line
# ... your other apps
]
3. Configure Redis Instances
Add the Django Redis Panel configuration to your Django settings:
DJ_REDIS_PANEL_SETTINGS = {
# Global feature flags (can be overridden per instance)
"ALLOW_KEY_DELETE": False,
"ALLOW_KEY_EDIT": True,
"ALLOW_TTL_UPDATE": True,
"CURSOR_PAGINATED_SCAN": False,
"CURSOR_PAGINATED_COLLECTIONS": False,
"INSTANCES": {
"default": {
"description": "Default Redis Instance",
"host": "127.0.0.1",
"port": 6379,
# Optional: override global settings for this instance
"features": {
"ALLOW_KEY_DELETE": True,
"CURSOR_PAGINATED_SCAN": True,
},
},
"other_instance": {
"description": "Cache Redis Instance",
"url": "rediss://127.0.0.1:6379",
},
}
}
4. Include URLs
Add the Redis Panel URLs to your main urls.py:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/redis/', include('dj_redis_panel.urls')), # Add this line
path('admin/', admin.site.urls),
]
5. Run Migrations and Create Superuser
python manage.py migrate
python manage.py createsuperuser # If you don't have an admin user
6. Access the Panel
Start your Django development server:
python manage.py runserver
Navigate to the Django admin at http://127.0.0.1:8000/admin/
1.
Look for the βDJ_REDIS_PANELβ section in the admin interface 1.
Click βManage Redis keys and valuesβ to start browsing your Redis instances
Configuration Options
The following options are set globally but can also be configured on a per instance basis: Note that settings using all caps are feature flags meant to affect how dj-redis-panel operates. settings using lower case names are actually settings that can be passed directly into the underlying redis client (redis-py)
| Setting | Default | Description |
|---|---|---|
ALLOW_KEY_DELETE | False | Allow deletion of Redis keys |
ALLOW_KEY_EDIT | True | Allow editing of key values |
ALLOW_TTL_UPDATE | True | Allow updating key TTL (expiration) |
CURSOR_PAGINATED_SCAN | False | Use cursor-based pagination instead of page-based |
CURSOR_PAGINATED_COLLECTIONS | False | Use cursor based pagination for key values like lists and hashs |
encoder | "utf-8" | Encoding to use for decoding/encoding Redis values |
socket_timeout | 5.0 | timeout for redis opertation after established connection |
socket_connect_timeout | 3.0 | timeout for initial connection to redis instance |
Instance Configuration
Each Redis instance can be configured with:
Connection via Host/Port:
"instance_name": {
"description": "Human-readable description",
"host": "127.0.0.1",
"port": 6379,
"socket_timeout": 1.0, # Optional: will use sane default
"socket_connect_timeout": 1.0, # Optional: will use sane default
"password": "password", # Optional
"features": { # Optional: override global settings
"ALLOW_KEY_DELETE": True,
},
}
Connection via URL:
"instance_name": {
"description": "Human-readable description",
"url": "redis://user:password@host:port",
"socket_timeout": 1.0, # Optional: will use sane default
"socket_connect_timeout": 1.0, # Optional: will use sane default
"features": { # Optional: override global settings
"CURSOR_PAGINATED_SCAN": True,
},
}
License
This project is licensed under the MIT License. See the LICENSE file for details.
Development Setup
If you want to contribute to this project or set it up for local development:
Prerequisites
- Python 3.9 or higher
- Redis server running locally
- Git
- Autoconf
1. Clone the Repository
git clone https://github.com/yassi/dj-redis-panel.git
cd dj-redis-panel
2. Create Virtual Environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
3. Install dj-redis-panel inside of your virtualenv
A make file is included in the repository root with multiple commands for building and maintaining this project. The best approach is to start by using one of the package installation commands found below:
# Install all dependencies and dj-redis-panel into your current env
make install
4. Set Up Example Project
The repository includes an example Django project for development and testing:
cd example_project
python manage.py migrate
python manage.py createsuperuser
5. Populate Test Data (Optional)
An optional CLI tool for populating redis keys automatically is included in the example django project in this code base.
python manage.py populate_redis
This command will populate your Redis instance with sample data for testing.
6. Run the Development Server
python manage.py runserver
Visit http://127.0.0.1:8000/admin/ to access the Django admin with Redis Panel.
7. Running Tests
The project includes a comprehensive test suite. You can run them by using make or by invoking pytest directly:
# build and install all dev dependencies and run all tests
make test
# Additionally generate coverage reports in multiple formats
make test_coverage
Note: Tests require a running Redis server on 127.0.0.1:6379. The tests use databases 13, 14, and 15 for isolation and automatically clean up after each test.
8. Dockerized Redis
Test for this project (as well as any active development) require an active redis installation. Although not required, a docker-compose file is included to allow for easy creation of local redis instances.
# Start Redis on localhost and the usual port 6379
docker-compose up redis -d