Skip to content

Commit a871cd4

Browse files
authored
Merge pull request #203 from rtCamp/feature/add-wildcard-keys-deletion
Add wildcard cache key deletion for device type cache purge
2 parents 4c24e5c + 352cbe2 commit a871cd4

File tree

2 files changed

+75
-5
lines changed

2 files changed

+75
-5
lines changed

admin/class-phpredis-purger.php

+36-4
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,44 @@ public function purge_url( $url, $feed = true ) {
120120

121121
$prefix = $nginx_helper_admin->options['redis_prefix'];
122122
$_url_purge_base = $prefix . $parse['scheme'] . 'GET' . $parse['host'] . $parse['path'];
123-
$is_purged = $this->delete_single_key( $_url_purge_base );
124123

125-
if ( $is_purged ) {
126-
$this->log( '- Purged URL | ' . $url );
124+
/**
125+
* To delete device type caches such as `<URL>--mobile`, `<URL>--desktop`, `<URL>--lowend`, etc.
126+
* This would need $url above to be changed with this filter `rt_nginx_helper_purge_url` by cache key that Nginx sets while generating cache.
127+
*
128+
* For example: If page is accessed from desktop, then cache will be generated by appending `--desktop` to current URL.
129+
* Add this filter in separate plugin or simply in theme's function.php file:
130+
* ```
131+
* add_filter( 'rt_nginx_helper_purge_url', function( $url ) {
132+
* $url = $url . '--*';
133+
* return $url;
134+
* });
135+
* ```
136+
*
137+
* Regardless of what key / suffix is being to store `$device_type` cache , it will be deleted.
138+
*
139+
* @since 2.1.0
140+
*/
141+
if ( strpos( $_url_purge_base, '*' ) === false ) {
142+
143+
$status = $this->delete_single_key( $_url_purge_base );
144+
145+
if ( $status ) {
146+
$this->log( '- Purge URL | ' . $_url_purge_base );
147+
} else {
148+
$this->log( '- Cache Not Found | ' . $_url_purge_base, 'ERROR' );
149+
}
150+
127151
} else {
128-
$this->log( '- Cache Not Found | ' . $url, 'ERROR' );
152+
153+
$status = $this->delete_keys_by_wildcard( $_url_purge_base );
154+
155+
if ( $status ) {
156+
$this->log( '- Purge Wild Card URL | ' . $_url_purge_base . ' | ' . $status . ' url purged' );
157+
} else {
158+
$this->log( '- Cache Not Found | ' . $_url_purge_base, 'ERROR' );
159+
}
160+
129161
}
130162

131163
$this->log( '* * * * *' );

admin/class-predis-purger.php

+39-1
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,45 @@ public function purge_url( $url, $feed = true ) {
119119

120120
$prefix = $nginx_helper_admin->options['redis_prefix'];
121121
$_url_purge_base = $prefix . $parse['scheme'] . 'GET' . $parse['host'] . $parse['path'];
122-
$this->delete_single_key( $_url_purge_base );
122+
123+
/**
124+
* To delete device type caches such as `<URL>--mobile`, `<URL>--desktop`, `<URL>--lowend`, etc.
125+
* This would need $url above to be changed with this filter `rt_nginx_helper_purge_url` by cache key that Nginx sets while generating cache.
126+
*
127+
* For example: If page is accessed from desktop, then cache will be generated by appending `--desktop` to current URL.
128+
* Add this filter in separate plugin or simply in theme's function.php file:
129+
* ```
130+
* add_filter( 'rt_nginx_helper_purge_url', function( $url ) {
131+
* $url = $url . '--*';
132+
* return $url;
133+
* });
134+
* ```
135+
*
136+
* Regardless of what key / suffix is being to store `$device_type` cache , it will be deleted.
137+
*
138+
* @since 2.1.0
139+
*/
140+
if ( strpos( $_url_purge_base, '*' ) === false ) {
141+
142+
$status = $this->delete_single_key( $_url_purge_base );
143+
144+
if ( $status ) {
145+
$this->log( '- Purge URL | ' . $_url_purge_base );
146+
} else {
147+
$this->log( '- Cache Not Found | ' . $_url_purge_base, 'ERROR' );
148+
}
149+
150+
} else {
151+
152+
$status = $this->delete_keys_by_wildcard( $_url_purge_base );
153+
154+
if ( $status ) {
155+
$this->log( '- Purge Wild Card URL | ' . $_url_purge_base . ' | ' . $status . ' url purged' );
156+
} else {
157+
$this->log( '- Cache Not Found | ' . $_url_purge_base, 'ERROR' );
158+
}
159+
160+
}
123161

124162
}
125163

0 commit comments

Comments
 (0)