run:R W Run
DIR
2026-04-09 18:51:36
R W Run
DIR
2026-04-09 18:51:36
R W Run
DIR
2026-04-09 18:51:36
R W Run
42.31 KB
2026-04-09 18:51:36
R W Run
14.57 KB
2026-04-09 18:51:36
R W Run
1.09 KB
2026-04-09 18:51:36
R W Run
19.59 KB
2026-04-09 18:51:36
R W Run
3.33 KB
2026-04-09 18:51:36
R W Run
2.5 KB
2026-04-09 18:51:36
R W Run
2.42 KB
2026-04-09 18:51:36
R W Run
324 By
2026-04-09 18:51:36
R W Run
2.55 KB
2026-04-09 18:51:36
R W Run
error_log
📄CHANGELOG.md
1# Changelog
2
3All notable changes to this project will be documented in this file.
4
5## v1.25.3 - 2026-04-08
6### Fixed
7- Fixed Query Monitor 4.x compatibility
8- Disable analytics before uninstalling plugin
9- Prevent rare fatal error in shutdown handler
10- Prevent rare array to string conversion warning
11
12## v1.25.2 - 2026-03-09
13### Added
14- Added `wp redis license` CLI command
15
16### Changed
17- Improved error handling for `CONFIG` and `SLOWLOG` commands
18- Switch to per-interval deltas instead of cumulative totals in "Requests" charts
19- Avoid timeouts by chunking analytics measurements retrieval
20
21### Fixed
22- Fixed chart overlapping in WordPress 7.x
23- Fixed rare uncaught `TypeError` in `Licensing`
24
25## v1.25.1 - 2025-12-02
26### Added
27- Added optional `analytics.persist_limit` configuration option
28
29### Changed
30- Avoid timeouts when flushing with `analytics.persist` enabled
31- Limit analytics persist size `memory_limit / 2` by default
32- Retry failed read commands on primary node before switching Sentinels
33- Consider `*WithMeta()` calls read-only on replicated connections
34
35### Fixed
36- Disable cache if `WP_SETUP_CONFIG` is defined
37- Fixed purging analytics measurements
38- Fixed unit type of Relay "Memory" chart
39
40## v1.25.0 - 2025-10-22
41### Added
42- Added API/CLI endpoints to reset slowlog and command statistics
43
44### Changed
45- Enable `strict` mode by default when a `prefix` is set
46- Prevent integrity flush after cache was reset
47- Removed transient deletion limit of 10k sites
48- Loosen Relay `prefix` health check
49- Replaced `current_time('timestamp')` with `time()`
50- Avoid changing parameter names during inheritance
51
52### Fixed
53- Fixed accessing `CONFIG` on cluster connections
54- Fixed accessing `INFO COMMANDSTATS` on old Redis versions
55- Fixed selecting databases on persistent connections
56- Fixed KeyDB detection
57- Prevent diagnostics warning when `WP_REDIS_DISABLED` is enabled
58- Hardened license health check against API outages
59
60## v1.24.5 - 2025-08-21
61### Fixed
62- Fixed analytics charts not rendering under some conditions
63
64## v1.24.4 - 2025-08-20
65### Added
66- Added `objectcache_analytics_snapshot_measurements` filter
67
68### Changed
69- Increased adaptive cache configuration defaults
70- Support negative `relay.adaptive.events` values
71- Switched all `string` diagnostics to `Diagnostic` objects
72- Use `#[SensitiveParameter]` for strings that may contain passwords
73
74### Fixed
75- Reduce number of measurements fetched for metrics snapshot
76- Fixed `WP_REDIS_DISABLED` not being respected in some places
77- Prevent type error trying to format `null` metric values
78- Prevent rare diagnostics error when not connected
79- Prevent rare error when uninstalling plugin using WP CLI
80
81## v1.24.3 - 2025-07-02
82### Changed
83- Support Relay's new adaptive cache `status` property
84- Support flushing Relay memory on clustered connections
85- Disabled memory usage when scanning groups on clustered connections
86- Improved `SLOWLOG` handling on clustered connections
87- Send sanitized metrics snapshot
88
89### Fixed
90- Prevent error when running cron and using foreign object cache
91- Prevent error when calling `INFO` and using older PhpRedis versions
92- Fixed adaptive cache `events` and `ratio` configuration not taking effect
93- Handle permission errors when running `SLOWLOG|GET` and `MEMORY|USAGE`
94
95## v1.24.2 - 2025-06-20
96### Added
97- Added `wp redis analytics-count` CLI command
98
99### Fixed
100- Prevent excessive analytics snapshots
101
102## v1.24.1 - 2025-06-17
103### Fixed
104- Prevent error when using ElastiCache Serverless instances
105- Prevent `unexpected token` errors when scripts are inlined
106- Prevent event listener registration when adaptive cache widget is missing
107- Switched to ES6 over ES11 syntax
108- Fixed groups scan API call if permalinks are disabled
109- Fixed up some widget padding
110
111## v1.24.0 - 2025-06-14
112### Added
113- Added experimental support for Relay's adaptive cache
114- Added health, slowlog and command statistics widgets
115- Added `queryttl` configuration option (defaults to 24h)
116- Support calculating memory using in groups widget
117- Added `groups`, `slowlog`, `commands` and `prune-queries` CLI command
118- Added `objectcache_flushlog_limit` filter
119
120### Changed
121- Prevent cache from being enabled if handshake fails
122- Be more helpful when connection fails
123- Improved diagnostics and various health checks
124- Store cache analytics as plain JSON
125- Don't store path and hostname in analytics by default
126- Check license gracefully when sleeping for 72+ hours
127- Display latency in milliseconds (not microseconds)
128- Sort results in groups widget
129- Log `getWithMeta()` calls as `GET`
130- Hide `wp_cache_set_last_changed` in Query Monitor stack
131- Deprecated `count` property on `objectcache/v1/groups` endpoint
132- Download cache groups as CSV instead of copying to clipboard
133- Perform integrity flush if WordPress version changes
134- Changed cache command log level from `info` to `debug`
135- Omit logging cache commands in default `ErrorLogLogger`
136- Include `notice` in default log levels
137
138### Fixed
139- Fixed Batcache compatibility issue
140- Fixed Relay client access replicated and clustered connections
141
142## v1.23.1 - 2025-03-17
143### Changed
144- Support disambiguating `false` return values using `$found` (PhpRedis 6.2; Relay 0.10.1)
145- Show integrity flush reason in flush log widget
146- Use unified base REST controller class
147- Support calling `FLUSHDB` without `ASYNC` on Relay connections
148
149### Fixed
150- Fixed undefined array key access
151- Fixed Dragonfly issues with lua scripts
152- Fixed strict types error when using `ZRANGE`
153
154## v1.23.0 - 2025-03-13
155### Added
156- Added server type to diagnostics
157- Added health checks for `KEEPTTL` requirements (Redis 6.0; PhpRedis 5.3)
158
159### Changed
160- Bump required PhpRedis version to 4.0.0
161- Promote `noeviction` health check status to critical
162- Exclude WooCommerce's `wc_cache_*` group from prefetching
163- Retry loading cache metadata with backoff
164- Reduced blocking time when pruning analytics measurements
165- Switch away from deprecated Redis commands
166- Support discarding pipelines and transactions
167- Reduced memory footprint of `Connection::command()`
168
169### Fixed
170- Prevent integrity flush when metadata can't be loaded
171- Preserve key TTL when (de|in)crementing numeric key
172- Fixed resetting log levels when `debug` mode is disabled
173- Prevent rare warnings in `connectToSentinels()`
174- Avoid undefined key notices in `RedisMetrics`
175- Avoid calling invalid calls to `flushBlog()`
176
177## v1.22.0 - 2025-01-23
178### Added
179- Added `full` option for `group_flush` configuration option
180
181### Changed
182- Switch `group_flush` default value to `scan`
183- Swap all `error_log()` call for internal `log()` helper
184- Log all messages when `debug` mode is enabled
185- Improve performance of analytics API requests
186
187### Fixed
188- Fixed rare `TypeError` in `Diagnostics::redisVersion()`
189- Fixed scheme detection for `wp redis cli` command
190- Fixed inverted multi/pipeline modes
191- Fixed OpenTelemetry tracer integration
192- Avoid cloning connection when computing metrics
193
194### Removed
195- Removed deprecated `$RedisCachePro` global
196
197## v1.21.3 - 2024-10-29
198### Changed
199- Allow more cache key separators in Relay prefix health check
200
201### Fixed
202- Fixed changelog not being accessible when `DISALLOW_FILE_MODS` is set
203- Avoid rare notice when using Query Monitor
204- Removed debug call
205
206## v1.21.2 - 2024-07-18
207### Added
208- Support setting `strict` mode using `OBJECTCACHE_STRICT` environment variable
209
210### Changed
211- Don't enable `strict` mode when a `prefix` is set
212
213### Fixed
214- Fixed connection error when no Sentinel replicas are available
215
216## v1.21.1 - 2024-05-21
217### Fixed
218- Fixed rare type mismatch when running admin lifecycle
219
220## v1.21.0 - 2024-05-08
221### Added
222- Added Redis cluster support when using Relay
223- Added `ErrorLogContextLogger` for easier debugging
224
225### Changed
226- Enabled `strict` mode by default
227- Support `WC_SESSION_CACHE_GROUP` constant
228- Use decorrelated jitter backoff algorithm for connection attempts
229- Check `wp_is_file_mod_allowed('object_cache_dropin')` before automatically deleting drop-in
230- Added `Relay*Connection::keysInMemory()` helpers
231- Improved latency widget content when using cluster connection
232- Use configured logger and log levels when logging from plugin itself
233- Resolved PHP 8.4 deprecation notices
234
235### Fixed
236- Avoid rare fatal error in `Configuration::safelyFrom()`
237- Fixed `objectcache_allow_dropin_mod` filter
238
239## v1.20.2 - 2023-10-28
240### Fixed
241- Fixed plugin version string
242
243## v1.20.1 - 2023-10-27
244### Changed
245- Log exception message when cache reset fails
246- Don't run filesystem health check if `DISALLOW_FILE_MODS` is `true`
247- Changed filesystem test file name from `.object-cache-test.tmp` to `object-cache.tmp`
248
249### Fixed
250- Fixed `async_flush` when using PhpRedis v6.0
251- Avoid `TypeError` when using `WP_Error::get_error_data()`
252
253## v1.20.0 - 2023-09-19
254### Added
255- Added cache integrity protection
256- Added analytics charts to dashboard widget
257- Added `objectcache_widget_metrics` filter
258- Added `wp redis reset` command
259- Added support for `OBJECTCACHE_OVERRIDE` and `OBJECTCACHE_MERGE` constants
260- Added support for PhpRedis v6.0
261- Added `analytics.sample_rate` configuration option
262
263### Changed
264- Reduce default `retries` from `5` to `3`
265- Refresh nonce using `X-WP-Nonce` header
266- Expose Relay license issues in Dashboard widget
267- Refactored various flush mechanisms
268- Expanded `ObjectCache::withoutMutations()` callback type from `Closure` to `callable`
269- Delete `objectcache_*` site options when uninstalling
270- Improved license API error handling
271
272### Fixed
273- Fixed failover when using Redis Sentinel
274- Bump `plugins_api` priority to prevent plugins from hijacking responses
275- Mute rare `undefined array key` notice in `flushBacktraceSummary()`
276
277### Removed
278- Removed `split_the_query` filter in favor of native WordPress 6.4 behavior
279- Removed deprecated `rediscache_*` filters
280- Removed deprecated `ObjectCache::flushMemory()` method
281- Removed `objectcache_analytics_retention` filter
282- Removed `--async` option from `wp redis flush`
283
284## v1.19.0 - 2023-07-21
285### Added
286- Added `strict` configuration option
287- Added group flush log widget
288- Added link to settings to dashboard widget
289- Added Relay memory health check
290- Added support for `OBJECTCACHE_PREFER_RELAY` environment variable
291- Added support for `path` and `socket` configuration options
292- Added support for `redis-error.php` template
293- Added `objectcache_cleanup_transients` filter
294- Added `--skip-transients` option to `wp redis enable`
295
296### Changed
297- Render connection exceptions similar to WordPress database errors
298- Throw exception when selecting non-existent database
299- Delete all transients from database after enabling cache
300- Support logging early flushes before plugin code was initialized
301- Improved `WP_Query::get_posts()` performance using `split_the_query`
302- Made Relay diagnostics more helpful
303- Renamed `relay-memory-active` to `relay-memory-used`
304- Not longer recommend disabling `prefetch` and `split_alloptions` when using Relay
305
306### Fixed
307- Display Relay's memory consumption more accurately
308- Improve handling non-fatal `MGET` failures
309- Prevent `wp_cache_init()` initializing twice
310- Avoid rare fatal error when parsing JSON responses
311- Avoid confusing hiredis error message Relay connection times out
312- Avoid fatal error when `gmt_offset` is not valid
313
314## v1.18.2 - 2023-04-04
315### Added
316- Added Query Monitor constants to panel
317
318### Changed
319- Renamed `ms-cache-median` to `ms-cache-avg`
320
321### Fixed
322- Discard transactions if they fail
323- Prevent REST API responses from being cached
324- Fixed measuring analytics writes
325- Fixed `storeWaitAverage` calculation
326- Fixed supported Redis version indicator when using Relay
327
328## v1.18.1 - 2023-03-24
329### Changed
330- Updated End-User License Agreement
331- Don't flush cache when updating drop-in
332
333### Fixed
334- Fixed cache timing metric
335- Fixed widget flush button label on multisite
336- Fixed flushing groups that end with blog id on multisite
337
338## v1.18.0 - 2023-02-20
339### Added
340- Added `wp redis flush-group` CLI command
341
342### Changed
343- Reduced overall memory usage
344- Made cache key generation slightly faster
345- Enable flush logging by default
346- Log `warning` level by default
347- Execute not split `alloptions` reads on primary node
348- Refactored object cache metrics to use new `ObjectCacheMetrics`
349- Enabled flush logging when `save_commands` is set
350- Disabled command logging entirely unless `save_commands` is set
351- Return primary node from `*SentinelsConnection::client()` instead of sentinel client
352
353### Fixed
354- Handle foreign keys without a group in groups REST API endpoint
355- Respect `async_flush` when using `wp_cache_delete()`
356
357### Removed
358- Dropped support for Query Monitor <=3.8.0 backtraces
359- Removed metrics keys from `info()` in favor of `metrics()`
360- Removed `backtrace_summary` logging and deprecated `BacktraceLogger`
361
362## v1.17.1 - 2023-01-28
363### Changed
364- Switched to faster Zstandard compression level
365- Handle non `int|string` cache keys stricter and more gracefully
366- Throw exception for invalid cache keys when `debug` option is enabled
367- Don't let the perflab plugin hijack the object cache drop-in
368- Defer registering `wp redis` CLI command
369
370### Fixed
371- Fixed several multisite blog flushing issues
372- Fixed accessing client on replicated connections
373- Fixed setting `analytics` option to boolean
374- Fixed calling `get_plugin_data()` on non-existent drop-in
375
376## v1.17.0 - 2022-11-23
377### Added
378- Added support replicated and sentinel Relay connections
379- Added `group_flush` configuration option supporting `keys` (new faster default), `scan` (previous default) and `incremental` (enormous datasets)
380- Added `tracer` configuration option supporting `new-relic` and global `open-telemetry` tracer providers
381- Support `network_flush` option when using Redis Cluster
382- Support New Relic tracing for Redis Cluster, Redis Sentinel and Relay clients
383- Added `*Connection::listKeys()` helpers
384- Added `PhpRedisClusterConnection::eval*()` helpers
385- Added Redis Server version health checks and indicators
386
387### Changed
388- Bumped scan and batch removal from `100` to `500` keys
389- Flush more prudently even on main site when using `network_flush`
390- Indicate whether the network or site will be flushed in overview widget in multisite environments
391- Renamed all the things from _master(s)_ to _primary/primaries_ with backwards compatibility
392- Improved must-use plugin detection
393- ⚠️ Added `client()` method to `ConnectionInterface`
394- ⚠️ Use new `ClientInterface` in all `ConnectionInterface` implementations
395- ⚠️ Renamed `Connector` interface to `ConnectorInterface`
396- ⚠️ Renamed `handleBlogFlush()` to `shouldFlushBlog()`
397- Renamed `flush_network` option to `network_flush`
398- Use `ObjectCache::$blogId` instead of `get_current_blog_id()`
399- Use `ObjectCacheCollector::get_storage(): QM_Data` return type
400- Show received bytes _and sent bytes_ in Query Monitor
401- Strip slashes from commands in Query Monitor
402- Improved support for `scan()` and `*scan()` methods
403- Delete FOSS drop-in upon plugin activation
404
405### Fixed
406- Fixed various Redis Sentinel issues
407- Fixed `Invalid regular expression` in Safari
408- Fixed parsing `rawCommand()` in Query Monitor calls when using Redis Cluster
409- Fixed health check for configuration constant being defined too late
410- Fixed attempted property access on null in `Diagnostics::relayHasCache()`
411- Fixed groups widget padding
412- Fixed inverted "Relay Cache" metadata in Query Monitor
413
414### Removed
415- Dropped Twemproxy support
416- Dropped `PhpRedisClusterConnection::scanNode()` helper
417- Dropped `*ObjectCache::Client` constants
418- Dropped `WP_REDIS_PHPREDIS_OPTIONS` constant
419
420## v1.16.4 - 2022-10-31
421### Added
422- Added support for WordPress 6.1's `wp_cache_supports()`
423
424### Changed
425- Refer to "external cache" as "datastore" everywhere
426- Hide `wp_cache_get_last_changed()` and `wp_cache_flush_group()` in Query Monitor
427
428### Fixed
429- Fixed inverted "Relay Cache" diagnostic
430- Fixed rare undefined `OPT_MAX_RETRIES` constant error
431- Don't use WordPress 5.3's `WP_REST_Request::has_param()`
432
433## v1.16.3 - 2022-10-09
434### Added
435- Added new `wp redis status` command
436- Added `objectcache_omit_settings_pointer` filter
437- Added `relay.cache` configuration option
438
439### Changed
440- Improved support for Relay's "client only" mode
441- Renamed `wp redis info` to `wp redis diagnostics`
442- Made `wp redis info` an alias of `wp redis status`
443- Refined hosting provider detection
444- Use new `Connection::$class` property for FQCNs
445
446### Fixed
447- Fixed rare fatal `ValueError`
448
449### Removed
450- Removed no longer needed `Relay::dispatchEvents()` calls
451
452## v1.16.2 - 2022-09-29
453### Added
454- Added support for Relay's "client only" mode
455- Added compatibility with new Query Monitor data classes
456- Added `objectcache_allow_dropin_mod` filter
457- Added `relay.allowed` and `relay.ignored` configuration options
458
459### Changed
460- Append context to `objectcache_*_error` errors
461- Verify `Transaction` result type and count
462- Make it easy to copy all cache groups to the clipboard
463- Refined API health check and diagnostics
464- Refined overview widget
465- Refined analytics charts loading and messages
466- Refined hosting provider detection
467
468### Fixed
469- Avoid executing empty transactions
470- Fixed update channel field availability
471- Fixed Query Monitor request time ratio calculation
472- Fixed rare Query Monitor issue when connection is `null`
473- Hide more update notices when `updates` is `false`
474- Don't inline widget CSS twice
475
476## v1.16.1 - 2022-08-29
477### Fixed
478- Fixed health check condition
479
480## v1.16.0 - 2022-08-22
481### Added
482- Added WordPress 6.1 `wp_cache_flush_group()` support
483- Added REST API endpoint for plugin options
484- Added `objectcache_omit_analytics_footnote` filter
485- Added connection retries
486- Added support for `OBJECTCACHE_CONFIG` environment variable
487- Added integration for WP User Manager
488- Added `withTimeout()` and `withoutTimeout()` connection helpers
489
490### Changed
491- Pass PHPStan L7
492- ⚠️ Made `Plugin`, `Configuration` and `Transaction` classes final
493- ⚠️ Added `MeasuredObjectCacheInterface`
494- ⚠️ Added `commands()`, `memoize()`, `ioWait()` and `withoutMutations()` to `ConnectionInterface`
495- Reduced default (read-)timeout from `5.0s` to `2.5s`
496- Reduced default retry interval from `100ms` to `25ms`
497- Use `retry_interval` configuration option as backoff base
498- Use `read_timeout` configuration option as backoff cap
499- Use option API endpoint to save various settings
500- Append backtrace to invalid cache key type log message
501- Overhauled `flush_runtime()` and `flushRuntime()` methods
502- Default to `default` group in `ObjectCache` helpers
503- Accept any `callable` for `logger` configuration option
504- Catch callback exceptions in `PhpRedisConnection::withoutMutations()`
505- Improved retry/backoff support for Relay connections
506- Support Relay event listeners for WordPress 6.0 `*_multiple()` methods
507- Renamed `default` backoff to `smart`
508- Only calculate cache size when needed and do so more memory-friendly
509
510### Fixed
511- Fixed handling invalid cache keys
512- Fixed loading of settings styles when must-use is symlinked elsewhere
513- Fixed dashboard widget positioning
514- Relaxed URL validation
515- Avoid timeouts when deleting by pattern
516- Avoid rare key identifier collisions
517- Prevent rare analytics restore failure
518- Fixed up `PhpRedisReplicatedConnection` logic for `multi()` and `flushdb()` calls
519- Import missing exception in `Configuration\Concerns\Sentinel` trait
520- Fixed return value of `Updates::setUpPluginInfo()` when error occurred
521- Drop `mixed` type in `PhpRedisClusterConnection::scanNode()`
522- Prevent loading plugin more than once
523- Don't hijack `action` parameter on dashboards
524
525### Removed
526- ⚠️ Removed deprecated `flushRuntimeCache()` helper
527
528## v1.15.2 - 2022-06-30
529### Added
530- Added SQL queries metric
531
532### Fixed
533- Don't require `ext-redis` when running Relay transactions
534- Only hide upgrade notice in must-use setups
535- Tweak widget latency warning color
536- Fixed rare error of `get_num_queries()` not being available
537
538## v1.15.1 - 2022-06-19
539### Added
540- Show basename in diagnostics
541
542### Changed
543- Add Redis and Relay samples to analytics footnote
544- Narrow type hint to `Transaction` in `PhpRedisConnection::executeMulti()`
545
546### Fixed
547- Handle PHP 7.0/7.1 environments gracefully
548- Show error when using bad plugin slug
549- Don't render analytics when not connected
550- Avoid rare undefined index when not connected in Query Monitor
551- Catch all `Throwable` errors in `ObjectCache::error()`, not only exceptions
552
553## v1.15.0 - 2022-06-10
554
555This releases introduces a settings page to keep an eye on cache analytics, manage plugin updates and use diagnostic tools.
556
557### Added
558- Added analytics charts under _Settings > Object Cache_
559- Added plugin updates under _Settings > Object Cache -> Updates_
560- Added various tools under _Settings > Object Cache -> Tools_
561- Added WordPress 6.0's `wp_cache_*_multiple()` and `wp_cache_flush_runtime()` functions
562- Added support for Redis Sentinel
563- Hijack all transactions to allow command logging
564- Added `X-Redirect-By` for all redirects
565- Added `analytics`, `sentinels`, `service` and `relay.invalidations` configuration options
566- Added REST API endpoint for analytics, cache groups and latency
567- Added `master()` and `replicas()` to `PhpRedisReplicatedConnection`
568- Added `nodes()` to `PhpRedisClusterConnection`
569- Added `updates` configuration option
570- Added `wp redis analytics` CLI command that mimics REST API endpoint
571
572### Changed
573- ⚠️ Require PHP 7.2+
574- ⚠️ Require Relay v0.4.0
575- ⚠️ Added `flush_runtime()` to `ObjectCacheInterface`
576- ⚠️ Added `add_multiple()`, `set_multiple()` and `delete_multiple()` to `ObjectCacheInterface`
577- ⚠️ Added `connectToSentinels()` and `connectToReplicatedServers()` `ConnectionInterface`
578- Use group name as hash slot on cluster connections
579- Deprecated `flushMemory()` in favor of `flushRuntime()` for naming consistency
580- Redirect to settings after activation
581- Allow analytics to be restored after cache flushes
582- Only accept integers and non-empty strings as key names
583- Dropped `string` type for `$key` in several `ObjectCacheInterface` methods
584- Hide misleading Relay statistics in `wp redis info`
585- Reverted: Store `alloptions` as individual keys when using Relay
586- Increased Batcache compatibility
587- Disabled `flush_network` option when using Redis cluster
588- Marked PhpRedis v5.3.4 and older as outdated
589- Catch `Throwable` everywhere, not `Exception`
590- Use a single `window.objectcache` object
591- Highlight expensive commands in Query Monitor
592- Be more helpful about missing command logs in Query Monitor
593
594### Fixed
595- Fixed rare error when enabling drop-in
596- Block `wp redis enable` when `WP_REDIS_CONFIG` is not set
597- Fixed instantiating configuration without valid client extension present
598- Avoid fatal error in `CommandsCollector` when no connection is established
599- Show `rawCommand()` calls as actual commands in Query Monitor
600- Various other bug fixes small additions and improvements
601- Fixed selecting non-zero databases in `wp redis cli`
602- Fixed rare rendering issue with `wp redis watch digest`
603- Fixed normalization of IDNs
604- Don't request filesystem write access to check for drop-in existence
605- Fixed rare bug when flushing specific site via `wp redis flush 1337`
606
607### Security
608- Prevent risky plugin auto-updates
609- Prevent plugin upgrades when using version control
610
611## v1.14.5 - 2022-03-22
612### Added
613- Store `alloptions` as individual keys when using Relay
614- Added health check for Relay configuration
615- Added `Plugin::config()` helper method
616
617### Changed
618- Bump Relay requirement to v0.3.0
619- Sped up `ObjectCache::id()` lookups by caching prefix
620- Sped up `alloptions` hash deletion when using `async_flush`
621- ⚠️ Renamed `SplitsAllOptions` trait to `SplitsAllOptionsIntoHash`
622
623### Fixed
624- Fixed support of older Query Monitor versions
625- Added missing `retries` and `backoff` to diagnostics
626- Avoid rare error in `Connection::ioWait()`
627- Avoid rare `TypeError` in `Diagnostics`
628- Avoid rare error in Query Monitor when no connection is present
629
630## v1.14.4 - 2022-02-03
631### Added
632- Introduced `ObjectCache::Client` and `ObjectCache::clientName()`
633
634### Changed
635- Use `QM_VERSION` to detect Query Monitor version
636- Convert logged commands names to uppercase
637- Avoid log spam when calling Relay's `socketId()`, `socketKey()` or `license()`
638- Make `isMustUse()` and `usingVCS()` helpers static
639- Ignore all connection methods in Query Monitor backtraces
640- Use new `qm/component_type/unknown` filter to set component type
641
642### Fixed
643- Avoid warnings when displaying rare commands in Query Monitor
644
645## v1.14.3 - 2021-12-30
646### Added
647- Added file header health checks
648- Use Query Monitor backtraces and components when available
649- Added integrations for several user role editors
650- Detect must-use installations and VCS checkouts
651- Respect `WP_REDIS_UPDATES_DISABLED` constant and environment variable
652- Added `Plugin::Capability` constant
653- Added `Plugin::$directory` variable
654
655### Changed
656- Use `REQUEST_TIME_FLOAT` when available for improved accuracy
657- Improve handling when `WP_REDIS_CONFIG` is set too late
658- Use `current_screen` action to register dashboard widgets
659- Use `wp_add_inline_style()` for widget styles
660
661### Fixed
662- Replaced non-functional capability checks using `map_meta_cap` with `user_has_cap` filter
663- Restored plugin meta links
664- Restored mu-plugin and drop-in update notices
665- Disable update button in must-use setups
666- Corrected value used for total Relay memory
667- Avoid warning in `Diagnostics` when `WP_REDIS_CONFIG` is not set
668
669## v1.14.2 - 2021-12-12
670### Added
671- Added `objectcache_dashboard_widget` filter
672- Added `objectcache_network_dashboard_widget` filter
673- Added `backoff` and `retries` configuration options
674- Added `pre_objectcache_flush` filter to short-circuit the flushing
675- Safeguard against update confusion attacks using `Update URI` plugin header
676- Added `shared` configuration option to show key count instead of database size in shared environment
677
678### Changed
679- Use decorrelated jitter backoff algorithm by default for all connections
680- Append analytics comment to all XML feeds
681- Show license state in Query Monitor and diagnostics
682- Collect Relay key counts in metrics
683- Bump Relay requirement to v0.2.2
684- Memorize `Relay::stats()` calls
685
686### Fixed
687- Several PHP 8.1 compatibility fixes
688
689## v1.14.1 - 2021-10-26
690### Fixed
691- Fixed invalid nonce errors
692
693### Removed
694- Removed unnecessary `phpversion()` and `setOption()` calls in `RelayConnector`
695
696## v1.14.0 - 2021-10-26
697
698⚠️ This release contains minor breaking changes.
699
700### Added
701- ⚠️ Added `Connector::supports()` method
702- ⚠️ Added `ObjectCacheInterface::boot()` method
703- Added Twemproxy support
704- Added `ObjectCache::metrics()` method
705- Added `Connection::ioWait()` method
706- Added `Plugin::flush()` helper
707- Added several `Diagnostic` helper methods
708- Display Relay cache size in dashboard widget
709- Track reads, writes, hits and misses counts
710- Added cluster support to `wp redis cli`
711- Allow clusters to be flushed asynchronously
712- Added backbone for analytics and `wp redis watch` command with 3 watcher types
713- Added environment type and host to all diagnostics
714
715### Changed
716- ⚠️ Changed dashboard widget identifier to `dashboard_objectcache`
717- Deprecated `$GLOBALS['RedisCachePro']`, use to `$GLOBALS['ObjectCachePro']` instead
718- Deprecated `rediscache_manage` capability, use to `objectcache_manage` instead
719- Deprecated `rediscache_validate_dropin` filter, use `objectcache_validate_dropin` instead
720- Deprecated `rediscache_validate_dropin_version` filter, use `objectcache_validate_dropin_version` instead
721- Deprecated `rediscache_check_filesystem` filter, use `objectcache_check_filesystem` instead
722- Trigger `E_USER_WARNING` instead of `E_USER_NOTICE` in `ObjectCache::__get()`
723- Always use asynchronous flushing with Relay
724- Flush the cache when calling `wp redis enable` and `wp redis disable`, unless `--skip-flush` is passed
725- Don't `EXPIRE` the `alloptions` hash map
726- Memorize `PING` and `INFO` results when feasible
727- Register shutdown function to close cache in `wp_cache_init()`
728- Store prefetches when closing cache
729- Only log incompatible key prefetch warnings in `debug` mode
730- Show extended metrics in Query Monitor panel
731- Simplified Debug Bar integration
732- Moved CLI commands into `Console` namespace
733- Boot connector when setting client in the configuration, not in `wp_cache_init()`
734- Improved error messages when checking of compression/serializer in configuration
735- Use SPL autoload function in `bootstrap.php`
736- Increased priority of dashboard widget
737- Set default `timeout` and `read_timeout` to `5` seconds
738- Set default `retry_interval` to `100` milliseconds
739- Always verify invalid licenses when running health checks
740- Bumped the HTTP timeout for license health checks to `15` seconds
741- Invalidate drop-in file opcode when disabling the cache
742- Cache `get_plugin_data()` calls to improve performance
743- Flush the cache when enabling/disabling the drop-in via dashboard widget and when deactivating the plugin
744- Support must-use Query Monitor setups
745- Bumped `prefix` limit to `32` characters
746
747### Fixed
748- Speed up API health check
749- Fixed some rare PHP notices
750- Fixed fatal error when using `url` option without password
751- Prevent unnecessary config calls in `RelayObjectCache`
752- Support `object-cache-pro.php` basename setups
753- Fix PHP 7.1 and older compatibility in `License`
754
755### Removed
756- Removed unnecessary confirm dialogs from dashboard widget action
757
758## v1.13.3 - 2021-06-08
759### Added
760- Support passing function names to `logger` configuration option
761
762### Changed
763- Improved [Relay](https://relaycache.com) integration and support
764- Improved unsupported `compression` and `serializer` error messages
765- Renamed more things to "Object Cache Pro"
766
767### Fixed
768- Support `url` option without usernames
769- Ensure `wp_debug_backtrace_summary()` is loaded to increase Batcache compatibility
770
771### Security
772- Hide passwords in `url` from diagnostics
773
774## v1.13.2 - 2021-04-29
775### Added
776- Added `relay_listeners` configuration option
777- Added a `BacktraceLogger` logger for easy debugging
778- Added wildcard support in non-prefetchable group names
779
780### Changed
781- Split up `setMutationOptions()` methods
782
783### Fixed
784- Fixed flushing clusters when using a TLS connection
785
786## v1.13.1 - 2021-04-14
787### Changed
788- Disable prefetching for CLI and API requests
789- Added `userlogins` and `wc_session_id` to non-prefetchable groups
790- Prevent even more `__PHP_Incomplete_Class` errors when using prefetching
791
792### Fixed
793- Fixed type error in `PrefetchesKeys`
794
795## v1.13.0 - 2021-04-12
796### Added
797- Added support for [Relay](https://relaycache.com)
798- Added `client` configuration option
799- Added `tls_options` configuration option
800- Added `ObjectCache::withoutMutations()` helper
801- Added `PrefetchesKeys::deletePrefetches()` helper
802- Added `info` log lines to `wp_cache_init()`
803- Added wildcard support in non-persistent group names
804- Show command count and argument class names in Query Monitor
805
806### Changed
807- Respect `debug` configuration option in `wp_cache_init()`
808- Added `Connector::boot(): void` interface method
809- Deprecated `WP_REDIS_PHPREDIS_OPTIONS` constant
810- Renamed several internal exceptions
811- Access fully qualified constants
812- Expect `PhpRedisConnection` in `PhpRedisObjectCache` constructor
813- Use high resolution time when available
814- Increased command time decimals from `2` to `4`
815- Refactored license code to be more graceful
816- Prevent `__PHP_Incomplete_Class` errors when using prefetching
817
818### Fixed
819- Fixed flushing networks when using the `site` or `global` option
820- Fixed preloading in multisite environments
821- Fixed prefetches count discrepancies
822
823## v1.12.0 - 2020-12-23
824### Added
825- Improved PHP 8 compatibility
826- Added support for Batcache
827- Support flagging groups as non-prefetchable
828- Added `ObjectCache::deleteFromMemory(string $key, string $group)` method
829- Added `ObjectCache::flushMemory()` in favor of `ObjectCache::flushRuntimeCache()`
830- Added `rediscache_validate_dropin` filter
831- Added `rediscache_validate_dropin_version` filter
832
833### Changed
834- Support loading the object cache as early as `advanced-cache.php`
835- Changed default value of `cluster_failover` to `error` to improve stability
836- Refactored `flushBlog(int $siteId, string $flush_network = null)` method
837- Check `wp_is_file_mod_allowed('object_cache_dropin')` before automatically updating drop-in
838- Marked PHP 7.3 as outdated
839
840### Fixed
841- Prevent another rare undefined variable notice in `wp_cache_init()`
842- Resolve incompatibility with Query Monitor 3.6.5
843- Updated some links to the documentation
844
845## v1.11.1 - 2020-11-12
846### Changed
847- Only preload groups with at least two keys
848
849### Fixed
850- Convert integer group names to strings
851
852## v1.11.0 - 2020-11-11
853### Added
854- Added prefetching 🚀
855- Added `ObjectCache::flushRuntimeCache()` method
856- Added `PhpRedisConnection::withoutMutations()` method
857- Added support for Query Monitor's new backtraces
858
859### Changed
860- Improved memory usage display in widget
861- Speed up command execution when using replication
862- Improved parameter formatting in Query Monitor
863- Attach backtrace as array along with backtrace summary to log messages
864- Moved runtime cache helpers from to `ObjectCache` class
865
866### Fixed
867- Fixed updating split `alloptions` hash options with equivalent values
868- Send `alloptions` hash read commands to the master when using replication
869- Prevent rare undefined variable notice in `wp_cache_init()`
870
871## v1.10.2 - 2020-09-28
872### Added
873- Overload generic `cache_hits` and `cache_misses` properties
874
875### Changed
876- Always return a `Configuration` from `Configuration::safelyFrom()`
877- Use invalid configuration option name (not method name) in error log message
878
879### Fixed
880- Use key caching in multisite environments
881- Added suffix to MU and Drop-in stubs to avoid invalid plugin header error when activating
882
883## v1.10.1 - 2020-09-16
884### Fixed
885- Fixed an issue with non-persistent, numeric keys in `get_multiple()`
886
887## v1.10.0 - 2020-09-15
888### Added
889- Show connection class in Query Monitor
890- Added `Configuration::parseUrl()` helper
891- Added support for replicated connections
892- Show configuration instantiation errors in widget and site health
893
894### Changed
895- Moved `RedisCachePro\Config` class to `RedisCachePro\Configuration\Configuration`
896- Renamed `slave_failover` configuration option to `cluster_failover` ✊🏿
897- Extracted cluster related configuration into `RedisCachePro\Configuration\Concerns\Cluster`
898- Trim log messages to 400 characters in Debug Bar log
899- Throw `RedisConfigValueException` for invalid configuration values instead of `RedisConfigException`
900
901### Fixed
902- Create a proper configuration object when cache instantiation fails
903- Escape command parameters in Query Monitor extension
904- Moved Redis related information from `ObjectCache::info()` to `PhpRedisObjectCache::info()`
905- Always strip `unix://` from PhpRedis host parameter
906- Ensure `PhpRedisObjectCache::info()->status` returns a boolean
907- Prevent invalid configuration values from booting plugin
908
909## v1.9.2 - 2020-08-29
910### Added
911- Look for `object-cache-pro` directory in must-use stub
912
913### Fixed
914- Fixed host scheme in PhpRedis 5.0.2 and older
915
916## v1.9.1 - 2020-08-26
917### Added
918- Added `wp_cache_remember()` and `wp_cache_sear()` functions
919
920### Changed
921- Pointed all URLs to the new domain `objectcache.pro`
922- Change log prefix from `rediscache` to `objectcache`
923- Slightly sped up API loading in object cache drop-in
924
925### Fixed
926- Only throw exception in mu-plugin and drop-in when `WP_DEBUG` is true
927
928## v1.9.0 - 2020-08-15
929### Added
930- Added `url` configuration option
931- Added `scheme` configuration option
932- Added support for `options` parameter added in PhpRedis 5.3
933- Added support for LZ4 compression (PhpRedis 5.3+)
934
935### Changed
936- Support connecting to sockets and using TLS in `wp redis cli`
937- Convert `host` configuration option to lowercase
938- Set `scheme` when included in `host` configuration option
939
940### Fixed
941- Fixed getting multiple numeric keys in `ArrayObjectCache`
942- Fixed setting `port`, `database`, `maxttl` and `retry_interval` as numeric string
943
944## v1.8.2 - 2020-08-11
945### Changed
946- Reverted eager plugin name change in v1.8.1
947- Updated plugin URL to new domain to avoid redirects
948
949### Fixed
950- Don't flag drop-in as invalid when it's just outdated
951
952## v1.8.1 - 2020-08-11
953### Changed
954- Look for API in `object-cache-pro` directories
955
956### Fixed
957- Fixed an issue with numeric keys and improved error handling in `get_multiple()`
958
959## v1.8.0 - 2020-07-23
960### Added
961- Added `username` configuration option for Redis 6 ACL support
962- Added `cache` configuration option to set a custom object cache class
963- Added `connector` configuration option to set a custom connector class
964- Added `flush_network` configuration option (defaults to `all`)
965- Support flushing individual sites via _Network Admin > Sites_
966- Added `--skip-flush-notice` option to `wp redis enable` command
967- Added health check to ensure asynchronous flushing is supported
968- Added health check to ensure drop-in can be managed
969- Added intuitive alias for all WP CLI commands
970- Added support for `wp_cache_get_multiple()` introduced in WP 5.5
971
972### Changed
973- Renamed "Dropin" to "Drop-in" everywhere
974- Support flushing individual sites using `wp redis flush`
975- Hide Redis memory from dashboard widget in multisite environments
976- Display notice when license token is not set or invalid, as well as when the license is unpaid or canceled
977
978### Fixed
979- Explicitly set permissions of `object-cache.php` to `FS_CHMOD_FILE`
980
981## v1.7.3 - 2020-07-10
982### Fixed
983
984- Support older versions of Query Monitor
985- Ignore HTTP errors for license verification requests
986- Prevent undefined index notice in `ObjectCache::info()`
987- Prevent call to undefined function in `Licensing::telemetry()`
988
989## v1.7.2 - 2020-07-09
990### Added
991- Use `wp_opcache_invalidate()` on drop-in
992- Refactored `Diagnostics` to use `Diagnostic` objects
993
994### Changed
995- Minor dashboard widget improvements
996- Minor Query Monitor extension improvements
997- Cleanup plugin options upon deactivation
998- Disable FOSS version when activating plugin to avoid confusion
999
1000### Fixed
1001- Escape more HTML outputs
1002- Prevent unnecessary license verification requests
1003
1004## v1.7.1 - 2020-06-08
1005### Fixed
1006- Always send `setOption()` values as string
1007- Fixed Query Monitor panels not showing up for some setups
1008- Fixed `ArrayObjectCache` fallback instantiation in `wp_cache_init()`
1009- Format all commands parameters using `json_encode()` in Query Monitor panel
1010
1011## v1.7.0 - 2020-05-30
1012### Added
1013- Added support for Query Monitor
1014- Added context to license issues in the dashboard widget
1015- Show updates for must-use plugin and object cache drop-in
1016
1017### Changed
1018- Improved formatting of config values in diagnostics
1019- Don't highlight `noeviction` policy when maxTTL is set
1020
1021### Fixed
1022- Prevent unnecessary plugin update requests
1023
1024## v1.6.0 - 2020-05-11
1025### Added
1026- Support PHP 7.0 and PhpRedis 3.1.1
1027- Indicate missing license token in dashboard widget
1028
1029### Changed
1030- Switched to `WP_CLI\Utils\proc_open_compat()` for `wp redis cli`
1031- Ping Redis during object cache initialization to catch `LOADING` errors
1032
1033### Fixed
1034- Fixed potential `TypeError` during `upgrader_process_complete` action
1035
1036## v1.5.1 - 2020-04-29
1037### Fixed
1038- Fixed global group cache keys
1039
1040### Security
1041- Prevent XSS injection using cache group names when using Debug Bar
1042
1043## v1.5.0 - 2020-04-22
1044### Added
1045- Added `Requires PHP` and `Network` to plugin header fields
1046- Show supported compression formats in site health
1047
1048### Changed
1049- Initialize plugin after all plugins have been loaded
1050- Improved the plugin version and basename detection
1051- Improved muting the `wp redis cli` auth warning
1052- Don't require setting `port` when connecting to a unix socket
1053- Validate config connection information before connecting
1054- Always inline widget styles (1015 bytes)
1055- Always inject plugin details into `update_plugins` transient
1056- Improved obfuscation of sensitive values
1057- Hide health link from plugin actions in WP <5.2 and multisite networks
1058- Prevent widget color clashing with color scheme
1059
1060### Fixed
1061- Fixed detection of multisite networks
1062- Fixed setting global and non-persistent groups
1063- Fixed notices in Debug Bar extension
1064- Fixed `INFO` command when using cluster
1065
1066### Removed
1067- Removed `wp_clear_scheduled_hook` for `rediscache_report`
1068
1069## v1.4.0 - 2020-02-27
1070### Added
1071- Added support for storing `alloptions` key as hash
1072- Added `wp redis cli` command to spawn `redis-cli` process with configuration
1073- Support `WP_REDIS_DIR` constant in `mu-plugin.php` stub
1074
1075### Changed
1076- Ensure object cache drop-in is valid before flushing via CLI
1077- Colorized `wp redis flush` errors
1078
1079### Fixed
1080- Fixed typo in `RedisConfigMissingException`
1081- Fixed logs missing from Debug Bar
1082- Fixed cloning logic in `PhpRedisObjectCache::storeInMemory()`
1083- Inline styles when plugin is symlinked or located outside of web root
1084
1085## v1.3.0 - 2020-02-06
1086### Added
1087- Added support for asynchronous flushing
1088- Added support for data compression using LZF and Zstandard
1089- Added network admin dashboard widget
1090- Added `wp redis flush` command with support for `--async` flag
1091- Automatically update drop-in after plugin update
1092- Show used and max memory in widget, site health and Debug Bar
1093
1094### Changed
1095- Switched to using `ErrorLogLogger` by default
1096- The `ArrayLogger` now extends `ErrorLogLogger` and vice versa
1097- The log levels now default to `['emergency', 'alert', 'critical', 'error']`
1098- Changed log level of `ObjectCache::error()` from `critical` to `error`
1099- Introduced `PhpRedisMissingException` and `PhpRedisOutdatedException`
1100- Attempt direct filesystem access when WP filesystem initialization fails
1101- Renamed internal cache methods in `PhpRedisObjectCache` to be more descriptive
1102- Capture more errors by using `Throwable` in some places
1103- Moved Debug Bar HTML into template files
1104- Support setting `log_levels` configuration option to `null`
1105
1106### Removed
1107- Support setting `token` and `password` to `null`
1108- Removed captured errors from site health information
1109
1110## v1.2.1 - 2020-01-20
1111### Added
1112- Added health checks link to plugin actions
1113
1114### Changed
1115- Made initialization exceptions more helpful
1116- Escape HTML in Debug Bar log messages
1117- Improved pinging cluster nodes
1118
1119### Fixed
1120- Fixed duplicate prefix when using cluster
1121- Fixed undefined index notices in `Licensing`
1122- Fixed a issue when loading widget styles as must-use plugin
1123- Resolved minor spelling mistakes
1124
1125## v1.2.0 - 2019-11-29
1126### Added
1127- Added dashboard widget
1128- Added support for automatic WordPress updates
1129- Added diagnostic tests and information to _Tools > Site Health_
1130- Added `token` configuration option to set license token
1131
1132### Changed
1133- Disable object cache when deactivating/uninstalling the plugin
1134
1135### Fixed
1136- Fixed DebugBar integration on case-sensitive filesystems
1137
1138## v1.1.0 - 2019-11-19
1139### Added
1140- Added log levels
1141- Added `WP_REDIS_DISABLED` environment variable
1142
1143### Changed
1144- Use `PhpRedisConnection` for each master when flushing clusters
1145- Obfuscate all non-`null` passwords in diagnostics
1146- Allow password to be `null` for more convenient fallbacks
1147
1148### Fixed
1149- Prevent timeouts when flushing database
1150- Use inline styles to clear floats in Debug Bar panels
1151
1152### Security
1153- Obfuscate password in constants section of diagnostics
1154
1155## v1.0.0 - 2019-11-01
1156### Added
1157- Initial stable release
1158
Ui Ux Design – Teachers Night Out https://cardgames4educators.com Wed, 16 Oct 2024 22:24:18 +0000 en-US hourly 1 https://wordpress.org/?v=6.9.4 https://cardgames4educators.com/wp-content/uploads/2024/06/cropped-Card-4-Educators-logo-32x32.png Ui Ux Design – Teachers Night Out https://cardgames4educators.com 32 32 Masters In English How English Speaker https://cardgames4educators.com/masters-in-english-how-english-speaker/ https://cardgames4educators.com/masters-in-english-how-english-speaker/#comments Mon, 27 May 2024 08:54:45 +0000 https://themexriver.com/wp/kadu/?p=1

Erat himenaeos neque id sagittis massa. Hac suscipit pulvinar dignissim platea magnis eu. Don tellus a pharetra inceptos efficitur dui pulvinar. Feugiat facilisis penatibus pulvinar nunc dictumst donec odio platea habitasse. Lacus porta dolor purus elit ante bibendum tortor netus taciti nullam cubilia. Erat per suspendisse placerat morbi egestas pulvinar bibendum sollicitudin nec. Euismod cubilia eleifend velit himenaeos sodales lectus. Leo maximus cras ac porttitor aliquam torquent pulvinar odio volutpat parturient. Quisque risus finibus suspendisse mus purus magnis facilisi condimentum consectetur dui. Curae elit suspendisse cursus vehicula.

Turpis taciti class non vel pretium quis pulvinar tempor lobortis nunc. Libero phasellus parturient sapien volutpat malesuada ornare. Cubilia dignissim sollicitudin rhoncus lacinia maximus. Cras lorem fermentum bibendum pellentesque nisl etiam ligula enim cubilia. Vulputate pede sapien torquent montes tempus malesuada in mattis dis turpis vitae. Porta est tempor ex eget feugiat vulputate ipsum. Justo nec iaculis habitant diam arcu fermentum.

We offer comprehen sive emplo ment services such as assistance wit employer compliance.Our company is your strategic HR partner as instead of HR. john smithson

Cubilia dignissim sollicitudin rhoncus lacinia maximus. Cras lorem fermentum bibendum pellentesque nisl etiam ligula enim cubilia. Vulputate pede sapien torquent montes tempus malesuada in mattis dis turpis vitae.

Exploring Learning Landscapes in Academic

Feugiat facilisis penatibus pulvinar nunc dictumst donec odio platea habitasse. Lacus porta dolor purus elit ante bibendum tortor netus taciti nullam cubilia. Erat per suspendisse placerat morbi egestas pulvinar bibendum sollicitudin nec. Euismod cubilia eleifend velit himenaeos sodales lectus. Leo maximus cras ac porttitor aliquam torquent.

]]>
https://cardgames4educators.com/masters-in-english-how-english-speaker/feed/ 1