Comments 6
Нет никаких ACID транзакцийВ Redis есть ACID транзакции. Если сомневаетесь, перечитайте определение ACID.
даже при включённом сохранении на диск данные могут быть потеряны частично либо полностьюКак и для SQL баз данных.
в данных может быть нарушена целостность с точки зрения приложенияКак и для SQL баз данных.
фоновое сохранение данных на диск может нанести ущерб производительности и отказоустойчивостиКак и для SQL баз данных.
Данные имеют time to life. возражение: это не мешает хранить их в SQL СУБДС такой аргументацией, это не мешает их хранить даже в уме. Redis очень эффективен для хранения time to life данных.
При записи сохранять данные и в Redis, и в основную БДА о консистентности между двумя БД вы подумали?
избегайте хранения в Redis важных данные или данных, требующих контроля целостностиЧто конкретно вам мешает обеспечить высокую надежность хранения данных и обеспечение целостности в Redis?
возражение: перегруженный redis работает медленееВот только уровень перегрузки у Redis обычно на один-два порядка выше чем у SQL БД.
В целом Redis проектировался с приоритетом Availability over Consistency, но это отнюдь не значит что Consistency в Redis не достигается, как вы утверждаете в статье.
Насчёт ACID транзакций вы правы, я ошибся на этот счёт. Хотя, конечно, поведение транзакций несколько отличается от SQL и не позволяет получить данные, принять решение, записать данные - такое, насколько мне известно, достижимо только через Redis Script.
Что касается "как и SQL": да, настройками Redis можно достичь тех же гарантий, что у MySQL, но это полностью уберёт преимущества в производительности, при этом Redis останется однопоточным, а MySQL - многопоточным.
Ну и кроме того, если мы превращаем Redis в однопоточный и ограниченный по функциональности аналог MySQL, то в чём смысл такой инсталяции Redis?
Если же не превращаем, то сказанное в статье верно.
И в любом случае, Redis в дополнение к основной БД - это новая точка отказа. Посыл статьи вовсе не в том, что Redis не надо использовать. Посыл в том, что использование должно быть оправдано, а реализация должна быть адекватной, если проекту важна отказоустойчивость.
Хотя, конечно, поведение транзакций несколько отличается от SQL и не позволяет получить данные, принять решение, записать данные — такое, насколько мне известно, достижимо только через Redis Script.Нет, позволяет.
Что касается «как и SQL»: да, настройками Redis можно достичь тех же гарантий, что у MySQL, но это полностью уберёт преимущества в производительности, при этом Redis останется однопоточным, а MySQL — многопоточным.Из аббревиатуры ACID четыре буквы из пяти Redis обеспечивает «по-умолчанию» и без каких-либо компромиссов с производительностью не хуже чем MySQL. Более того, Redis производительный именно потому, что он принципиально однопоточный.
Ну и кроме того, если мы превращаем Redis в однопоточный и ограниченный по функциональности аналог MySQL, то в чём смысл такой инсталяции Redis?Даже с записью AOF файла для достижения Durability, Redis выдает 100-200 тысяч операций в секунду.
Поможет ли вам достигнуть аналогичных результатов многопоточность MySQL?
Redis не стоит пытаться превратить в MySQL ровно по той же причине, по которой не нужно пытаться превратить MySQL в Redis – они по разному спроектированы и для разных целей. В некоторых ситуациях использование Redis позволяет создать более отказоустойчивое решение, чем использование MySQL, особенно в условиях ограниченных ресурсов на инфраструктуру, и особенно если под отказоустойчивостью понимать высокую доступность.
Отказоустойчивая работа с Redis