Web GUI for managing Redis, Memcached, APCu, OPCache, and Realpath with data management.
- Clean, responsive interface with a Dark Mode.
- Switch between multiple configured servers for Redis, Memcached.
- Back up and restore your data.
- Quickly find keys across your cache.
- No composer required to run.
- Docker ready.
- Works with both phpredis and Predis clients.
- View, add, edit, and delete keys. Supports all Redis data types.
- Cluster support.
- Supports ACL.
- Detailed server statistics including command calls, memory usage, uptime, connected clients, and general info.
- View the Redis slowlog to debug performance issues.
- Supports both SCAN and KEYS commands for retrieving keys.
- Uses a custom client, so no memcache(d) extension is required.
- View, add, edit, and delete keys.
- Server Stats including uptime, memory usage, connections, and more.
- Slabs & Items info.
- Commands Stats.
- APCu:
- View, edit, and delete user-cached entries.
- View cache information and memory usage statistics.
- OPcache:
- View and invalidate cached scripts.
- Get statistics on memory usage, hit rates, and cached keys.
- Realpath Cache:
- View and clear PHP's realpath cache entries.
Unzip the archive and launch index.php in a web browser. No installation is required.
If you use the defaults (e.g., Redis, Memcached servers), everything should work out of the box.
To customize the configuration, do not edit config.dist.php directly, but copy it into config.php.
Replace all files and delete the /tmp/twig folder (it contains compiled Twig templates).
If you get the error "Fatal error: Allowed memory size of x bytes exhausted" or a blank page, increase the PHP memory
limit or enable the SCAN command (set PCA_REDIS_0_SCANSIZE or uncomment scansize in config.php).
For Redis databases with more than 100 000 keys, SCAN is used automatically (the limit is configurable with scanthreshold).
You can add these links to your cronjob to collect metrics when the dashboard is not open:
Redis https://example.com/phpCacheAdmin/?dashboard=redis&server=0&ajax&metrics
Memcached https://example.com/phpCacheAdmin/?dashboard=memcached&server=0&ajax&metrics
server=0is the default server ID.
Metrics are collected whenever this link is refreshed, so you can set any time in the cronjob.
If you have authentication enabled, set authtoken in config.php and append &token=your-secret-token
to the cronjob URL so it can collect metrics without a login session.
All keys from the config file are supported ENV variables,
they just must start with PCA_ prefix.
Options with an array can be set using "dot notation" but use _ instead of a dot.
Or you can even use JSON (e.g., Redis SSL option).
Redis:
PCA_REDIS_0_NAMEThe server name (optional).PCA_REDIS_0_HOSTOptional when a path or nodes is specified.PCA_REDIS_0_NODESList of cluster nodes. You can set value as JSON["127.0.0.1:7000","127.0.0.1:7001","127.0.0.1:7002"].PCA_REDIS_0_PORTOptional when the default port is used.PCA_REDIS_0_SCHEMEConnection scheme (optional). If you need a TLS connection, set it totls.PCA_REDIS_0_SSLSSL options for TLS. Requires Redis >= 6.0 (optional). You can set value as JSON{"cafile":"private.pem","verify_peer":true}.PCA_REDIS_0_DATABASEDefault database (optional).PCA_REDIS_0_USERNAMEACL - requires Redis >= 6.0 (optional).PCA_REDIS_0_PASSWORDOptional.PCA_REDIS_0_AUTHFILEFile with a password, e.g., Docker secrets (optional).PCA_REDIS_0_PATHUnix domain socket (optional).PCA_REDIS_0_DATABASESNumber of databases, use this if the CONFIG command is disabled (optional).PCA_REDIS_0_SCANTHRESHOLDUse SCAN automatically instead of KEYS when the database has more keys than this, 1000 keys are retrieved (optional). Default 100_000.PCA_REDIS_0_SCANSIZEAlways use SCAN and retrieve at most this many keys, regardless of the threshold (optional).
Memcached:
PCA_MEMCACHED_0_NAMEThe server name (optional).PCA_MEMCACHED_0_HOSTOptional when a path is specified.PCA_MEMCACHED_0_PORTOptional when the default port is used.PCA_MEMCACHED_0_PATHUnix domain socket (optional).
Other:
PCA_PHP_MEMORY_LIMITIn case you need to increase the PHP memory limit in Docker.PCA_NGINX_PORTIn case you need to change NGINX port in Docker.
Open the config file for more info.
To add another server, add the same environment variables, but change
0to1(2for third server and so on).
You can keep these variables in a .env file instead of exporting them in the shell.
This requires vlucas/phpdotenv:
composer require vlucas/phpdotenvCopy .env.example to .env and adjust the values.
The following files are loaded automatically (in order of precedence, the more specific file wins):
.env.{environment}.local.env.{environment}.env.local.env
{environment} comes from the PCA_ENV (or APP_ENV) variable, e.g., PCA_ENV=development also loads .env.development.
This lets you keep committed defaults in .env and override them locally in .env.local, which is git-ignored.
Real environment variables (e.g., set by Docker) always take precedence over the values in .env files,
so you can still override anything at runtime.
A Docker image is also available: https://hub.docker.com/r/robinn/phpcacheadmin
Run with a single command:
docker run -p 8080:80 -d --name phpcacheadmin -e "PCA_REDIS_0_HOST=redis_host" -e "PCA_REDIS_0_PORT=6379" -e "PCA_MEMCACHED_0_HOST=memcached_host" -e "PCA_MEMCACHED_0_PORT=11211" robinn/phpcacheadminOr use it in docker-compose.yml
services:
phpcacheadmin:
image: robinn/phpcacheadmin
ports:
- "8080:80"
#volumes:
# If you want to use config.php instead of ENV variables
# - "./config.php:/var/www/html/config.php"
environment:
- PCA_REDIS_0_HOST=redis
- PCA_REDIS_0_PORT=6379
- PCA_MEMCACHED_0_HOST=memcached
- PCA_MEMCACHED_0_PORT=11211
links:
- redis
- memcached
redis:
image: redis
memcached:
image: memcached- PHP >= 8.2 (Use v1 branch if you need support for >=7.4)
- Redis server >= 4.0
- Memcached server >= 1.4.31. SASL is not supported because there is no way to get the keys
- sqlite3 extension for metrics
It is not necessary to have all dashboards enabled.
Here is an example of how to implement a custom dashboard
- FileCache (
robinn/cache) dashboard.
Pull Requests are disabled to prevent AI-generated garbage.
If you have a feature request, suggestion, or have found a bug, please open an Issue describing what you would like to see.