Мне не нравится предложение добавить/удалить, потому что оно вставляет неверные данные, которые могут зависеть от того, насколько ваше приложение может быть действительным. Если ваше приложение делает это предположение, это может вызвать тонкую ошибку, которая возникает каждый так часто из-за состояния гонки, которое оно вводит.
Одно из решений заключается в том, чтобы взглянуть на значение, и если его временные данные притворяются, что его нет, но для этого потребуется, чтобы весь код приложения использовал один и тот же api, или вам нужно было обновить само приложение, и в некоторой степени подвержены ошибкам из-за дополнительной сложности.
Если набор ключей достаточно мал, вы можете сохранить это в memcached и использовать, чтобы определить, следует ли снова извлекать данные из источника. Однако, если его значение больше или больше, значение этого метода хуже, чем просто получение всего значения из memcached.
Вы могли бы решить новую проблему, используя индекс для разделения ключей на меньшие наборы (конечно хороший способ шарда этих данных, так что каждый ковш определенного размера легче сказать, чем сделать.)
Реализация будет состоять из использования memcached append или prepend для поддержки вашего списка ключей, привязанных к некоторому главному ключу или мастер-ключу, который указывает на набор суб-клавиш, которые указывают на сами клавиши :)
В любом случае, вы делаете приложение все более и более сложное, поэтому я бы рекомендовал сделать это, если действительно есть узкое место (например, было бы, если существование ключей необходимо проверять часто по сети), или если usabil (задержка).
В моем случае я не буду этого делать, потому что я собираюсь получить доступ к memcached через localhost и использовать его как расширение расширения для моего приложения для кэширования ресурсов, которые требуют более нескольких секунд для нормальной работы.
Да, но сначала я должен быть уверен, что он еще не установлен. Потому что, если он уже установлен, я буду тратить время на чтение данных из медленного источника. Если я использую get() для проверки, тогда я буду тратить сеть IO, потому что значение 1MB - это размер. – Matic
@Matic «проблема» в том, что memcached не был разработан с учетом сетевого ввода-вывода, поэтому я думаю, именно поэтому такая функциональность была опущена. Если сетевой IO является проблемой, вам лучше использовать базу данных kv. Я понимаю, что иногда вам просто не требуется дополнительное выделение, даже если сетевое IO не является проблемой, но это невозможно с memcached. У Redis есть такая возможность. – themihai