ZendFramework Аналог getIdsMatchingTags() из Zend_Cache (zf1) в Zend\Cache (zf2)?

Yoskaldyr

"Спамер"
Партнер клуба
Есть аналог getByTag getIdsMatchingTags из первого зенда во втором?
Или самому писать для нужных мне адаптеров?
 
Последнее редактирование:

Yoskaldyr

"Спамер"
Партнер клуба
@WMix, Блин гоню, в zf1 использовал обертку, которая внутри использовала getIdsMatchingTags

P.S. Подправил первый пост и заголовок
 
Последнее редактирование:

Yoskaldyr

"Спамер"
Партнер клуба
Кстати возник еще вопрос пока искал различные реализации кеша с тегами.
Кто знает почему практически во всех современных реализациях тегов/неймспейсов/иерархии для кеша есть добавить/изменить/удалить теги для записи, есть удалить все записи с тегом, но нет ни получения списка id записей с тегом, ни получения самих записей с данным тегом?
 

Вурдалак

Продвинутый новичок
Кто знает почему практически во всех современных реализациях тегов/неймспейсов/иерархии для кеша есть добавить/изменить/удалить теги для записи, есть удалить все записи с тегом, но нет ни получения списка id записей с тегом, ни получения самих записей с данным тегом?
Наверное, потому что технически это намного сложнее и мало кому нужно.

Сама инвалидация по тегу обычно реализуется через какую-то простую операцию типа инкремента значения тега. Когда ты пытаешься сохранить что-то в кеш, к ключу добавляется какой-то префикс, который состоит из тех самых значений тегов. Когда инвалидируется тег, ключи у всех записей с этим тегом автоматически становятся новыми. Реально они не удаляются как при $cache->delete($key), просто лежат где-то по старым ключам и со временем вытесняются.

Я предположу, что в той реализации, о которой ты говоришь, было что-то типа карты «имя тега -> список ключей», но это ненадёжная и неэффективная реализация.
 

Yoskaldyr

"Спамер"
Партнер клуба
Я предположу, что в той реализации, о которой ты говоришь, было что-то типа карты «имя тега -> список ключей», но это ненадёжная и неэффективная реализация.
так и есть. И я понимаю насчет "надежности" и "эффективности" такого подхода.
Вопрос был больше о существующих реализациях - почему если и делают тегирование, то есть только удаление по тегу, но нет получения списка id по тегу или получения самих тегов? Ведь надежность и эффективность в обоих случаях полностью одинаковая (учитывая что внутри при удалении так и происходит, получение списка id, а потом удаление).
 

AnrDaemon

Продвинутый новичок
Дело именно в ненужности.
Когда ты собрался отдавать страницу, ты все теги уже знаешь, у тебя просто нет необходимости куда-то за ними лезть, осталось только запросить инфу из кеша.
 

Вурдалак

Продвинутый новичок
Вопрос был больше о существующих реализациях - почему если и делают тегирование, то есть только удаление по тегу, но нет получения списка id по тегу или получения самих тегов? Ведь надежность и эффективность в обоих случаях полностью одинаковая (учитывая что внутри при удалении так и происходит, получение списка id, а потом удаление).
Во втором абзаце я объяснил почему: у тебя нет никакой карты «имя тега -> список ключей», инвалидация происходит неявно и сам тег про записи ничего не знает. Строго говоря, в описанной реализации нет такой операции, как «удаление по тегу». Это выглядит, как будто записи были удалены, но по факту просто сменились ключи.
 

Yoskaldyr

"Спамер"
Партнер клуба
@AnrDaemon, Мне надо получить все записи из кеша с конкретным тегом (меткой), а не просто удалить (как делают практически все библиотеки которые есть в данный момент и еще раз повторюсь внутри они именно так и делают: получение списка ключей а потом удаление данных по этому списку).

@Вурдалак, я прекрасно понял что было написано во втором абзаце. И вопрос не в функционале инвалидации кеша, а в функционале большинства существующих библиотек реализующих доступ к кешу и там как раз этого нет (такой инвалидации) - там просто интерфейс доступа к какому-то бекенду: получить/изменить/удалить/инкрементировать/и т.д.

И если взять тот же Zend\Cache из 2-го ZF
http://framework.zend.com/manual/current/en/modules/zend.cache.storage.adapter.html#the-taggableinterface
Чем с точки зрения надежности и эффективности отличается тот же clearByTags от недоступного во втором зенде getIdsMatchingTags ? Учитывая что внутри clearByTags делает операции аналогичные getIdsMatchingTags?

Я предположу, что в той реализации, о которой ты говоришь, было что-то типа карты «имя тега -> список ключей», но это ненадёжная и неэффективная реализация.
На том же редисе и на стороне редиса теги можно реализовать атомарно и довольно стабильно.
 

fixxxer

К.О.
Партнер клуба
довольно стабильно.
:D

Ты еще MongoDB предложи.

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

clearByTags должен просто удалять (или инкрементить) теги, если там не так - значит, там тоже написана ерунда.
 

Yoskaldyr

"Спамер"
Партнер клуба
clearByTags должен просто удалять (или инкрементить) теги, если там не так - значит, там тоже написана ерунда.
так такое везде написано, где есть интерфейс тегирования!
вот потому и стал вопрос почему есть очистка по тегу, но нет получить список ключей по тегу.
 

MiksIr

miksir@home:~$
Комментарий к методу описывает его поведение, а не реализацию. Реализацию уже сказали несколько раз.
Есть кеши, где нет никаких списков, есть тупо ключ-значение. Ибо очень часто хотение получить список ключей кеша - сигнал архитектурной ошибки. Кеш - не СУБД, это нужно понять.
 

Вурдалак

Продвинутый новичок
Учитывая что внутри clearByTags делает операции аналогичные getIdsMatchingTags?
Даже если clearByTags делает что-то аналогичное (реализация с картой), то метод getIdsMatchingTags никому не нужен и провоцирует на плохие практики.
Но не всегда clearByTags делает что-то аналогичное (реализация с составным ключом).

Из сказанного выше также вытекает, что getIdsMatchingTags реализовать возможно не всегда. Дополнительный стимул не включать такой метод в интерфейс, чтобы не привязываться к реализации.
 

Yoskaldyr

"Спамер"
Партнер клуба
@Вурдалак, clearByTags тоже не всегда возможен поэтому он и вынесен в отдельный интерфейс.

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

Yoskaldyr

"Спамер"
Партнер клуба
Фактически нужна библиотека умеющая работать с вторичным индексом в nosql хранилище или возможность выборки ключей по маске (второе тот же APCu умеет)
 

fixxxer

К.О.
Партнер клуба
вот потому и стал вопрос почему есть очистка по тегу, но нет получить список ключей по тегу.
Потому что этого списка нигде нет.

мне нужна более менее независимый компонент для работы с быстрыми nosql хранилищами поддерживающими получение ключей по маске.
Теги - вообще не для этого. Теги - для инвалидации.

Что такое "маска"? Префикс?
 
Сверху