• Stars
    star
    204
  • Rank 185,277 (Top 4 %)
  • Language
    PHP
  • License
    GNU General Publi...
  • Created over 9 years ago
  • Updated 8 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

WordPress Object Cache using Redis.

WP Redis

Actively Maintained

Contributors: getpantheon, danielbachhuber, mboynes, Outlandish Josh jspellman jazzs3quence
Tags: cache, plugin, redis
Requires at least: 3.0.1
Tested up to: 6.4.1
Stable tag: 1.4.5-dev
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html

Back your WP Object Cache with Redis, a high-performance in-memory storage backend.

Description

CircleCI

For sites concerned with high traffic, speed for logged-in users, or dynamic pageloads, a high-speed and persistent object cache is a must. You also need something that can scale across multiple instances of your application, so using local file caches or APC are out.

Redis is a great answer, and one we bundle on the Pantheon platform. This is our plugin for integrating with the cache, but you can use it on any self-hosted WordPress site if you have Redis. Install from WordPress.org or Github.

It's important to note that a persistent object cache isn't a panacea - a page load with 2,000 Redis calls can be 2 full seconds of object cache transactions. Make sure you use the object cache wisely: keep to a sensible number of keys, don't store a huge amount of data on each key, and avoid stampeding frontend writes and deletes.

Go forth and make awesome! And, once you've built something great, send us feature requests (or bug reports). Take a look at the wiki for useful code snippets and other tips.

Installation

This assumes you have a PHP environment with the required PhpRedis extension and a working Redis server (e.g. Pantheon). WP Redis also works with Predis via humanmade/wp-redis-predis-client.

  1. Install object-cache.php to wp-content/object-cache.php with a symlink or by copying the file.

  2. If you're not running on Pantheon, edit wp-config.php to add your cache credentials, e.g.:

     $redis_server = array(
         'host'     => '127.0.0.1',
         'port'     => 6379,
         'auth'     => '12345',
         'database' => 0, // Optionally use a specific numeric Redis database. Default is 0.
     );
    
  3. If your Redis server is listening through a sockt file instead, set its path on host parameter and change the port to null:

     $redis_server = array(
         'host'     => '/path/of/redis/socket-file.sock',
         'port'     => null,
         'auth'     => '12345',
         'database' => 0, // Optionally use a specific numeric Redis database. Default is 0.
     );
    
  4. Engage thrusters: you are now backing WP's Object Cache with Redis.

  5. (Optional) To use the wp redis WP-CLI commands, activate the WP Redis plugin. No activation is necessary if you're solely using the object cache drop-in.

  6. (Optional) To use the same Redis server with multiple, discreet WordPress installs, you can use the WP_CACHE_KEY_SALT constant to define a unique salt for each install.

  7. (Optional) To use true cache groups, with the ability to delete all keys for a given group, register groups with wp_cache_add_redis_hash_groups(), or define the WP_REDIS_USE_CACHE_GROUPS constant to true to enable with all groups. However, when enabled, the expiration value is not respected because expiration on group keys isn't a feature supported by Redis.

  8. (Optional) On an existing site previously using WordPress' transient cache, use WP-CLI to delete all (%_transient_%) transients from the options table: wp transient delete-all. WP Redis assumes responsibility for the transient cache.

  9. (Optional) To use Relay instead of PhpRedis as the client define the WP_REDIS_USE_RELAY constant to true. For support requests, please use Relay's GitHub discussions.

WP-CLI Commands

This plugin implements a variety of WP-CLI commands. All commands are grouped into the wp redis namespace.

$ wp help redis

NAME

  wp redis

SYNOPSIS

  wp redis <command>

SUBCOMMANDS

  cli         Launch redis-cli using Redis configuration for WordPress
  debug       Debug object cache hit / miss ratio for any page URL.
  enable      Enable WP Redis by creating the symlink for object-cache.php
  info        Provide details on the Redis connection.

Use wp help redis <command> to learn more about each command.

Contributing

See CONTRIBUTING.md for information on contributing.

Security Policy

Reporting Security Bugs

Please report security bugs found in the WP Redis plugin's source code through the Patchstack Vulnerability Disclosure Program. The Patchstack team will assist you with verification, CVE assignment, and notify the developers of this plugin.

Frequently Asked Questions

Why would I want to use this plugin?

If you are concerned with the speed of your site, backing it with a high-performance, persistent object cache can have a huge impact. It takes load off your database, and is faster for loading all the data objects WordPress needs to run.

How does this work with other caching plugins?

This plugin is for the internal application object cache. It doesn't have anything to do with page caches. On Pantheon you do not need additional page caching, but if you are self-hosted you can use your favorite page cache plugins in conjunction with WP Redis.

How do I disable the persistent object cache for a bad actor?

A page load with 2,000 Redis calls can be 2 full seconds of object cache transactions. If a plugin you're using is erroneously creating a huge number of cache keys, you might be able to mitigate the problem by disabling cache persistency for the plugin's group:

wp_cache_add_non_persistent_groups( array( 'bad-actor' ) );

This declaration means use of wp_cache_set( 'foo', 'bar', 'bad-actor' ); and wp_cache_get( 'foo', 'bad-actor' ); will not use Redis, and instead fall back to WordPress' default runtime object cache.

Why does the object cache sometimes get out of sync with the database?

There's a known issue with WordPress alloptions cache design. Specifically, a race condition between two requests can cause the object cache to have stale values. If you think you might be impacted by this, review this GitHub issue for links to more context, including a workaround.

Changelog

1.4.5-dev

1.4.4 (November 27, 2023)

  • Updates Pantheon WP Coding Standards to 2.0 [#445]
  • Handle duplicate keys in get_multiple function [#448] (props @Souptik2001)

1.4.3 (June 26, 2023)

  • Bug fix: Fixes assumption that CACHE_PORT & CACHE_PASSWORD are Set. [428] (props @timnolte)
  • Adds WP.org validation GitHub action [#435]
  • Bug fix: Fixes incorrect order of array_replace_recursive and other issues [434] (props @timnolte)
  • Bug fix: Replace use of wp_strip_all_tags in object-cache.php [434] (props @timnolte)
  • Bug fix: Don't strip tags from the cache password. [434] (props @timnolte)

1.4.2 (May 15, 2023)

  • Bug fix: Removes exception loop caused by esc_html in _exception_handler() [421]

1.4.1 (May 11, 2023)

  • Bug fix: wp_cache_flush_runtime should only clear the local cache [413]

1.4.0 (May 9, 2023)

  • Add support for flush_runtime and flush_group functions [#405]
  • Add pantheon-wp-coding-standards [#400]
  • Update CONTRIBUTING.MD [#406]
  • Update Composer dependencies [#401]

1.3.5 (April 6, 2023)

  • Bump tested up to version to 6.2
  • Update Composer dependencies [#394]

1.3.4 (March 7, 2023)

  • Set missing_redis_message if Redis service is not connected [#391]

1.3.3 (February 28, 2023)

  • Add PHP 8.2 support [#388]
  • Remove Grunt, add valid license to Composer file [#387]
  • Update Composer dependencies [#384] [#385]

1.3.2 (December 5, 2022)

  • Fix broken wp_cache_supports function [#382].

1.3.1 (December 2, 2022)

  • Declare wp_cache_supports function and support features. [#378]
  • Make dependabot target develop branch for PRs. [#376]
  • Declare wp_cache_supports function and support features. [#378]

1.3.0 (November 29, 2022)

  • Added CONTRIBUTING.MD and GitHub action to automate deployments to wp.org. [#368]

1.2.0 (February 17, 2022)

  • Adds support for Relay via WP_REDIS_USE_RELAY constant [#344].

1.1.4 (October 21, 2021)

  • Fixes some faulty logic in WP_REDIS_IGNORE_GLOBAL_GROUPS check [#333].

1.1.3 (October 21, 2021)

  • Supports a WP_REDIS_IGNORE_GLOBAL_GROUPS constant to prevent groups from being added to global caching group [#331].

1.1.2 (March 24, 2021)

  • Applies logic used elsewhere to fall back to $_SERVER in wp_redis_get_info() [#316].

1.1.1 (August 17, 2020)

  • Returns cache data in correct order when using wp_cache_get_multiple() and internal cache is already primed [#292].

1.1.0 (July 13, 2020)

  • Implements wp_cache_get_multiple() for WordPress 5.5 [#287].
  • Bails early when connecting to Redis throws an Exception to avoid fatal error [285].

1.0.1 (April 14, 2020)

  • Adds support for specifying Redis database number from environment/server variables [#273].

1.0.0 (March 2, 2020)

  • Plugin is stable.

0.8.3 (February 24, 2020)

  • Fixes wp redis cli by using proc_open() directly, instead of WP_CLI::launch() [#268].

0.8.2 (January 15, 2020)

  • Catches exceptions when trying to connect to Redis [#265].

0.8.1 (January 10, 2020)

  • Adds WP_REDIS_DEFAULT_EXPIRE_SECONDS constant to set default cache expire value [#264].

0.8.0 (January 6, 2020)

  • Uses flushdb instead of flushAll to avoid flushing the entire Redis instance [#259].

0.7.1 (December 14, 2018)

  • Better support in wp_cache_init() for drop-ins like LudicrousDB [#231].
  • Cleans up PHPCS issues.

0.7.0 (August 22, 2017)

0.6.2 (June 5, 2017)

  • Bug fix: Preserves null values in internal cache.
  • Bug fix: Converts numeric values to their true type when getting.

0.6.1 (February 23, 2017)

  • Bug fix: correctly passes an empty password to redis-cli.
  • Variety of improvements to the test suite.

0.6.0 (September 21, 2016)

  • Introduces three new WP-CLI commands: wp redis debug to display cache hit/miss ratio for any URL; wp redis info to display high-level Redis statistics; wp redis enable to create the object-cache.php symlink.
  • Permits a Redis database to be defined with $redis_server['database'].
  • Introduces wp_cache_add_redis_hash_groups(), which permits registering specific groups to use Redis hashes, and is more precise than our existing WP_REDIS_USE_CACHE_GROUPS constant.

0.5.0 (April 27, 2016)

  • Performance boost! Removes redundant exists call from wp_cache_get(), which easily halves the number of Redis calls.
  • Uses add_action() and $wpdb in a safer manner for compatibility with Batcache, which loads the object cache before aforementioned APIs are available.
  • For debugging purposes, tracks number of calls to Redis, and includes breakdown of call types.
  • Adds a slew of more explicit test coverage against existing features.
  • For consistency with the actual Redis call, calls del instead of delete.
  • Bug fix: If a group isn't persistent, don't ever make an exists call against Redis.

0.4.0 (March 23, 2016)

  • Introduces wp redis-cli, a WP-CLI command to launch redis-cli with WordPress' Redis credentials.
  • Bug fix: Ensures fail back mechanism works as expected on multisite, by writing to sitemeta table instead of the active site's options table.
  • Bug fix: Uses 'default' as the default cache group, mirroring WordPress core, such that $wp_object_cache->add( 'foo', 'bar' ) === wp_cache_add( 'foo', 'bar' ).

0.3.0 (February 11, 2016)

  • Introduces opt-in support for Redis cache groups. Enable with define( 'WP_REDIS_USE_CACHE_GROUPS', true );. When enabled, WP Redis persists cache groups in a structured manner, instead of hashing the cache key and group together.
  • Uses PHP_CodeSniffer and WordPress Coding Standards sniffs to ensure WP Redis adheres to WordPress coding standards.
  • Bug fix: Permits use of a Unix socket in $redis_server['host'] by ensuring the supplied $port is null.

0.2.2 (November 24, 2015)

  • Bug fix: use INSERT IGNORE INTO instead of INSERT INTO to prevent SQL errors when two concurrent processes attempt to write failback flag at the same time.
  • Bug fix: use E_USER_WARNING with trigger_error().
  • Bug fix: catch Exceptions thrown during authentication to permit failing back to internal object cache.

0.2.1 (November 17, 2015)

  • Bug fix: prevent SQL error when $wpdb->options isn't yet initialized on multisite.

0.2.0 (November 17, 2015)

  • Gracefully fails back to the WordPress object cache when Redis is unavailable or intermittent. Previously, WP Redis would hard fatal.
  • Triggers a PHP error if Redis goes away mid-request, for you to monitor in your logs. Attempts one reconnect based on specific error messages.
  • Forces a flushAll on Redis when Redis comes back after failing. This behavior can be disabled with the WP_REDIS_DISABLE_FAILBACK_FLUSH constant.
  • Show an admin notice when Redis is unavailable but is expected to be.

0.1

  • Initial commit of working code for the benefit of all.

Upgrade Notice

1.4.0 (May 9, 2023)

WP Redis 1.4.0 adds support for the flush_runtime and flush_group functions. If you've copied object-cache.php and made your own changes, be sure to copy these additions over as well.

More Repositories

1

terminus

The Pantheon CLI — a standalone utility for performing operations on the Pantheon Platform
PHP
298
star
2

wordpress-at-scale

Gathering best practices from the community to help developers and site owners find success in scaling WordPress.
197
star
3

documentation

Pantheon Docs
JavaScript
184
star
4

autotag

Git repository version tagging tool
Go
172
star
5

WordPress

WordPress upstream for the Pantheon website platform. Includes a platform integration plugins and a pre-configured wp-config.php.
PHP
157
star
6

wp-native-php-sessions

Implement native PHP sessions stored in the database for WordPress.
PHP
127
star
7

quicksilver-examples

Example scripts for using Pantheon's Quicksilver Platform Hooks
PHP
127
star
8

solr-power

A WordPress plugin to connect to Pantheon's Apache Solr search infrastructure, or your own!
PHP
123
star
9

drops-7

Pantheon Upstream for Drupal 7 Sites
PHP
97
star
10

wp_launch_check

WP-CLI Plugin to run checks against installation for Performance and Security
PHP
94
star
11

example-wordpress-composer

PHP
91
star
12

example-drops-8-composer

Install drops-8 with Composer on Pantheon.
Shell
91
star
13

wp-saml-auth

Rock-solid SAML authentication for WordPress built on a modern foundation.
PHP
81
star
14

drops-8

Pantheon Upstream for Drupal 8 Sites. Deprecated; please see https://github.com/pantheon-upstreams/drupal-composer-managed
PHP
81
star
15

terminus-build-tools-plugin

Manage multidev environments for a Pantheon site using a GitHub PR workflow.
PHP
81
star
16

drush-config-workflow

Jumpstart your Drupal configuration merge magic with this repo's code and instructions.
Shell
68
star
17

example-terminus-auto-update-script

Shell
56
star
18

fusedav

Successor to git://git.0pointer.de/fusedav.git
C
45
star
19

docker-build-tools-ci

Dockerfile source for docker image pantheon-public/build-tools-ci on quay.io
Shell
33
star
20

github-gist-gutenberg-block

Include GitHub Gists in your Gutenberg posts without the hassle of shortcodes
Shell
33
star
21

pantheon-advanced-page-cache

Plugin to make the most of Pantheon's Global CDN with advanced page caching options.
PHP
32
star
22

pantheon-settings-examples

Pantheon optimized examples for hard-coded Drupal configuration in settings.php
PHP
28
star
23

terminus-secrets-plugin

A simple secrets management plugin for Terminus
PHP
22
star
24

kube-gce-cleanup

Clean up GCE network load-balancer resources left behind by kubernetes (GKE)
Shell
19
star
25

ariadne-extensions

Set of scripts and helper utilities to extend Ariadne GraphQL library
Python
17
star
26

terminus-site-clone-plugin

A Terminus plugin that adds the `site:clone` command to facilitate cloning sites on Pantheon
PHP
17
star
27

terminus-github-actions

A GitHub Action for setting up Pantheon's CLI tool, Terminus.
16
star
28

terminus-rsync-plugin

Terminus Plugin that provides a quick shortcut for rsync-ing files to and from a Pantheon site.
PHP
15
star
29

pantheon-wordpress-upstream-tests

Tests behavior of WordPress Core upstreams for Pantheon. Also within test suites of contrib plugins
Gherkin
15
star
30

iozone

iozone filesystem benchmark, based on v. 3_414
C
14
star
31

quicksilver-pushback

Push any commits made on the Pantheon dashboard back to the original GitHub repository.
PHP
14
star
32

decoupled-kit-js

Pantheon's monorepo for JavaScript SDKs, starter examples, and published npm packages.
JavaScript
14
star
33

pantheon-hud

Pantheon HUD plugin for WordPress providing a heads-up display into your Pantheon environment.
PHP
14
star
34

wordpress-network

This is a derived upstream from https://github.com/pantheon-systems/wordpress which contains the necessary configuration adjustments to make a WordPress Multisite successful on Pantheon.
PHP
14
star
35

terminus-mass-update

A Terminus plugin to apply upstream updates to multiple sites at once
PHP
13
star
36

terminus-composer-plugin

A Terminus plugin for running Composer commands on a Pantheon site
Shell
12
star
37

cassandra-operator

operator for managing cassandra clusters
Go
12
star
38

pantheon-wordpress-develop

A set of scripts to do nightly testing on Pantheon of the latest WordPress commits
PHP
11
star
39

site-audit-tool

Experimental project to extract Site Audit checks into a separate project
PHP
10
star
40

wordpress-bedrock-recommended

Shell
10
star
41

pantheon_domain_masking

Domain Masking helper module for D8
PHP
10
star
42

drupal-composer-managed

Pantheon platform's standard Drupal upstream, and recommended starter template for custom upstreams.
PHP
10
star
43

circleci-orb

Use CircleCI to push code to Pantheon Dev and Multidev Environments
10
star
44

drupal-integrations

Add this project to any Drupal distribution based on drupal/core-composer-scaffold to enable it for use on Pantheon.
PHP
10
star
45

pauditd

go based alternative to auditd
Go
9
star
46

terminus-site-debug

A Terminus plugin that can parse site logs and display NewRelic summary.
PHP
9
star
47

wordpress-composer

WordPress for Pantheon with a composer.json file.
PHP
9
star
48

docker_iptables

Utility to help manually manage iptables port mappings of Docker containers
Python
8
star
49

terminus-drupal-console-plugin

Run Drupal Console commands on Pantheon
Shell
7
star
50

terminus-installer

Installer for Pantheon Terminus
PHP
7
star
51

drops-6

Pantheon Pressflow 6 for DROPs
PHP
7
star
52

pantheon-mu-plugin

Pantheon's WordPress mu-plugin for all WordPress-based upstreams.
PHP
7
star
53

search_api_pantheon

ApachSolr on Pantheon for Drupal 8/9 via Search API
PHP
7
star
54

example-drops-7-composer

Install drops-7 with Composer on Pantheon.
PHP
7
star
55

next-drupal-starter

This repository is a mirror. See https://github.com/pantheon-systems/decoupled-kit-js to join the discussion or submit an issue.
JavaScript
7
star
56

wp-decoupled-preview

Preview WordPress content on Front-end sites including Next.js
PHP
6
star
57

terminus-secrets-manager-plugin

Terminus Secrets Manager Plugin (Early Access)
PHP
6
star
58

localdev-issues

Issue tracking for Pantheon localdev
6
star
59

drupal-recommended

DEPRECATED: Please use https://github.com/pantheon-upstreams/drupal-composer-managed
Shell
6
star
60

wordpress-composer-managed

WordPress boilerplate with Composer, easier configuration, and an improved folder structure
Shell
6
star
61

terminus_debugging_tools

A collection of terminus plugins to facilitate managing sites on Pantheon.
PHP
6
star
62

pmr

Process maps restarter
Python
6
star
63

drops-8-scaffolding

Scaffold files from drops-8: everything except /core, /composer.lock and /vendor
PHP
6
star
64

terminus-quicksilver-plugin

A Terminus plugin to help you get started quickly with Quicksilver
PHP
6
star
65

kube-gce-dns

Kube system service to register services in GCE DNS
Go
5
star
66

gatsby-starter-default

Development repository for Pantheon's Gatsby starter
CSS
5
star
67

countdown-timer-gutenberg-block

JavaScript
5
star
68

pantheon-image-enrichment

Proof of Concept - using Google Vision API to add value to WordPress
PHP
5
star
69

go-certauth

Go handlers and middleware to do client cert authentication.
Go
5
star
70

go-healthz

Package that implements a healthcheck server
Go
4
star
71

downstream-updater

Scripts useful for building a Continuous Integration system to update and test new releases from an upstream project.
Shell
4
star
72

redis

PHP
4
star
73

smart_content_cdn

An experimental Drupal module to leverage Edge Integrations
PHP
4
star
74

tbt-ci-templates

CI Integrations for Terminus Build Tools template repos
Shell
4
star
75

pantheon_log_retriever

PHP, Shell, Python and Perl script for app and db server log retrieval
PHP
4
star
76

update-tool

The Update Tool is responsible for detecting available software updates and creating pull requested as needed.
PHP
4
star
77

baryon

Layered Chef Universe Server
Go
4
star
78

selenium-zoetrope

PHP
4
star
79

nginx

Fork from git://pkgs.fedoraproject.org/nginx.git with support for systemd socket activation, full WebDAV, and syslog logging
Shell
4
star
80

systemd

Pantheon's very shallow fork of the official Fedora package
Shell
4
star
81

pantheon-edge-integrations

PHP
3
star
82

phpcompatibility-action

Shell
3
star
83

php-remote-error-monitor

PHP Module replacing APM in PHP 8
C
3
star
84

pantheon-content-cloud-sdk

TypeScript
3
star
85

terminus-composer-logs-plugin

Terminus plugin to show composer logs.
PHP
3
star
86

dnscheck

DEPRECATED - no longer maintained. A PHP app to check that your DNS is correctly configured for Pantheon routing.
Less
3
star
87

terminus-aliases-plugin

A plugin for Terminus which creates a complete aliases file.
PHP
3
star
88

fastly-io

WordPress plugin to let Fastly IO handle all the media library cropping and resizing
PHP
3
star
89

alpine-node

Tiny Node.js container built on alpine linux
Dockerfile
3
star
90

composer-lock-docker

Provides a "composer lock" service as a Python Flask app in a docker container.
Python
3
star
91

pantheon_advanced_page_cache

Drupal cache metadata + Pantheon's Global CDN
PHP
3
star
92

terminus-plugin-example

A simple plugin for Terminus to demonstrate how to add new commands
PHP
3
star
93

terminus-conversion-tools-plugin

Conversion Tools is a Terminus plugin that contains commands to convert a standard Drupal site into a composer managed one.
PHP
3
star
94

terminus-autopilot-plugin

PHP
2
star
95

etl-framework

Python
2
star
96

apm

Legacy APM version for PHP log submission.
C
2
star
97

vue-agcdn-mgmt

Vue app for AGCDN management
Vue
2
star
98

drupal-9-with-circleci-orb

PHP
2
star
99

advanced-ci-templates

DEPRECATED - Advanced Templates and CI Integrations for Terminus Build Tools projects
Shell
2
star
100

markdown-toc-docker

markdown-toc CLI in a small docker container
Dockerfile
2
star