StackExchange.Redis — MISCONF Redis случайно не удается сохранить в моментальный снимок RDB

Я реализовал StackExchange.Redis в своем приложении, и в целом он работает довольно хорошо. Однако мы случайно получаем следующую ошибку.

StackExchange.Redis.RedisServerException: MISCONF Redis is configured to save RDB snapshots, 
but is currently not able to persist on disk. Commands that may modify the data set are 
disabled. Please check Redis logs for details about the error.

Я запустил CONFIG SET dir и CONFIG SET dbfilename и подтвердил, что он может без проблем сохранить файл в папке C:\Temp.

Вот и ищу направление по этому поводу. Должен ли я поймать ошибку и проглотить ее? Я поймаю ошибку и повторю попытку сохранения данных? Есть ли другое решение?

Пожалуйста, не рекомендуйте config set stop-writes-on-bgsave-error нет, это не решение, это отключение того, что вам действительно нужно включить.

Размер нашей базы данных не такой уж большой, это 410 элементов, хотя некоторые строки действительно большие (7 МБ - самый большой). Но большинство из них являются просто кешем самых простых html-блоков.


person Clarence Klopfstein    schedule 02.07.2016    source источник


Ответы (1)


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

Я завернул SET в try catch, при ошибке я сплю 5 секунд и делаю это снова. Если это не удается, я выбрасываю ошибку.

try
{
    var pending = _redisDb.StringSetAsync(key, value, time);
    _redisDb.Wait(pending);
}
catch
{
    System.Threading.Thread.Sleep(5000);
    var pending = _redisDb.StringSetAsync(key, value, time);
    _redisDb.Wait(pending);
}

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

Я не знаю, рекомендуется ли это (отсутствие ответов), но это работает.

person Clarence Klopfstein    schedule 07.07.2016