,

Memcached vs wp transient vs wp postmeta api

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); // $valueCode 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)