Callback-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ кСша со сквозным Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ

Callback-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ кСша со сквозным Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° элСмСнт Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с сСрвСра. Π’ callback-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ пСрСдаётся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Memcached, Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΈ пСрСмСнная значСния ΠΏΠΎ ссылкС. Callback-функция ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° установку значСния ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ значСния true ΠΈΠ»ΠΈ false. Если callback-функция Π²Π΅Ρ€Π½ΡƒΠ»Π° true, Memcached сохранит Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° сСрвСрС ΠΈ Π²Π΅Ρ€Π½Ρ‘Ρ‚ Π΅Π³ΠΎ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Волько ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Memcached::get() ΠΈ Memcached::getByKey() ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ эти callback-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» memcache Π½Π΅ Π΄Π°Ρ‘Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ Π½Π΅ Π±Ρ‹Π»ΠΈ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΌ запросС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #1 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ callback-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сквозного чтСния

<?php

$m
= new Memcached();
$m->addServer('localhost', 11211);

$profile_info = $m->get('user:'.$user_id, 'user_info_cb');

function
user_info_cb($memc, $key, &$value)
{
$user_id = substr($key, 5);
/* Π˜Ρ‰Π΅ΠΌ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π‘Π” */
/* ... */
$value = $profile_info;
return
true;
}

?>
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 2 notes

up
3
chadkouse ΒΆ
14 years ago
Or just set the value within the callback with your own custom expiration time and return false.  I think it's cleaner.
up
2
oorza2k5 at gmail dot com ΒΆ
17 years ago
This isn't specified anywhere, so I had a gander at the source...

The expiry on read-through cache set values is set to 0, or forever.  This means if you want your key to implicitly expire, don't use the callback methods, instead check for boolean false as a return and manually set the value, at least for now.