Redis Object Cache - Version 2.0.4

Version Description

Version 2.0 is a significant rewrite of the plugin. Please read the v2.0.0 release notes.

  • Attempt to reliably update the dropin when it's outdated
  • Show ACL username on settings screen
  • Show full diagnostics with wp redis status
  • Always set FS_CHMOD_FILE when copying the object-cache.php
  • Don't encode bullets in password diagnostics
  • Call redis_object_cache_update_dropin during dropin update
Download this release

Release Info

Developer tillkruess
Plugin Icon 128x128 Redis Object Cache
Version 2.0.4
Comparing to
See all releases

Code changes from version 2.0.3 to 2.0.4

includes/class-plugin.php CHANGED
@@ -67,7 +67,7 @@ class Plugin {
67
 
68
  public function add_actions_and_filters() {
69
  add_action( 'deactivate_plugin', array( $this, 'on_deactivation' ) );
70
- add_action( 'upgrader_process_complete', array( $this, 'maybe_update_dropin' ), 10, 2 );
71
 
72
  add_action( is_multisite() ? 'network_admin_menu' : 'admin_menu', array( $this, 'add_admin_menu_page' ) );
73
 
@@ -142,7 +142,7 @@ class Plugin {
142
  foreach ( $this->actions as $name ) {
143
  // verify nonce
144
  if ( $action === $name && wp_verify_nonce( $_GET['_wpnonce'], $action ) ) {
145
- $url = wp_nonce_url( network_admin_url( add_query_arg( 'action', $action, $this->page ) ), $action );
146
 
147
  if ( $this->initialize_filesystem( $url ) === false ) {
148
  return; // request filesystem credentials
@@ -329,7 +329,7 @@ class Plugin {
329
  $dropin = get_plugin_data( WP_CONTENT_DIR . '/object-cache.php' );
330
  $plugin = get_plugin_data( WP_REDIS_PLUGIN_PATH . '/includes/object-cache.php' );
331
 
332
- return ( strcmp( $dropin['PluginURI'], $plugin['PluginURI'] ) === 0 );
333
  }
334
 
335
  public function object_cache_dropin_outdated() {
@@ -340,7 +340,11 @@ class Plugin {
340
  $dropin = get_plugin_data( WP_CONTENT_DIR . '/object-cache.php' );
341
  $plugin = get_plugin_data( WP_REDIS_PLUGIN_PATH . '/includes/object-cache.php' );
342
 
343
- return version_compare( $dropin['Version'], $plugin['Version'], '<' );
 
 
 
 
344
  }
345
 
346
  public function get_status() {
@@ -435,8 +439,7 @@ class Plugin {
435
  }
436
 
437
  if ( $this->object_cache_dropin_exists() ) {
438
-
439
- $url = wp_nonce_url( network_admin_url( add_query_arg( 'action', 'update-dropin', $this->page ) ), 'update-dropin' );
440
 
441
  if ( $this->validate_object_cache_dropin() ) {
442
  if ( $this->object_cache_dropin_outdated() ) {
@@ -507,7 +510,7 @@ class Plugin {
507
  }
508
 
509
  if ( in_array( $action, $this->actions ) ) {
510
- $url = wp_nonce_url( network_admin_url( add_query_arg( 'action', $action, $this->page ) ), $action );
511
 
512
  if ( $action === 'flush-cache' ) {
513
  $message = wp_cache_flush() ? 'cache-flushed' : 'flush-cache-failed';
@@ -517,7 +520,12 @@ class Plugin {
517
  if ( $this->initialize_filesystem( $url, true ) ) {
518
  switch ( $action ) {
519
  case 'enable-cache':
520
- $result = $wp_filesystem->copy( WP_REDIS_PLUGIN_PATH . '/includes/object-cache.php', WP_CONTENT_DIR . '/object-cache.php', true );
 
 
 
 
 
521
  do_action( 'redis_object_cache_enable', $result );
522
  $message = $result ? 'cache-enabled' : 'enable-cache-failed';
523
  break;
@@ -529,7 +537,12 @@ class Plugin {
529
  break;
530
 
531
  case 'update-dropin':
532
- $result = $wp_filesystem->copy( WP_REDIS_PLUGIN_PATH . '/includes/object-cache.php', WP_CONTENT_DIR . '/object-cache.php', true );
 
 
 
 
 
533
  do_action( 'redis_object_cache_update_dropin', $result );
534
  $message = $result ? 'dropin-updated' : 'update-dropin-failed';
535
  break;
@@ -767,28 +780,32 @@ class Plugin {
767
  return true;
768
  }
769
 
770
- public function maybe_update_dropin( $upgrader, $options ) {
771
- global $wp_filesystem;
772
-
773
- if (
774
- $options['action'] !== 'update' ||
775
- $options['type'] !== 'plugin' ||
776
- ! is_array( $options['plugins'] ) ||
777
- ! in_array( WP_REDIS_BASENAME, $options['plugins'] )
778
- ) {
779
  return;
780
  }
781
 
 
 
 
 
 
 
 
 
782
  if ( ! $this->validate_object_cache_dropin() ) {
783
  return;
784
  }
785
 
786
- if ( WP_Filesystem() ) {
787
- $wp_filesystem->copy(
788
  WP_REDIS_PLUGIN_PATH . '/includes/object-cache.php',
789
  WP_CONTENT_DIR . '/object-cache.php',
790
- true
 
791
  );
 
 
792
  }
793
  }
794
 
67
 
68
  public function add_actions_and_filters() {
69
  add_action( 'deactivate_plugin', array( $this, 'on_deactivation' ) );
70
+ add_action( 'admin_init', array( $this, 'maybe_update_dropin' ) );
71
 
72
  add_action( is_multisite() ? 'network_admin_menu' : 'admin_menu', array( $this, 'add_admin_menu_page' ) );
73
 
142
  foreach ( $this->actions as $name ) {
143
  // verify nonce
144
  if ( $action === $name && wp_verify_nonce( $_GET['_wpnonce'], $action ) ) {
145
+ $url = $this->action_link( $action );
146
 
147
  if ( $this->initialize_filesystem( $url ) === false ) {
148
  return; // request filesystem credentials
329
  $dropin = get_plugin_data( WP_CONTENT_DIR . '/object-cache.php' );
330
  $plugin = get_plugin_data( WP_REDIS_PLUGIN_PATH . '/includes/object-cache.php' );
331
 
332
+ return $dropin['PluginURI'] === $plugin['PluginURI'];
333
  }
334
 
335
  public function object_cache_dropin_outdated() {
340
  $dropin = get_plugin_data( WP_CONTENT_DIR . '/object-cache.php' );
341
  $plugin = get_plugin_data( WP_REDIS_PLUGIN_PATH . '/includes/object-cache.php' );
342
 
343
+ if ( $dropin['PluginURI'] === $plugin['PluginURI'] ) {
344
+ return version_compare( $dropin['Version'], $plugin['Version'], '<' );
345
+ }
346
+
347
+ return false;
348
  }
349
 
350
  public function get_status() {
439
  }
440
 
441
  if ( $this->object_cache_dropin_exists() ) {
442
+ $url = $this->action_link( 'update-dropin' );
 
443
 
444
  if ( $this->validate_object_cache_dropin() ) {
445
  if ( $this->object_cache_dropin_outdated() ) {
510
  }
511
 
512
  if ( in_array( $action, $this->actions ) ) {
513
+ $url = $this->action_link( $action );
514
 
515
  if ( $action === 'flush-cache' ) {
516
  $message = wp_cache_flush() ? 'cache-flushed' : 'flush-cache-failed';
520
  if ( $this->initialize_filesystem( $url, true ) ) {
521
  switch ( $action ) {
522
  case 'enable-cache':
523
+ $result = $wp_filesystem->copy(
524
+ WP_REDIS_PLUGIN_PATH . '/includes/object-cache.php',
525
+ WP_CONTENT_DIR . '/object-cache.php',
526
+ true,
527
+ FS_CHMOD_FILE
528
+ );
529
  do_action( 'redis_object_cache_enable', $result );
530
  $message = $result ? 'cache-enabled' : 'enable-cache-failed';
531
  break;
537
  break;
538
 
539
  case 'update-dropin':
540
+ $result = $wp_filesystem->copy(
541
+ WP_REDIS_PLUGIN_PATH . '/includes/object-cache.php',
542
+ WP_CONTENT_DIR . '/object-cache.php',
543
+ true,
544
+ FS_CHMOD_FILE
545
+ );
546
  do_action( 'redis_object_cache_update_dropin', $result );
547
  $message = $result ? 'dropin-updated' : 'update-dropin-failed';
548
  break;
780
  return true;
781
  }
782
 
783
+ public function maybe_update_dropin() {
784
+ if ( defined( 'WP_REDIS_DISABLE_DROPIN_AUTOUPDATE' ) && WP_REDIS_DISABLE_DROPIN_AUTOUPDATE ) {
 
 
 
 
 
 
 
785
  return;
786
  }
787
 
788
+ if ( $this->object_cache_dropin_outdated() ) {
789
+ add_action( 'shutdown', [ $this, 'update_dropin' ] );
790
+ }
791
+ }
792
+
793
+ public function update_dropin() {
794
+ global $wp_filesystem;
795
+
796
  if ( ! $this->validate_object_cache_dropin() ) {
797
  return;
798
  }
799
 
800
+ if ( $this->initialize_filesystem( '', true ) ) {
801
+ $result = $wp_filesystem->copy(
802
  WP_REDIS_PLUGIN_PATH . '/includes/object-cache.php',
803
  WP_CONTENT_DIR . '/object-cache.php',
804
+ true,
805
+ FS_CHMOD_FILE
806
  );
807
+
808
+ do_action( 'redis_object_cache_update_dropin', $result );
809
  }
810
  }
811
 
includes/cli/class-commands.php CHANGED
@@ -31,29 +31,9 @@ class Commands extends WP_CLI_Command {
31
  * wp redis status
32
  */
33
  public function status() {
34
-
35
  $plugin = Plugin::instance();
36
- $status = $plugin->get_status();
37
- $client = $plugin->get_redis_client_name();
38
-
39
- switch ( $status ) {
40
- case __( 'Disabled', 'redis-cache' ):
41
- $status = WP_CLI::colorize( "%y{$status}%n" );
42
- break;
43
- case __( 'Connected', 'redis-cache' ):
44
- $status = WP_CLI::colorize( "%g{$status}%n" );
45
- break;
46
- case __( 'Not Connected', 'redis-cache' ):
47
- $status = WP_CLI::colorize( "%r{$status}%n" );
48
- break;
49
- }
50
-
51
- WP_CLI::line( 'Status: ' . $status );
52
-
53
- if ( ! is_null( $client ) ) {
54
- WP_CLI::line( 'Client: ' . $client );
55
- }
56
 
 
57
  }
58
 
59
  /**
@@ -83,7 +63,14 @@ class Commands extends WP_CLI_Command {
83
 
84
  WP_Filesystem();
85
 
86
- if ( $wp_filesystem->copy( WP_REDIS_PLUGIN_PATH . '/includes/object-cache.php', WP_CONTENT_DIR . '/object-cache.php', true ) ) {
 
 
 
 
 
 
 
87
  WP_CLI::success( __( 'Object cache enabled.', 'redis-cache' ) );
88
  } else {
89
  WP_CLI::error( __( 'Object cache could not be enabled.', 'redis-cache' ) );
@@ -149,7 +136,14 @@ class Commands extends WP_CLI_Command {
149
 
150
  WP_Filesystem();
151
 
152
- if ( $wp_filesystem->copy( WP_REDIS_PLUGIN_PATH . '/includes/object-cache.php', WP_CONTENT_DIR . '/object-cache.php', true ) ) {
 
 
 
 
 
 
 
153
  WP_CLI::success( __( 'Updated object cache drop-in and enabled Redis object cache.', 'redis-cache' ) );
154
  } else {
155
  WP_CLI::error( __( 'Object cache drop-in could not be updated.', 'redis-cache' ) );
31
  * wp redis status
32
  */
33
  public function status() {
 
34
  $plugin = Plugin::instance();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
 
36
+ require_once __DIR__ . '/../ui/diagnostics.php';
37
  }
38
 
39
  /**
63
 
64
  WP_Filesystem();
65
 
66
+ $copy = $wp_filesystem->copy(
67
+ WP_REDIS_PLUGIN_PATH . '/includes/object-cache.php',
68
+ WP_CONTENT_DIR . '/object-cache.php',
69
+ true,
70
+ FS_CHMOD_FILE
71
+ );
72
+
73
+ if ( $copy ) {
74
  WP_CLI::success( __( 'Object cache enabled.', 'redis-cache' ) );
75
  } else {
76
  WP_CLI::error( __( 'Object cache could not be enabled.', 'redis-cache' ) );
136
 
137
  WP_Filesystem();
138
 
139
+ $copy = $wp_filesystem->copy(
140
+ WP_REDIS_PLUGIN_PATH . '/includes/object-cache.php',
141
+ WP_CONTENT_DIR . '/object-cache.php',
142
+ true,
143
+ FS_CHMOD_FILE
144
+ );
145
+
146
+ if ( $copy ) {
147
  WP_CLI::success( __( 'Updated object cache drop-in and enabled Redis object cache.', 'redis-cache' ) );
148
  } else {
149
  WP_CLI::error( __( 'Object cache drop-in could not be updated.', 'redis-cache' ) );
includes/object-cache.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Redis Object Cache Drop-In
4
  * Plugin URI: http://wordpress.org/plugins/redis-cache/
5
  * Description: A persistent object cache backend powered by Redis. Supports Predis, PhpRedis, Credis, HHVM, replication, clustering and WP-CLI.
6
- * Version: 2.0.3
7
  * Author: Till Krüss
8
  * Author URI: https://wprediscache.com
9
  * License: GPLv3
3
  * Plugin Name: Redis Object Cache Drop-In
4
  * Plugin URI: http://wordpress.org/plugins/redis-cache/
5
  * Description: A persistent object cache backend powered by Redis. Supports Predis, PhpRedis, Credis, HHVM, replication, clustering and WP-CLI.
6
+ * Version: 2.0.4
7
  * Author: Till Krüss
8
  * Author URI: https://wprediscache.com
9
  * License: GPLv3
includes/ui/diagnostics.php CHANGED
@@ -10,12 +10,11 @@ defined( '\\ABSPATH' ) || exit;
10
  global $wp_object_cache;
11
 
12
  $info = [];
13
- $dropins = [];
14
- $dropin = $this->validate_object_cache_dropin();
15
  $disabled = defined( 'WP_REDIS_DISABLED' ) && WP_REDIS_DISABLED;
16
 
17
- $info['Status'] = $this->get_status();
18
- $info['Client'] = $this->get_redis_client_name();
19
  $info['Drop-in'] = $dropin ? 'Valid' : 'Invalid';
20
  $info['Disabled'] = $disabled ? 'Yes' : 'No';
21
 
@@ -45,7 +44,7 @@ if ( defined( 'HHVM_VERSION' ) ) {
45
  $info['HHVM Version'] = HHVM_VERSION;
46
  }
47
 
48
- $info['Redis Version'] = $this->get_redis_version() ?: 'Unknown';
49
 
50
  $info['Multisite'] = is_multisite() ? 'Yes' : 'No';
51
 
@@ -80,7 +79,10 @@ $constants = array(
80
 
81
  foreach ( $constants as $constant ) {
82
  if ( defined( $constant ) ) {
83
- $info[ $constant ] = wp_json_encode( constant( $constant ) );
 
 
 
84
  }
85
  }
86
 
@@ -92,7 +94,7 @@ if ( defined( 'WP_REDIS_PASSWORD' ) ) {
92
  $password[1] = str_repeat( '•', 8 );
93
  }
94
 
95
- $info['WP_REDIS_PASSWORD'] = wp_json_encode( $password );
96
  } elseif ( ! is_null( $password ) && '' !== $password ) {
97
  $info['WP_REDIS_PASSWORD'] = str_repeat( '•', 8 );
98
  }
@@ -115,21 +117,21 @@ if ( $dropin ) {
115
  );
116
  }
117
 
118
- foreach ( $info as $name => $value ) {
119
- // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
120
- echo "{$name}: {$value}\r\n";
121
- }
122
 
123
  foreach ( get_dropins() as $file => $details ) {
124
- $dropins[ $file ] = sprintf(
125
- ' - %s v%s by %s',
126
- $details['Name'],
127
- $details['Version'],
128
- $details['Author']
129
- );
130
  }
131
 
132
- if ( ! empty( $dropins ) ) {
133
- // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
134
- echo "Drop-ins: \r\n", implode( "\r\n", $dropins ), "\r\n";
 
 
 
 
 
 
 
 
135
  }
10
  global $wp_object_cache;
11
 
12
  $info = [];
13
+ $dropin = $plugin->validate_object_cache_dropin();
 
14
  $disabled = defined( 'WP_REDIS_DISABLED' ) && WP_REDIS_DISABLED;
15
 
16
+ $info['Status'] = $plugin->get_status();
17
+ $info['Client'] = $plugin->get_redis_client_name();
18
  $info['Drop-in'] = $dropin ? 'Valid' : 'Invalid';
19
  $info['Disabled'] = $disabled ? 'Yes' : 'No';
20
 
44
  $info['HHVM Version'] = HHVM_VERSION;
45
  }
46
 
47
+ $info['Redis Version'] = $plugin->get_redis_version() ?: 'Unknown';
48
 
49
  $info['Multisite'] = is_multisite() ? 'Yes' : 'No';
50
 
79
 
80
  foreach ( $constants as $constant ) {
81
  if ( defined( $constant ) ) {
82
+ $info[ $constant ] = wp_json_encode(
83
+ constant( $constant ),
84
+ JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE
85
+ );
86
  }
87
  }
88
 
94
  $password[1] = str_repeat( '•', 8 );
95
  }
96
 
97
+ $info['WP_REDIS_PASSWORD'] = wp_json_encode( $password, JSON_UNESCAPED_UNICODE );
98
  } elseif ( ! is_null( $password ) && '' !== $password ) {
99
  $info['WP_REDIS_PASSWORD'] = str_repeat( '•', 8 );
100
  }
117
  );
118
  }
119
 
120
+ $dropins = [];
 
 
 
121
 
122
  foreach ( get_dropins() as $file => $details ) {
123
+ $dropins[ $file ] = sprintf( '%s v%s by %s', $details['Name'], $details['Version'], $details['Author'] );
 
 
 
 
 
124
  }
125
 
126
+ $info['Drop-ins'] = wp_json_encode(
127
+ array_values( $dropins ),
128
+ JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE
129
+ );
130
+
131
+ foreach ( $info as $name => $value ) {
132
+ if ( defined( 'WP_CLI' ) && WP_CLI ) {
133
+ WP_CLI::line( "{$name}: $value" );
134
+ } else {
135
+ echo "{$name}: {$value}\r\n";
136
+ }
137
  }
includes/ui/tabs/diagnostics.php CHANGED
@@ -7,6 +7,8 @@
7
 
8
  defined( '\\ABSPATH' ) || exit;
9
 
 
 
10
  ?>
11
 
12
  <p>
7
 
8
  defined( '\\ABSPATH' ) || exit;
9
 
10
+ $plugin = $this;
11
+
12
  ?>
13
 
14
  <p>
includes/ui/tabs/overview.php CHANGED
@@ -162,16 +162,18 @@ $diagnostics = $roc->get_diagnostics();
162
  </tr>
163
  <?php endif; ?>
164
 
 
 
 
 
 
 
 
165
  <?php if ( isset( $diagnostics['password'] ) ) : ?>
166
  <tr>
167
  <th><?php esc_html_e( 'Password:', 'redis-cache' ); ?></th>
168
  <td>
169
- <code>
170
- <?php
171
- // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
172
- echo str_repeat( '&#8226;', 8 );
173
- ?>
174
- </code>
175
  </td>
176
  </tr>
177
  <?php endif; ?>
162
  </tr>
163
  <?php endif; ?>
164
 
165
+ <?php if ( isset( $diagnostics['password'][0] ) ) : ?>
166
+ <tr>
167
+ <th><?php esc_html_e( 'Username:', 'redis-cache' ); ?></th>
168
+ <td><code><?php echo esc_html( $diagnostics['password'][0] ); ?></code></td>
169
+ </tr>
170
+ <?php endif; ?>
171
+
172
  <?php if ( isset( $diagnostics['password'] ) ) : ?>
173
  <tr>
174
  <th><?php esc_html_e( 'Password:', 'redis-cache' ); ?></th>
175
  <td>
176
+ <code><?php echo str_repeat( '&#8226;', 8 ); ?></code>
 
 
 
 
 
177
  </td>
178
  </tr>
179
  <?php endif; ?>
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: redis, predis, phpredis, credis, hhvm, pecl, caching, cache, object cache,
5
  Requires at least: 3.3
6
  Tested up to: 5.4
7
  Requires PHP: 5.6
8
- Stable tag: 2.0.3
9
  License: GPLv3
10
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
11
 
@@ -83,10 +83,19 @@ To see a list of all available WP-CLI commands, please see the [WP CLI commands
83
 
84
  == Changelog ==
85
 
86
- = 2.0.3 =
87
 
88
  Version 2.0 is a significant rewrite of the plugin. Please read the v2.0.0 release notes.
89
 
 
 
 
 
 
 
 
 
 
90
  - Hide "Metrics" tab when metrics are disabled
91
  - Fixed `admin.js` not loading in multisite environments
92
  - Avoid fatal error when interacting with metrics but Redis went away
@@ -113,6 +122,8 @@ Version 2.0 is a significant rewrite. The plugin now requires PHP 5.6, just like
113
 
114
  The GitHub and Composer repository was moved from `tillkruss/redis-cache` to `rhubarbgroup/redis-cache`.
115
 
 
 
116
  - Require PHP 5.6
117
  - Plugin is now "network-only"
118
  - Switch to WPCS for code standards
@@ -389,7 +400,7 @@ Since Predis isn't maintained any longer, it's highly recommended to switch over
389
 
390
  == Upgrade Notice ==
391
 
392
- = 2.0.3 =
393
 
394
  Version 2.0 is a significant rewrite of the plugin. Please read the v2.0.0 release notes.
395
 
5
  Requires at least: 3.3
6
  Tested up to: 5.4
7
  Requires PHP: 5.6
8
+ Stable tag: 2.0.4
9
  License: GPLv3
10
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
11
 
83
 
84
  == Changelog ==
85
 
86
+ = 2.0.4 =
87
 
88
  Version 2.0 is a significant rewrite of the plugin. Please read the v2.0.0 release notes.
89
 
90
+ - Attempt to reliably update the dropin when it's outdated
91
+ - Show ACL username on settings screen
92
+ - Show full diagnostics with `wp redis status`
93
+ - Always set `FS_CHMOD_FILE` when copying the `object-cache.php`
94
+ - Don't encode bullets in password diagnostics
95
+ - Call `redis_object_cache_update_dropin` during dropin update
96
+
97
+ = 2.0.3 =
98
+
99
  - Hide "Metrics" tab when metrics are disabled
100
  - Fixed `admin.js` not loading in multisite environments
101
  - Avoid fatal error when interacting with metrics but Redis went away
122
 
123
  The GitHub and Composer repository was moved from `tillkruss/redis-cache` to `rhubarbgroup/redis-cache`.
124
 
125
+ On multisite networks, be sure to "Network Activate" the plugin after upgrading to v2.x.
126
+
127
  - Require PHP 5.6
128
  - Plugin is now "network-only"
129
  - Switch to WPCS for code standards
400
 
401
  == Upgrade Notice ==
402
 
403
+ = 2.0.4 =
404
 
405
  Version 2.0 is a significant rewrite of the plugin. Please read the v2.0.0 release notes.
406
 
redis-cache.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Redis Object Cache
4
  * Plugin URI: https://wordpress.org/plugins/redis-cache/
5
  * Description: A persistent object cache backend powered by Redis. Supports Predis, PhpRedis, Credis, HHVM, replication, clustering and WP-CLI.
6
- * Version: 2.0.3
7
  * Text Domain: redis-cache
8
  * Domain Path: /languages
9
  * Network: true
3
  * Plugin Name: Redis Object Cache
4
  * Plugin URI: https://wordpress.org/plugins/redis-cache/
5
  * Description: A persistent object cache backend powered by Redis. Supports Predis, PhpRedis, Credis, HHVM, replication, clustering and WP-CLI.
6
+ * Version: 2.0.4
7
  * Text Domain: redis-cache
8
  * Domain Path: /languages
9
  * Network: true