2015-06-10 3 views
2

Я использую StackExchange.Redis 1.0.450 nuget в C#. У меня есть код, как показано ниже, который проверяет наличие keyexists в Redis, прежде чем добавить -Существует проверка проверки перед вызовом метода StringSet для StrackExchange.Redis

if (!Cache.KeyExists(fKey)) 
{ 
    Cache.StringSet(fKey, Serialize(data)); 
} 

где Cache является Database объект

Я читал о команде Redis SET здесь http://redis.io/commands/set и обнаружил, что SET будет перезаписывать существующее значение ключа, если оно уже существует. Использование StackExchange.Redis можно безопасно удалить условие проверить, существуют и называют просто -

Cache.StringSet(fKey, Serialize(data)); 

Цените ваш ответ.

+0

Что заставляет вас думать, что вы не можете удалить его безопасно? В конце концов другой поток, возможно, поместил что-то в кеш между проверкой «KeyExists» и «StringSet» в любом случае. –

+0

Ну что ж, вы хотите * перезаписать, если ключ уже существует, или вы хотите оставить существующее значение? –

+0

Спасибо Джеймс и Джон, я в порядке, даже если он перезаписывается. Спасибо. – VST

ответ

1

Да, вы можете устранить это. Мы также не проверяем существование, так как это приведет к наличию двух точек доступа в кеше, где требуется только одно. Это действительно замедлит доступ к кешу.

Вы можете рассмотреть еще три вещи:

  • вы, возможно, придется сделать множество действий повторяемые в случае кэш Redis не доступен в момент доступа.
  • Возможно, вам потребуется инициализировать соединение, которое можно повторить
  • , пожалуйста, обратитесь к buffer redis stream, как сделать (де) сериализацию красных кеш-записей надежными и быстрыми.
2

Поведение по умолчанию - это просто перезаписать, поэтому, если это подходит для вас: вам не нужна проверка. Существует также необязательный параметр when, который позволяет вам контролировать это более точно - см. Параметр NX etc в документации redis SET, чтобы увидеть, что это означает в действительности. Для проверок «равенства» вы можете использовать транзакцию с ограничением.

Смежные вопросы