An open API service indexing awesome lists of open source software.

https://github.com/iwizard7/redis-dump-restore

The script dumps and restores Redis database data to and from JSON files.
https://github.com/iwizard7/redis-dump-restore

backup redis restore

Last synced: 5 months ago
JSON representation

The script dumps and restores Redis database data to and from JSON files.

Awesome Lists containing this project

README

          

[![Pylint](https://github.com/iwizard7/redis-dump-restore/actions/workflows/pylint.yml/badge.svg)](https://github.com/iwizard7/redis-dump-restore/actions/workflows/pylint.yml) [![CodeQL](https://github.com/iwizard7/redis-dump-restore/actions/workflows/codeql.yml/badge.svg)](https://github.com/iwizard7/redis-dump-restore/actions/workflows/codeql.yml)![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/iwizard7/redis-dump-restore) ![GitHub repo file count (file type)](https://img.shields.io/github/directory-file-count/iwizard7/redis-dump-restore)
# Redis Data Dump Utility ⚙️

## Описание

Этот Python скрипт позволяет сохранять и загружать данные из базы данных Redis в файл JSON и обратно. Он поддерживает функции для:

* Сохранения всех ключей или ключей по маске из выбранной базы данных Redis в файл.
* Загрузки данных из файла JSON в выбранную базу данных Redis.

## Функционал

### Сохранение данных из Redis в файл:

* Выберите базу данных Redis.
* Укажите маску ключа (опционально) для фильтрации ключей.
* Укажите имя файла для сохранения дампа данных.

### Загрузка данных из файла в Redis:

* Укажите имя файла с дампом данных.
* Выберите базу данных Redis для загрузки данных.

## Установка

Убедитесь, что у вас установлен Python 3.6 или выше. Вы можете проверить это с помощью команды:

```bash
python --version
```
Установите необходимые зависимости:
```bash
pip install redis
```
## Использование

Сохранение данных:
Запустите скрипт:
```bash
python redis_dump_util.py
Выберите опцию “1” для сохранения данных в дамп.
Введите номер базы данных Redis.
Укажите маску ключа для фильтрации (оставьте пустым для сохранения всех ключей).
Укажите имя файла для сохранения дампа.
```
Загрузка данных:
Запустите скрипт:
```bash
python redis_dump_util.py
Выберите опцию “2” для загрузки данных.
Введите имя файла с дампом.
Укажите номер базы данных Redis. Дамп будет восстановлен в эту базу.
```

## Пример использования:
Для сохранения данных из базы данных Redis с номером 2 в файл backup.json:
```bash
python redis_dump_util.py
Выберите “1” для сохранения данныхВведите “2” для номера базы данных
Введите маску ключа, если необходимо (или оставьте пустым)
Введите “backup.json” для имени файла
```
Для загрузки данных из файла backup.json в базу данных Redis с номером 2:
```bash
python redis_dump_util.py
Выберите “2” для загрузки данныхВведите “backup.json” для имени файла
Введите “2” для номера базы данных
```
## Фильтрация ключей по маске
В скрипте для выгрузки данных из Redis используется функция `SCAN` с параметром `MATCH`, который позволяет фильтровать ключи по шаблону.
Шаблон для `MATCH` может быть полезен для выборочного сохранения данных, основываясь на части ключа.

Основные правила для написания шаблона ключей:

### Основные шаблоны:

1. **Все ключи**:
```python
key_pattern = '*'
```
Это соответствует всем ключам в базе данных.

2. **Ключи, начинающиеся с определенного префикса**:
```python
key_pattern = 'prefix:*'
```
Например, `user:*` найдет все ключи, начинающиеся с `user:`.

3. **Ключи, заканчивающиеся на определенное значение**:
```python
key_pattern = '*:suffix'
```
Например, `*:data` найдет все ключи, заканчивающиеся на `:data`.

4. **Ключи, содержащие определенный подстроку**:
```python
key_pattern = '*part*'
```
Например, `*session*` найдет все ключи, содержащие `session` где угодно.

5. **Ключи с определенным суффиксом**:
```python
key_pattern = 'prefix:*suffix'
```
Например, `session:*:active` найдет ключи, соответствующие паттерну `session:*:active`.

### Примеры использования шаблонов:

- **Вывод всех ключей в базе данных**:
```python
key_pattern = '*'
```

- **Вывод всех ключей, которые начинаются с `user:`**:
```python
key_pattern = 'user:*'
```

- **Вывод всех ключей, которые содержат `session`**:
```python
key_pattern = '*session*'
```

- **Вывод всех ключей, которые начинаются с `cache:` и заканчиваются на `:2024`**:
```python
key_pattern = 'cache:*:2024'
```

## История изменений
Основные изменения:

#Обработка данных при выгрузке в файл:

smembers теперь преобразуется в список для удобства записи в JSON.
Добавлен параметр default=str в json.dump для обработки нестандартных типов данных.

### Обработка данных при загрузке из файла:
Обработка списков и наборов теперь улучшена для корректной загрузки данных.
Добавлена обработка пустых списков (хотя они не загружаются, это может быть полезно для дальнейших улучшений).

### Устранены потенциальные ошибки:
Преобразование множества в список перед записью в файл.
Убедитесь, что hmset поддерживается вашей версией redis-py, поскольку в новых версиях он может быть заменен на hset.

### Обработка ошибок декодирования:
При декодировании строковых данных теперь добавлена обработка UnicodeDecodeError. Если данные не могут быть декодированы в UTF-8, они сохраняются как бинарные данные.

### Обработка бинарных данных при загрузке:
При загрузке данных из файла добавлена возможность сохранения бинарных данных, если они были сохранены в этом формате.

Ввод IP-адреса Redis теперь имеет значение по умолчанию 127.0.0.1, если пользователь оставляет поле пустым.
Порт Redis по умолчанию установлен на 6379, если пользователь не вводит его вручную.

## Требования
Python 3.6 или выше
Библиотека redis (устанавливается с помощью pip)

## Лицензия
Этот проект лицензирован под MIT License. См. LICENSE для подробностей.