ФорумПрограммированиеPHP для идиотов → Кеширование с удалением по маске

Кеширование с удалением по маске

  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 28 апреля 2015 г. 10:13

    Дано: я пользуюсь какой-нибудь системой кеширования

    при этом использую неймспейсы для ключей:

    cache_store('catalog.123', $foo, 120);

    cache_store('news.2', $some_new, 120);

    и тут мне внезапно нужно удалить весь кэш в неймспейсе catalog:

    cache_delete('catalog.*');

    Вопрос: какая система кеширования умеет удалять часть данных по такому синтаксису ключей: 'prefix.*'?

    не всё полезно, что в swap полезло
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 28 апреля 2015 г. 10:21, спустя 7 минут 57 секунд

    редис - keys + del

  • phpdude

    Сообщения: 26611 Репутация: N Группа: в ухо

    Spritz 28 апреля 2015 г. 10:22, спустя 1 минуту 7 секунд

    @master, redis умеет

    How to atomically delete keys matching a pattern using Redis [stackoverflow.com]

    Спустя 9 сек.

    редис - keys + del

    @Абырвалг, хуя ты быстрый)

    Спустя 7 сек.

    давно не видно тебя :)

    Сапожник без сапог
  • adw0rd

    Сообщения: 22900 Репутация: N Группа: в ухо

    Spritz 28 апреля 2015 г. 10:31, спустя 8 минут 56 секунд

    @Абырвалг, плюс один

    Спустя 61 сек.

    @phpdude, пока ты искал ответ на SO, абырвалг уже ответил)

    adw/0
  • phpdude

    Сообщения: 26611 Репутация: N Группа: в ухо

    Spritz 28 апреля 2015 г. 10:34, спустя 2 минуты 42 секунды

    @adw0rd, ты пздишь. я не искал, я просто синтаксис искал. ответ я заранее знал. погуглил типа за тс

    Спустя 27 сек.

    ибо я эту хуйту уже применял и не раз ;)

    выебун ты

    Спустя 86 сек.

    мемкеш тоже умеет, но не настолько "сильно из каробки". но если надо то можно и в нем. и в мемкеше я это тоже делал

    
    function deletekeysbyindex($prefix = false) {
        $m = new Memcached();
        $m->addServer('localhost', 11211);
        $keys = $m->getAllKeys();
        if ($prefix !== false) {
            foreach ($keys as $index => $key) {
                if (strpos($key,$prefix) !== 0) {
                    unset($keys[$index]);
                } else {
                    $m->delete($key);
                }
            }
        }
        return $keys;
    }
    
    Сапожник без сапог
  • adw0rd

    Сообщения: 22900 Репутация: N Группа: в ухо

    Spritz 28 апреля 2015 г. 10:37, спустя 3 минуты 24 секунды

    @phpdude, убедил)

    Спустя 45 сек.

    про мемкеш - так все умеют

    adw/0
  • phpdude

    Сообщения: 26611 Репутация: N Группа: в ухо

    Spritz 28 апреля 2015 г. 10:38, спустя 1 минуту 31 секунду

    про мемкеш - так все умеют

    @adw0rd, редис типа особо отличается. метод тот же, правда выгрузить можно по фильтру ключи. но смысл один.

    Сапожник без сапог
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 28 апреля 2015 г. 20:49, спустя 10 часов 10 минут 28 секунд

    Спасибо, котаны.

    А ещё, как обычно, можно решить проблему дополнительным уровнем абстракции: создав класс-обёртку, хранящую индекс ключей в том же кеше.

    не всё полезно, что в swap полезло
  • phpdude

    Сообщения: 26611 Репутация: N Группа: в ухо

    Spritz 28 апреля 2015 г. 20:53, спустя 4 минуты 14 секунд

    @master, ну это самый очевидный вариант

    Сапожник без сапог
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 28 апреля 2015 г. 20:56, спустя 3 минуты

    @phpdude, и самый надёжный, особенно для пхп, где на каждом шаред-хостинге неизвестно какой кэш-движок установлен.

    не всё полезно, что в swap полезло
  • phpdude

    Сообщения: 26611 Репутация: N Группа: в ухо

    Spritz 28 апреля 2015 г. 21:07, спустя 10 минут 38 секунд

    @master, поэтому я и не использую шаред хостинги))

    Сапожник без сапог
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 28 апреля 2015 г. 21:13, спустя 5 минут 53 секунды

    @phpdude, я тоже =)

    не всё полезно, что в swap полезло
  • AlexB

    Сообщения: 4288 Репутация: N Группа: в ухо

    Spritz 29 апреля 2015 г. 8:57, спустя 11 часов 44 минуты 12 секунд

    Чойто мне идея с хранением индекса ключей не нравиться. Мемкеш не гарантирует что этот индекс не помрет раньше самих ключей. Неконсистентно как-то

  • artoodetoo

    Сообщения: 5135 Репутация: N Группа: в ухо

    Spritz 29 апреля 2015 г. 10:23, спустя 1 час 26 минут 26 секунд

    Кеш вообще негарантированная штука. Если где-то заложено требование на непустоту, будет боль. 100%

    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26611 Репутация: N Группа: в ухо

    Spritz 29 апреля 2015 г. 10:36, спустя 12 минут 16 секунд

    Кеш вообще негарантированная штука. Если где-то заложено требование на непустоту, будет боль. 100%

    @artoodetoo, юзай memcachedb. он не удаляет по expire. а просто на диске хранит. expire там только на hot cache распространяется.

    Спустя 25 сек.

    дружбан без mysql на одном memcachedb нахуячил онлайн игру )))))) типа травиана. я долго ржал с него

    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!