#json #azure #redis
Вопрос:
Я рассматриваю возможность использования кэша Redis Azure для одного из наших приложений. Нам нужно хранить чистый JSON, что при определенных обстоятельствах явно не рекомендуется в разделе «Лучшие практики«. Я очень новичок в Redis, и я изучаю возможные шаблоны для выполнения наших требований, и я не уверен, что мой подход нарушает эти лучшие практики.
Шаблон, который я хочу реализовать, заключается в следующем:
- Происходит изменение элемента в базе данных Cosmos
- Лента изменений анализируется на наличие обновленных элементов
- Обновленный элемент сериализуется и записывается в Redis
- Когда система будет позже запрошена, сначала найдите кэшированный элемент. Извлеките и снимите сериализацию, если таковая имеется. Если нет, запросите Космос.
Набор и ПОЛУЧЕНИЕ будут выполняться в двух совершенно разных частях приложения. Никогда не было бы сценария, в котором я бы извлекал, изменял и устанавливал, поскольку документ Cosmos действует как промежуточный и никогда не может запускать одновременную запись. При запросе системы всегда ожидается, что кэш обновлен, если там существует документ.
Чего я действительно не могу понять, так это того, что мой подход сопряжен с риском потери данных.:
Хуже того, многие приложения просто ПОЛУЧАЮТ всю строку JSON, десериализуют ее, обрабатывают, повторно сериализуют и снова УСТАНАВЛИВАЮТ в приложении. Это анти-паттерн. При использовании этого метода существует очень реальный риск потери данных.
Они продолжают предлагать RedisJSON, который должен быть активирован на уровне базы данных.
К сожалению, это, похоже, невозможно с помощью кэша Azure Redis, или, по крайней мере, я не могу найти никакой документации или какой-либо возможности сделать это во время создания ресурса или во время его создания.
- Можно ли использовать RedisJSON с кэшем Redis Azure?
- Если нет #1, существуют ли какие-либо альтернативные рекомендуемые подходы для хранения данных JSON с помощью Redis, или мой предложенный подход является возможным решением?
Обновить
Я решил эту проблему, прослушав каналы изменений контейнеров, которые я хотел кэшировать в функции Azure. В этом шаблоне есть один экземпляр приложения, который когда-либо писал один уникальный документ, и чтение происходит полностью отдельно и никогда не изменяет кэшированное значение.
Лента изменений получает весь документ, если он вставлен или обновлен, но не удален. Благодаря получению всего документа легко аннулировать кэш при определенных условиях или добавить значение мягкого удаления, чтобы удалить его полностью.
Ответ №1:
Можно ли использовать RedisJSON с кэшем Redis Azure?
Вы можете легко создать Redis с помощью RedisJSON в Azure с помощью Redis Cloud см.: https://redis.com/redis-enterprise-cloud/pricing/
Комментарии:
1. Спасибо, это та же цена и, похоже, решает проблему. Однако я пошел другим путем и все еще использовал управляемый кэш Azures, я немного написал об этом в своем первоначальном посте.