PHP & APC: Един обект в кеша с множество ключове?

Внедрявам кеширане на обекти в PHP приложение, използвайки APC.

Проблемът е, че понякога избирам нещо от базата данни въз основа на различни критерии. Например, когато потребител влезе в уеб сайта, всичко, което имам, е неговото потребителско име и парола, така че ще избера от базата данни въз основа на потребителското име.

В други ситуации ще имам потребителския идентификатор и искам да избера въз основа на него.

Всеки път, когато избирам потребител, бих искал да добавя обекта към кеша.

Да речем, че съм го поставил там веднъж с ключа "User.user_id.123" и веднъж с "User.user_name.JoeSmith".

Това обаче означава, че току-що съм поставил един и същ обект в кеша си два пъти, нали? Това не изглежда толкова ефективно.

Има ли начин да поставите един обект в APC кеш с множество ключове, за да го намерите по-късно?


person Sean    schedule 01.02.2010    source източник


Отговори (2)


Можете да поставите потребителския идентификатор в кеша, като User.user_name.JoeSmith=123.

Но се съмнявам в ефективността на съхраняването на тези стойности в кеша. Това със сигурност ще ускори нещата по време на изпълнение, но може да доведе до няколко проблема по време на разработката (защото по същество съхранявате едни и същи стойности два пъти, веднъж в базата данни и веднъж в кеша). Някои неща, които веднага изскачат в съзнанието ми:

  • Сигурни ли сте, че обезсилвате кеша, ако потребителска стойност се промени?
  • Обектът препраща ли към други обекти? Кешът анулира ли се, след като препратеният обект се промени?
person soulmerge    schedule 01.02.2010

Актуализация: Това означава поставяне на един и същ обект в кеша два пъти и това е, което направих. Просто трябва да внимавате да изпразните обект от кеша с всички възможни ключове, когато бъде изтрит или актуализиран.

person Sean    schedule 04.09.2011