Memcached
Verteilter Cache, welcher im Arbeitsspeicher liegt. Wird häufig als Cache für Webseiten genutzt, um generierte Inhalte zwischenzuspeichern. Zeichnet sich durch sehr niedrige Latenz und hohe Performance aus.
Übersicht
Memcached kann selbst gehosted werden. Dabei fallen keinerlei Lizenzgebühren an und der Code ist OpenSource.
Es handelt sich um einen High-Performance Server, der einen verteilten Objekt Cache im Arbeitsspeicher anbietet. Dieser folgt dem Key-Value Prinzip, d. h. auch komplexe Datenstrukturen werden einfach als Wert zu einem Schlüssel gespeichert. Hieraus ergibt sich eine minimale Latenz, was es zu einem hervorragenden Cache für z. B. Webseiten macht. Angenommen eine Webseite mit dynamischen Inhalten muss bei jedem Seitenaufruf z. B. Artikel samt Preisen und Bildern suchen, zusammenfügen und als Webseite an den Anwender zurückgeben. Hierfür benötigt die Seite eine Menge Ressourcen und Zeit. Wenn die Daten aber nicht ständige in Sekunden geändert werden, macht es viel mehr Sinn diese in einem Cache abzulegen für eine kurze Zeit, sodass zumindest nicht für jeden Aufruf die Seite neu gebaut werden muss. Hier kommt der Memcached ins Spiel, dieser Speichert für einen gewissen Zeitraum die Daten, sodass diese direkt geladen werden können und wenn sie abgelaufen sind, beim nächsten Aufruf einmal generiert und im Cache abgelegt werden.
Docker Installation
Da Memcached nur Daten im Arbeitsspeicher zwischenspeichert, muss fast nichts konfiguriert werden, um einen Server bereitzustellen. Die folgende minimale Docker Compose Konfiguration reicht völlig aus, um einen Cache Server bereitzustellen.
services:
memcached:
image: memcached
container_name: memcached
restart: unless-stopped
Der Dienst memcached kann nun in eine beliebige andere Compose Konfiguration kopiert werden, um dort als Cache zu dienen. Dann nur noch bei den anderen Diensten den Servernamen hinterlegen und fertig.
Go Memcache
Gomemcache ist eine Bibliothek für Go, die einen Client für den In-Memory Cache Memcached bereitstellt.
import (
"github.com/bradfitz/gomemcache/memcache"
)
func main() {
mc := memcache.New("10.0.0.1:11211", "10.0.0.2:11211", "10.0.0.3:11212")
mc.Set(&memcache.Item{Key: "foo", Value: []byte("my value")})
it, err := mc.Get("foo")
...
}