W tym wpisie porównamy w skrócie trzy tytułowe rozwiązania – dzięki temu będziecie mogli dobrać odpowiednie rozwiązanie do problemu.
Memcached
- memcached jest zazwyczaj zainstalowany na serwerze (przez hostingodawcę), nie wymaga WP – związany jest z samym PHPem
- memcache ≠ memcached – używajcie memcached bo jest nowsze i ogólnie to rozwinięcie/kontynuacja wersji bez „d”
- memcached nie zapewnia że dana zmienna będzie dostępna przez cały „expiration time” – jeśli braknie miejsca na nowe zmienne (klucze) to usuwane są najpierw przeterminowane, jeśli takich nie ma to usuwany jest ten który nie był najdłużej używany
- jeśli „expiration time” jest większy niż 30 dni (w sekundach) wtedy podana wartość uznawana jest za UNIX time i o tym czasie będzie „expired”
- uruchamianie memcached na localu (Mac, terminal):
memcached -d
- example.php:
$key = 'siemka';
$value = 'uszanowanko';
$expiration = 5; // 5 seconds max lifetime
$mc = new Memcached();
$mc->addServer('127.0.0.1', 11211);
$val = $mc->get($key);
var_dump($val); // false or $value if not after expiration time
if (empty($val)) {
$mc->set($key, $value, $expiration);
}
$val = $mc->get($key);
var_dump($val); // $value
Code language: PHP (php)
Transienty
- transient NIE gwarantuje że przez X czasu będzie dostępny tylko, że po X czasu będzie już usunięty ale może być usunięty wcześniej (np. przy aktualizacjach)
- example.php:
require "wp-load.php";
$transient = 'test';
$value = 'siemka';
$expiration = 5; // 5 seconds max lifetime;
$val = get_transient($transient);
var_dump($val); //false (no transient) or $value if script was run less than $expiration seconds ago
var_dump(set_transient($transient, $value, $expiration));
$val = get_transient($transient);
var_dump($val); // $value
var_dump(delete_transient($transient));
$val = get_transient($transient); //false - no trasient
var_dump($val);
Code language: PHP (php)
Postmeta
- sami musimy zarządzać usuwaniem ale za to mamy (własną) gwarancję że dane tam będą tak długo
jak chcemy - musimy “teoretycznie” dodawać meta dla jakiegoś id z drugiej strony ten id nie musi istnieć ?
- example.php:
require "wp-load.php";
$field_name = 'test';
$post_id = 1;
$value = 'siemka';
$val = get_post_meta($post_id , $field_name, false);
var_dump($val);
$update = update_post_meta($post_id , $field_name, $value);
var_dump($update);
$val = get_post_meta($post_id , $field_name, false);
var_dump($val);
var_dump(delete_post_meta($post_id , $field_name));
$val = get_post_meta($post_id , $field_name, false);
var_dump($val);
Code language: PHP (php)
Dodaj komentarz