Synopsis #
memcached is a high-performance in-memory key-value store used primarily for caching data to reduce database load and latency in dynamic web applications. It provides a simple TCP protocol for setting and retrieving short-lived values and is often used by frameworks like Django, Rails, and PHP.
memcached is available on OpenBSD via packages and integrates with rcctl(8) for service management.
Unlike Redis, memcached is not persistent and supports only very simple key-value operations.
Installation #
Install memcached using the package system:
doas pkg_add memcached
This installs:
/usr/local/bin/memcached— the daemon/etc/rc.d/memcached—rcctlcontrol script
Configuration #
memcached is typically configured via command-line options. Enable the packaged service before setting persistent rcctl flags:
doas rcctl enable memcached
doas rcctl set memcached flags "-u _memcached -m 64 -l 127.0.0.1 -p 11211"
Common options:
-m 64— allocate 64 MB of RAM-l 127.0.0.1— bind only to localhost-p 11211— default TCP port
To apply changes:
doas rcctl enable memcached
doas rcctl start memcached
Testing Basic Usage #
Use the telnet(1) client to test memcached:
$ telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.
set testkey 0 300 5
hello
STORED
get testkey
VALUE testkey 0 5
hello
END
set <key> <flags> <ttl> <bytes>get <key>
TTL values up to 30 days are relative seconds; larger values are Unix timestamps. Zero disables expiry. Items can still be evicted when memory is needed.
To quit:
quit
Using with Clients #
memcached is supported by many programming languages. Examples:
- PHP:
memcachedormemcacheextension - Python:
python3-memcachedorpymemcache - Ruby:
dalligem
Example Python usage:
import memcache
mc = memcache.Client(['127.0.0.1:11211'])
mc.set('greeting', 'hello', time=300)
print(mc.get('greeting'))
Security Considerations #
The release package builds TLS support, and a SASL flavor is available. Neither is enabled by the simple configuration below; restrict the listener and firewall to trusted clients. Consult the installed README before enabling authentication or TLS.
By default, it should be bound to 127.0.0.1. If remote access is necessary:
- Adjust flags:
doas rcctl set memcached flags "-u _memcached -m 128 -l 192.0.2.1 -p 11211"
- Restrict access using
pf(4):
pass in quick on $int_if proto tcp from 192.0.2.0/24 to port 11211
block in on $int_if proto tcp from any to port 11211
- Reload
pfand restart memcached:
doas pfctl -f /etc/pf.conf
doas rcctl restart memcached
Never expose memcached to the public Internet.
Service Management #
To start and enable at boot:
doas rcctl enable memcached
doas rcctl start memcached
To stop or restart:
doas rcctl stop memcached
doas rcctl restart memcached
Check status:
doas rcctl check memcached
Logging #
The daemon writes verbose diagnostics to standard error. Do not assume that the packaged service sends these to syslog; inspect the service launch and use a controlled foreground diagnostic session if needed.
To increase verbosity, add -v or -vv to flags:
doas rcctl set memcached flags "-u _memcached -m 64 -l 127.0.0.1 -p 11211 -v"
doas rcctl restart memcached