
sergey
28.12.2018
13:37:41
А если разнести алгоритмически ключи по нескольким редис серверам?
даже запустив их на одном железном сервере, на разных портах
ну если редису не нравится когда ключей много

Pavel
28.12.2018
13:39:03

Google

Скайнет
28.12.2018
13:39:10

Pavel
28.12.2018
13:39:49
Вообще, не существует кейса где надо возвращать все ключи, это очень плохой кейс и если он тебе нужен то ты что-то делаешь не так.

Скайнет
28.12.2018
13:40:29

Pavel
28.12.2018
13:40:32

Скайнет
28.12.2018
13:42:04
ну если редису не нравится когда ключей много
Мемкеш же как то живёт с десятками лимонов ключей...
Даже статитьи видел где крупные дяди делают класстеры мемкеш серверов, и у них почти всё отдаётся с них, т.е. база дёргается только когда ОЧЕНЬ надо, живой журнал вроде их использует активно.

sergey
28.12.2018
13:43:07
Удаляй явно

Pavel
28.12.2018
13:43:22

sergey
28.12.2018
13:43:39
Я редис не юзал серьезно. Но думаю что не должно быть, с чего бы.
ну может в какомто частном случае и есть

Google

Dmitry
28.12.2018
13:43:48

Скайнет
28.12.2018
13:43:49
А по какому критерию они стухают?
По обновлению инфы, например появилась свежая новость, ключи полных выборок новостей оставляем, а вот ключи листов ID нужно убить, причём их количество нам не известно, т.к. cat_N_page_N

Pavel
28.12.2018
13:44:59
Ладно мне уже надоело обсуждать несформулированную задачу

sergey
28.12.2018
13:45:34
Тебе известен список ключей? Убивай. Несуществующие тоже убивай, ничего не сломается.

Скайнет
28.12.2018
13:46:05

sergey
28.12.2018
13:46:22
фиг знает. Мемкеш простой как топор.
шлеп шлеп
и в продакшн

Скайнет
28.12.2018
13:47:07

Dmitry
28.12.2018
13:47:22
какие базы в мемкеше?

sergey
28.12.2018
13:47:26
даже теоретически, задача получить 10млн записей о кеше и найти в них одну и убить её - это тупость. Можно сразу убить.

Скайнет
28.12.2018
13:47:47

Dmitry
28.12.2018
13:47:49
я про логические базы https://redis.io/commands/select

Скайнет
28.12.2018
13:48:04

Pavel
28.12.2018
13:48:07

Скайнет
28.12.2018
13:48:22

Pavel
28.12.2018
13:48:54
Ну вот страницу как минимум ты можешь сделать себе хеш-множеством
и будет у тебя 'cat_N' => { page1, page2, page3 } Из редиса ты можешь выбирать отдельную запись по ключу cat_N и по ключу страницы page2, при этом можешь одной командой грохнуть все множество cat_N

Dmitry
28.12.2018
13:51:26
заведи реестр ключей в том же редисе

Google

Pavel
28.12.2018
13:51:43
Если у тебя надо было выбирать M_cat * N_pages ключей и каждый удалять, то в такой схеме надо будет выбирать всего лишь M_cat категорий

Dmitry
28.12.2018
13:51:49
ключ со списокм ключей

sergey
28.12.2018
13:52:48
можно наврено действительно хранить список ключей. Но это опять же.. какаято шляпа.
у меня проще, у меня ttl кеша и безусловное удаление по истечению ttl. В моменте нагрузка снижена, кеш живет максимум 10 минут и существует только для того, что запрашивают юзеры.


Скайнет
28.12.2018
13:56:56
Тут проблема в том что может быть примерно вот так: /cms/$site_id/apps/$app_id/$module_id/$function_id/$sub_function_id/cat_$cat_id_page_$page_id.tmp
Я у себя пути строю подобно файловым что бы удобнее с ними логически работать, да и дробить по слешам можно удобно.
$module_id, $function_id, $sub_function_id могут быть как названиями, так и название и числовой ID.

Dmitry
28.12.2018
13:57:59
вообще классически в мемкеше делают иначе... и ничего не мешает поступить так же в редисе
заводишь ключ namespace = 1
и все кеш ключи создаешь как cache:$namespace:xxx...
Тогда что бы "сбросить кеш", достаточно сделать $namespace++
и таких неймспейсов может быть хоть десяток, что позволяет обрасовывать пересекающиеся множества для сброса кеша

Скайнет
28.12.2018
13:58:52
ключ со списокм ключей
Я видел реализацию с хеш мапом, скажем так, оно работает со сбоями, т.к. в один момент времени может выстроиться очередь из тех что ждёт окончания блокировки. Но там хеш мап был на мемкеше.
И опять же из-за нарастающей несоглассованности кеша это допустимо только для маложивущего кеша, у меня же он может и 30 дней жить, если нет смысла обновлять.

Dmitry
28.12.2018
13:59:47

Скайнет
28.12.2018
14:00:39

Dmitry
28.12.2018
14:01:27
так тоже можно, но тут минус, что тебе все же придется получить кусок данных из кеша, десериализовать его что бы проверить таймстамп

Скайнет
28.12.2018
14:01:37

sergey
28.12.2018
14:02:44

Скайнет
28.12.2018
14:03:36

sergey
28.12.2018
14:04:33

Dmitry
28.12.2018
14:05:00
Это решается оптимистичной блокировкой и умением использовать старый кеш, пока блокировка стоит (т.е. кто-то один готовит новый кеш).

Скайнет
28.12.2018
14:05:06

Google

Dmitry
28.12.2018
14:05:28
нов целом инвалидация кеша - задача очень объемна и многогранна, увы... что бы там было универсальное решение

Скайнет
28.12.2018
14:05:54

Dmitry
28.12.2018
14:06:02
мы вот стали в админке для менеджеров в часы пик отключать часть функционала, ибо он кеш сбрасывает активно ;)

sergey
28.12.2018
14:06:23
Так а какие проблемы с текущим решением? Что за желание сломать то, что работает
работает и пусть работает

Скайнет
28.12.2018
14:06:41
выглядит так, что это тормозно
Ну скажем по скорости множественной выборки оно соотвествует редису, на чистом мемкеше оно было бы раз в 10 быстрее, вот и хочется переехать на редис, что бы убрать излишнюю обёртку и повысить скорость.

sergey
28.12.2018
14:07:00
это повышение в 10 раз необходимо?
не, ну если хочется, то можно конечно

Скайнет
28.12.2018
14:07:35

Admin
ERROR: S client not available

sergey
28.12.2018
14:08:35
разнеси на два сервера
на три на 5

Скайнет
28.12.2018
14:08:43
Накладных расходов много.

sergey
28.12.2018
14:09:33
то етсь тормозит не мемкеш?

Скайнет
28.12.2018
14:09:47

sergey
28.12.2018
14:10:02
на сравнение временной метки? Или на транспорт до сравнения

Скайнет
28.12.2018
14:10:43
Получение и обработка команд тоже занимает время, получения ключа таймштампа раздела кеша тоже занимает время для каждого запроса.
Грубо говоря очень низкий КПД из-за прослойки, но без неё КПД кеширования стремиться к нулю, т.к. если храним готовый кеш, он будет сбрасываться по любому чиху.

Google

Pavel
28.12.2018
14:11:40

Скайнет
28.12.2018
14:11:43
Да и готовый HTML меня не устраивает, нужны сырые данные.

Pavel
28.12.2018
14:12:06
Я думаю что есть
всякие там кассандры кафки это не то?

Скайнет
28.12.2018
14:12:36
Вообще по логике работы мне бы подошёл тупо аналог RAM диска, т.к. логика удаления ключей похожа на удаление директорий с кеш файлами.

Dmitry
28.12.2018
14:13:35

Pavel
28.12.2018
14:14:13

Dmitry
28.12.2018
14:14:42
хз... все настолько индивидуально мне кажется...

Скайнет
28.12.2018
14:15:33
так вопрос не только в том, а сбрасывать или сетить новое, кто должен, как блокировать параллельное обновление, как читать старое, пока заблокированы, как инвалидировать не все разом, чтобы не убить базу и т.п.
У меня уровни сброса, можно сбросить весь кеш всех сайтов, тупо сделать флуш мемкеша, можно сбросить кеш сайта, можно сбросить кеш приложения, можно кеш модуля приложения, можно кеш функции модуля приложения и т.д.
т.е. деление по слешам пути по сути.

Pavel
28.12.2018
14:16:18
интересно а можно ли к редису писать экстеншены

sergey
28.12.2018
14:16:21
я вот давно думал сравнить мемкеш с майскулем в мемори и тюнингованым конфигом
и постоянным конектом

Скайнет
28.12.2018
14:16:41
хз... все настолько индивидуально мне кажется...
Да нее, раньше мы все хранили кеш в папочке на диске, вот и у меня аналог этого, только в мемкеше, потому что удобнее кеш разложить по полочкам, с сбрасывать только то что нужно, а не бахать весь или половину, что бы проект не офигел.
Если бы я юзал InnoDB, он бы втух давно.

sergey
28.12.2018
14:19:56
критично медленней? Имхо мемкеш не используется в алгоритме с сравнением какиехто таймстампов и на 10% своей скорости. Единственное что мемкеш делает быстро - отвечает короткими данными на короткий ключ. Так быстро, что прямо шок.

Pavel
28.12.2018
14:20:51
А что ты кодишь то? Реестр запрещенных сайтов?

sergey
28.12.2018
14:21:55
Да, хочет под нг опять в дикси кассы заблокировать, чтобы пенсионеры бунтовали

Скайнет
28.12.2018
14:24:49