Linux.memcached: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Root (Diskussion | Beiträge) |
|||
(31 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
* der Linux Server-Dämon "memcached" bietet eine Semi-Persistente Speicherung von Key+Value Paaren an. Die Daten bleiben erhalten bis der Memcache-Server neu gestartet wird. | |||
* TWebShop konnektiert mit dem PHP-Modul "memcached" auf diesen Server um eine Round-Robin Sequenz zur erhalten. Darüber wählen alle beteiligten laufenden WebShop-Forks einen der laufenden XMLRPC- Dienste aus. Eine faire Lastverteilung wird so erreicht. | |||
XMLSERVER-LaufendeNummer = inc(RoundRobinsequenz) mod XMLSERVER-AnzahlDienste | |||
* Die Funktion XMLRPC.Versandkosten speichert ihr Ergebnis im memcache ab, sobald der Parameter [[Systemeinstellungen#memcacheHost]] gesetzt ist. | |||
== Installation == | == Installation == | ||
# | === Linux-Server Dienst "memcached" === | ||
# | |||
# Vorbereitungen, Memcached, | |||
# PHP pecel | |||
# | |||
zypper install memcached | |||
systemctl enable memcached | |||
systemctl start memcached | |||
==== Test ==== | |||
nc localhost 11211 | |||
version | |||
# | |||
# Die Antwort des Servers sollte sein | |||
# | |||
VERSION 1.4.2 | |||
==== Mehr als nur lokalen Zugriff erlauben ==== | |||
Als default läuft der memcache Server mit einem "-l <IP-Adresse>" Paramter. Zumeist ist eine Beschränkung auf die lokale Maschine gegeben: "-l 127.0.0.1". Um ihn im Netzwerk sichtbar zu machen muss dieser Anteil der Parameter aus dem Programmaufruf entfernt werden. | |||
joe /etc/sysconfig/memcached | |||
# | |||
# "" bedeute ALLE Netzwerkinterfaces, Sicherheits-Relevant | |||
# | |||
MEMCACHED_PARAMS="" | |||
=== PHP Module "memcached" === | |||
* OrgaMon verwendet nicht PHP "memcache" sondern nur PHP "memcached" | |||
zypper install php5-pear | |||
zypper install php5-devel | |||
zypper install libmemcached-devel | zypper install libmemcached-devel | ||
# PHP-Modul Memcached installieren | |||
cd /usr/include/libmemcached-1.0 | |||
pecl install memcached | |||
# im Verzeichnis /etc/php5/conf.d | |||
joe memcached.ini | |||
# Datei: /etc/php5/conf.d/memcache.ini | |||
# Nur diese Zeile reicht | |||
extension=memcache.so | |||
# erste Prüfung ob das Modul nun vorhanden ist? | |||
php --modules | |||
# Apache das neue Modul laden lassen starten lassen | |||
rcapache2 restart | |||
# nun ein phpinfo Website aufrufen ob es geklappt hat | |||
# und memcached im PHP zur Verfügung steht | |||
== Verwendung == | |||
=== Console === | |||
memdump --servers=localhost | |||
=== Pascal === | |||
.\PASconTools\memcache.pas | |||
=== PHP === | |||
TWebShop\core\semipersistent_sequence.php | |||
<code> | <code> | ||
// Stellt sicher, dass entweder | |||
// * die Verbindung zum MemCache besteht | |||
// * c_spc = -1, das bedeutet der Server läuft nicht | |||
function semiEnsureOpen() { | |||
global $m_spc; | |||
global $c_spc; | |||
global $errorlist; | |||
// Init? | |||
if ($m_spc == null) { | |||
$m_spc = new Memcached(TWEBSHOP_ID . SEQUENCE_NAMESPACE); | |||
if ($m_spc->addServer(SEQUENCE_HOST, SEQUENCE_PORT)) { | |||
$m_spc->add(SEQUENCE_NAME . SEQUENCE_NAMESPACE, 0); | |||
} else { | |||
trigger_error("Verbindung zu " . SEQUENCE_HOST . " fehlgeschlagen!", E_USER_ERROR); | |||
$c_spc = -1; | |||
$errorlist->add("memcached: Verbindung zu " . SEQUENCE_HOST . " fehlgeschlagen!"); | |||
} | |||
} | |||
} | |||
// liefert einfach die nächste Nummer eines | |||
// Zählers, der den "semi"-"persistent" ist, | |||
// das heisst er lebt länger als das Skript | |||
// erst durch einen Server-Neustart wird dessen | |||
// Wert auf "0" gesetzt. In einer Multi-User | |||
// Umgebung (wie durch das Internet massiv | |||
// gegeben) kann so ein fairer Zähler implementiert | |||
// werden. | |||
function getSemiPersistentSequence() { | |||
global $m_spc; | |||
global $c_spc; | |||
// Init? | |||
semiEnsureOpen(); | |||
// Increment! | |||
if ($c_spc < 0) | |||
$c_spc += -1; | |||
else | |||
$c_spc = $m_spc->increment(SEQUENCE_NAME . SEQUENCE_NAMESPACE, 1); | |||
// Return | |||
return $c_spc; | |||
} | } | ||
</code> | </code> | ||
=== Putty === | |||
Mit Putty im Telnet-Modus auf den Host mit dem Port 11211 konnektieren. | |||
version | |||
eingeben oder | |||
incr sequence.69VVTGKZ1 0 | |||
telnet 10.0.0.2 11211 | |||
== Alle Werte löschen == | |||
=== via telnet === | |||
flush_all | |||
=== via command-line === | |||
memcflush --servers=localhost:11211 | |||
== Werte == | |||
=== sequence.69VVTGKZ1 === | |||
Die Round-Robin-Sequenz des TWebShop |
Aktuelle Version vom 15. Juli 2016, 09:13 Uhr
- der Linux Server-Dämon "memcached" bietet eine Semi-Persistente Speicherung von Key+Value Paaren an. Die Daten bleiben erhalten bis der Memcache-Server neu gestartet wird.
- TWebShop konnektiert mit dem PHP-Modul "memcached" auf diesen Server um eine Round-Robin Sequenz zur erhalten. Darüber wählen alle beteiligten laufenden WebShop-Forks einen der laufenden XMLRPC- Dienste aus. Eine faire Lastverteilung wird so erreicht.
XMLSERVER-LaufendeNummer = inc(RoundRobinsequenz) mod XMLSERVER-AnzahlDienste
- Die Funktion XMLRPC.Versandkosten speichert ihr Ergebnis im memcache ab, sobald der Parameter Systemeinstellungen#memcacheHost gesetzt ist.
Installation
Linux-Server Dienst "memcached"
# Vorbereitungen, Memcached, # PHP pecel # zypper install memcached systemctl enable memcached systemctl start memcached
Test
nc localhost 11211 version # # Die Antwort des Servers sollte sein # VERSION 1.4.2
Mehr als nur lokalen Zugriff erlauben
Als default läuft der memcache Server mit einem "-l <IP-Adresse>" Paramter. Zumeist ist eine Beschränkung auf die lokale Maschine gegeben: "-l 127.0.0.1". Um ihn im Netzwerk sichtbar zu machen muss dieser Anteil der Parameter aus dem Programmaufruf entfernt werden.
joe /etc/sysconfig/memcached
# # "" bedeute ALLE Netzwerkinterfaces, Sicherheits-Relevant # MEMCACHED_PARAMS=""
PHP Module "memcached"
- OrgaMon verwendet nicht PHP "memcache" sondern nur PHP "memcached"
zypper install php5-pear zypper install php5-devel zypper install libmemcached-devel # PHP-Modul Memcached installieren cd /usr/include/libmemcached-1.0 pecl install memcached # im Verzeichnis /etc/php5/conf.d joe memcached.ini # Datei: /etc/php5/conf.d/memcache.ini # Nur diese Zeile reicht extension=memcache.so # erste Prüfung ob das Modul nun vorhanden ist? php --modules # Apache das neue Modul laden lassen starten lassen rcapache2 restart # nun ein phpinfo Website aufrufen ob es geklappt hat # und memcached im PHP zur Verfügung steht
Verwendung
Console
memdump --servers=localhost
Pascal
.\PASconTools\memcache.pas
PHP
TWebShop\core\semipersistent_sequence.php
// Stellt sicher, dass entweder
// * die Verbindung zum MemCache besteht
// * c_spc = -1, das bedeutet der Server läuft nicht
function semiEnsureOpen() {
global $m_spc;
global $c_spc;
global $errorlist;
// Init?
if ($m_spc == null) {
$m_spc = new Memcached(TWEBSHOP_ID . SEQUENCE_NAMESPACE);
if ($m_spc->addServer(SEQUENCE_HOST, SEQUENCE_PORT)) {
$m_spc->add(SEQUENCE_NAME . SEQUENCE_NAMESPACE, 0);
} else {
trigger_error("Verbindung zu " . SEQUENCE_HOST . " fehlgeschlagen!", E_USER_ERROR);
$c_spc = -1;
$errorlist->add("memcached: Verbindung zu " . SEQUENCE_HOST . " fehlgeschlagen!");
}
}
}
// liefert einfach die nächste Nummer eines
// Zählers, der den "semi"-"persistent" ist,
// das heisst er lebt länger als das Skript
// erst durch einen Server-Neustart wird dessen
// Wert auf "0" gesetzt. In einer Multi-User
// Umgebung (wie durch das Internet massiv
// gegeben) kann so ein fairer Zähler implementiert
// werden.
function getSemiPersistentSequence() {
global $m_spc;
global $c_spc;
// Init?
semiEnsureOpen();
// Increment!
if ($c_spc < 0)
$c_spc += -1;
else
$c_spc = $m_spc->increment(SEQUENCE_NAME . SEQUENCE_NAMESPACE, 1);
// Return
return $c_spc;
}
Putty
Mit Putty im Telnet-Modus auf den Host mit dem Port 11211 konnektieren.
version
eingeben oder
incr sequence.69VVTGKZ1 0
telnet 10.0.0.2 11211
Alle Werte löschen
via telnet
flush_all
via command-line
memcflush --servers=localhost:11211
Werte
sequence.69VVTGKZ1
Die Round-Robin-Sequenz des TWebShop