У меня есть 2D-массив для хранения в redis, и я вижу два решения: сохранение его как строки JSON или сохранение одного хэша на строку. Какой путь лучше?Храните 2D-массив в redis
ответ
Я столкнулся с тем же вопросом при разработке приложения. Я выбрал сторону простоты. Я собираюсь предположить, что ваш 2d-массив данных представляет строку базы данных. Я бы JSON закодировал его и сохранил, используя SET
. Это позволяет мне использовать MGET
и MSET
, когда я хочу обрабатывать несколько объектов, используя одну команду redis. Если эти данные будут обновлены в моей базе данных, ключом будет DEL
. Для меня это проще, чем пытаться обновить хэши redis.
Хеши в redis имеют свои преимущества. Они, как правило, занимают меньше памяти из-за использования «ziplist» кодирования redis. Вы также можете избежать сериализации, что может быть довольно значительным для некоторых приложений.
Вот пример использования для хэша для меня. Предположим, я хочу найти имя пользователя с учетом идентификатора пользователя. Я бы сделал HGET user.usernames 1234
. Это дало бы мне имя пользователя для идентификатора пользователя 1234. Если будет пропущен, я запрошу базу данных и настрою ее, и поскольку эти данные никогда не изменятся, я никогда не истекаю хэш. Это позволяет быстро искать общую часть данных, а не тянуть весь пользователь, неэтериализовывать и возвращать необходимое поле.
Для предполагаемой массивной таблицы поиска я использую алгоритм, как здесь: http://redis.io/topics/memory-optimization Он использует несколько хэшей, как если бы они были, и использует ziplist-кодирование для сохранения памяти.
Какой бы метод вы ни выбрали, просто оставайтесь последовательными.
Спасибо за ссылку на документ redis, он заставил меня понять, что я могу использовать команды 'SETRANGE' и' GETRANGE', чтобы делать то, что мне нужно. 2D-массив, который мне нужно хранить, содержит только числа от 0 до 9, поэтому я могу сохранить уникальную строку, объединяя строки моего массива. Это так быстро. –
Как насчет использования Redis lists? Существует не поддержка списков списков, но вы можете либо сохранить одну строку в записи списка, либо создать список ключей, ссылающихся на другие списки.
Вы можете хранить каждый элемент в своем собственном ключе. Просто назовите ключи, чтобы имена содержали индексы элемента и, возможно, размеры массива.
- 1. Петля за коллекцией Laravel и храните ключ, используя Redis
- 2. Храните ViewController в iOS
- 3. Redis и redis-py: Сохранение абстрактных объектов
- 4. Храните несколько входов в массив
- 5. Храните круг в Geodjango + Postgres
- 6. Храните NSColor в виде строки
- 7. Храните глобальные переменные для разных сред в Rails
- 8. Храните jQuery переменной
- 9. Строка, спросите и храните
- 10. Храните копию GMSVisibleRegion
- 11. Android: Храните GPS активным
- 12. Redis Cluster Support в Redis 2.8.19
- 13. Redis - почему redis-сервер уменьшается в памяти?
- 14. Храните видео в папке «Документы» в фотоальбоме
- 15. Храните большой словарь в файл в Python
- 16. Где вы храните логику проверки?
- 17. Где вы храните свои заглушки?
- 18. Храните закрытый ключ вне ~/.ssh
- 19. SVN: Храните папку; Игнорировать содержимое
- 20. Храните, обновляйте, удаляйте, просматривайте изображение
- 21. Храните JVM, работающий на iseries
- 22. Где вы храните свои претензии
- 23. Храните комбинацию с двумя значениями
- 24. Как вы храните изображение в столбце изображения?
- 25. Как «разоблачить» вы храните пароль в сеансе?
- 26. Храните список словарей в виде таблицы HTML
- 27. Храните текстовый файл в массив и наоборот
- 28. Храните приложение Windows Mobile в режиме ожидания
- 29. Храните файл в Android от JAR-файла
- 30. Mysql: Храните массив данных в одном столбце
Можете ли вы конвейер написать, что redis читает/пишет? Это похоже на подходящий случай для бенчмаркинга. – sberry
Да Я могу конвейерно читать/писать –
«Лучше» зависит от ваших рисунков изогентов. Будет ли смысл читать или обновлять строку или столбец за раз? Будете ли вы всегда сохранять/читать всю таблицу сразу? Вы оптимизируете скорость передачи? Скорость сериализации? Размер хранилища? – Triptych