Skip to main content

A Django Admin interface for Redis servers with optional Redis Sentinel support

Project description

Introduction

With django-redis-admin you can view (and in the future, edit) your Redis databases. It supports simple servers, master slave setups and sentinel setups.

The admin works by creating a RedisQueryset which fakes Django models and querysets so the ModelAdmin thinks it’s using a regular database backed model.

Since Redis only supports basic types the library allows for optional base64 encoding/decoding and json encoding/decoding.

While I would not recommend using it as a regular queryset to access Redis. In addition to querying data it does some extra queries which you usually don’t need (such as fetching idle data) and it does some automatic conversion steps.

Requirements

  • Python 3.6 and above

  • Django (tested with 2.1, probably works with any version that supports Python 3)

  • Python-redis (pip install redis)

Installation

django-redis-admin can be installed via pip.

pip install django-redis-admin

Then just add redis_admin to your INSTALLED_APPS.

Optionally, configure your servers if you have multiple and/or non-standard (i.e. non-localhost) redis servers.

Below are several example configurations. The default settings can always be found in redis_admin/settings.py

You can run the demo project using the following commands:

cd test_redis_admin
python manage.py runserver

The default username/password is admin/admin: http://localhost:8080/admin/

Basic configuration

# https://redis-py.readthedocs.io/en/latest/index.html#redis.Redis
REDIS_SERVERS = dict(
    localhost=dict(),
)

Explicit configuration

# https://redis-py.readthedocs.io/en/latest/index.html#redis.Redis
REDIS_SERVERS = dict(
    redis_server_a=dict(host='127.0.0.1', port=6379, db=0),
)

Master slave configuration

# https://redis-py.readthedocs.io/en/latest/index.html#redis.Redis
REDIS_SERVERS = dict(
    redis_server_a=dict(
      master=dict(host='master_hostname', port=6379, db=0),
      slave=dict(host='slave_hostname', port=6379, db=0),
   )
)

Sentinel Configuration

# The `REDIS_SENTINELS` setting should be a list containing host/port
# combinations. As documented here:
# https://github.com/andymccurdy/redis-py/blob/master/README.rst#sentinel-support
REDIS_SENTINELS = [('server_a', 26379), ('server_b', 26379)]

# The `REDIS_SENTINEL_OPTIONS` are the extra arguments to
# `redis.sentinel.Sentinel`:
# https://github.com/andymccurdy/redis-py/blob/cdfe2befbe00db4a3c48c9ddd6d64dea15f6f0db/redis/sentinel.py#L128-L155
REDIS_SENTINEL_OPTIONS = dict(socket_timeout=0.1)

# The `service_name` is used to find the server within the Sentinel
# configuration. The dictionary key will be used as the name in the admin
# https://redis-py.readthedocs.io/en/latest/index.html#redis.Redis
REDIS_SERVERS = dict(
     name_in_admin=dict(service_name='name_in_sentinel'),
     other_server=dict(service_name='other_server'),
)

Base64 and/or JSON decoding

As a convenient option all values can optionally be base64 and/or json encoded. To configure this a regular expression can be specified which will be matched against the keys.

# For all keys
REDIS_JSON_KEY_RE = '.*'
REDIS_BASE64_KEY_RE = '.*'

# Keys starting with a pattern:
REDIS_BASE64_KEY_RE = '^some_prefix.*'

# Keys ending with a pattern:
REDIS_JSON_KEY_RE = '.*some_suffix$'

And if a specific json decoder is needed, the json module can be specified. The module needs to be importable and have a dumps and loads method. By default it simply imports the json module:

REDIS_JSON_MODULE = 'json'

Representation cropping

Within the Django Admin list view the values are cropped by default to prevent really long lines. This size can be adjusted through:

REDIS_REPR_CROP_SIZE = 150

TODO

  • Allow saving values

  • Allow deleting values

  • Support Redis Bitmaps

  • Support Redis HyperLogLogs

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-redis-admin-0.3.0.tar.gz (10.8 kB view details)

Uploaded Source

Built Distribution

django_redis_admin-0.3.0-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

File details

Details for the file django-redis-admin-0.3.0.tar.gz.

File metadata

  • Download URL: django-redis-admin-0.3.0.tar.gz
  • Upload date:
  • Size: 10.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.3

File hashes

Hashes for django-redis-admin-0.3.0.tar.gz
Algorithm Hash digest
SHA256 e49048c315ee8e054e906bd5644d30f32039b1de79f5221044e0903ab24f121f
MD5 39fa8b7abbf345b83a8ea9234d42ff1b
BLAKE2b-256 4eb6f0e2b392fba662aca4d983b17f1727749a4958154e00421e006a4cf1b8a0

See more details on using hashes here.

File details

Details for the file django_redis_admin-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_redis_admin-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d4752f9a279f1203d92355919e5276d47b11349dad54570ec88bdc4a96b28e6d
MD5 48bbffb9aa9c27cac2593acdce2103cd
BLAKE2b-256 57aff41424fa4b0534184c611e304aa5ebd0c86f7f7116a48713f0626e30f350

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page