Memcached is an open-source high performance general-purpose distributed key-value. Memcached mostly used to cache dynamic web applications by cache the database query. In simple words, memcached serve the static version of the dynamic website, it’s API available for most of popular languages.
This how-to tutorial will cover how to install memcached on Debian 10, but it’s applicable to Ubuntu, Linux Mint and any Debian derivatives.
Update and Upgrade Pakcages
sudo apt update; sudo apt upgrade -y
Install memcached package
sudo apt install memcached -y
Check memcached status
sudo systemctl status memcached
memcached using port 11211 by default, to verify that port already opened use ss
since memcached bind to 127.0.0.1 it’s safe from outside attacker by default.
Memcache Configuration File
To configure memcached, we need to change the configuration file on /etc/memcached.conf
, for beginner I recommended to enable verbose mode by remove # in front of -vv
a lot easier to troubleshooting when verbose mode used.
To allow memcached used by another server on local network (ex EC2, GCP, Linode, DigitalOcean), first, check your private IP using ip addr
my private IP address is 192.168.133.27, I’ll use that IP for memchaced listen to.
sudo sed -i 's/127.0.0.1/PRIVATE-IP/g' /etc/memcached.conf
to allow other server to access memcached, whitelist the IP using iptables (ex from IP 192.168.133.28), change the private IP to public IP if you use public IP.
sudo iptables -A INPUT -s 192.168.133.28 -p tcp --dport 11211 -j ACCEPT
Testing Memcached
Before we create a script to testing Memcached from PHP, first install Memcached extention for PHP
sudo apt install php-memcached -y
Let’s create simple PHP application memcached.php
<?php // memcached.php $memcached = new Memcached(); $memcached->addServer("127.0.0.1", 11211); $timestamp = date('Y-m-d H:i:s'); $getDate = $memcached->get("timestamp"); if ($getDate) { echo "Cached: " . $getDate . "\n"; } else { echo "Not cached yet: " . $timestamp . "\n"; $memcached->set("timestamp", $timestamp); }
that script will asking for timestamp value, if the value not found it’ll set the value to memcached server, then next time script asking for timestime it’s served by memcached.
run the memcached.php script 5 times using bash loop
for a in {1..5}; do php memcached.php ; done