Descripción
A persistent object cache helps your site perform well. This one uses the widely available SQLite3 extension, and optionally the igbinary and APCu extensions to php. Many hosting services offer those extensions, and they are easy to install on a server you control.
What is this about?
It’s about making your site’s web server perform better. An object cache does that by reducing the workload on your MariaDB or MySQL database. This is not a page cache; these persistent objects go into a different kind of cache. These objects aren’t chunks of web pages ready for people to view in their browsers, they are data objects for use by the WordPress software.
Las cachés son omnipresentes en la informática, y WordPress tiene su propio subsistema de almacenamiento en caché. Las cachés contienen copias a corto plazo de los resultados de costosas búsquedas o cálculos de bases de datos, y permiten que el software use la copia en lugar de repetir la costosa operación. Este plugin (al igual que otros plugin de almacenamiento en caché de objetos) extiende el subsistema de almacenamiento en caché de WordPress para guardar esas copias a corto plazo de la vista de página a la vista de página. El caché de WordPress resulta ser un caché de memoización.
Sin una caché de objetos persistente, cada vista de página de WordPress debe usar el servidor de base de datos MariaDB o MySQL para recuperar todo sobre tu sitio. Cuando un usuario solicita una página, WordPress comienza desde cero y carga todo lo que necesita del servidor de base de datos. Solo entonces puede entregar contenido al usuario. Con una caché de objetos persistente, WordPress carga inmediatamente gran parte de la información que necesita. Esto aligera la carga en el servidor de base de datos y entrega contenido a los usuarios más rápido.
Who should use this?
If your site runs on a single web server machine, and that server provides the SQLite3 and igbinary extensions to php, this plugin will almost certainly make your site work faster. And if that server provides the APCu extension, this plugin uses it too.
Some hosting providers offer redis cache servers. If your provider offers redis, it may be a good choice. You can use it via the Redis Object Cache plugin. Sites using redis have one SQL database and another non-SQL storage server: redis. Other hosting providers offer memcached, which has the Memcached Object Cache plugin. And some large multipurpose cache plugins, such as the LiteSpeed Cache, also offer object caching based on one of those cache server software packages.
The cache-server approach to object caching comes into its own when you have multiple load-balanced web server machines handling your site. SQLite doesn’t work correctly in a multiple-web-server environment.
But, for single-server site configurations, SQLite, possibly assisted by APCu, performs well. And the vast majority of sites are single-server.
APCu
APCu is an in-memory storage medium. It lets php programs, like WordPress, store data in shared memory so it’s very fast to retrieve when needed. If APCu is available on your host server, you can configure this plugin to use it. It reduces the typical cache lookup time to one-fifth or less of the SQLite lookup time, which is itself a few tens of microseconds. Performance counts, especially on busy web sites.
Please look at Installation to learn how to configure this plugin to use APCu. The plugin works fast without it, and faster with it.
WP-CLI: Even if APCu is in use, caching with SQLite is necessary when your web site uses WP-CLI, because WP-CLI programs do not have acces to the APCu cache. This plugin writes all cached data both to APCu and to SQLite and makes sure the two are synchronized.
WP-CLI
You can control this plugin via WP-CLI once you activate it. Please type this command into your shell for details.
wp help sqlite-object-cache
Credits
Thanks to Till Krüss. His Redis Object Cache plugin serves as a model for this one. And thanks to Ari Stathopoulos and Jonny Harris for reviewing this. Props to Matt Jones for finding and fixing a bug that appeared on a heavily loaded system. Thanks to Massimo Villa for testing help, and to nickchomey for a comprehensive code review. All defects are, of course, entirely the author’s responsibility.
Y gracias a Jetbrains por el uso de sus herramientas de desarrollo de software, especialmente PhpStorm. Es difícil imaginar cómo podría desarrollarse un plugin como este sin las herramientas de PhpStorm para explorar bases de código épicas como la de WordPress.
How can I learn more about making my WordPress site more efficient?
We offer several plugins to help with your site’s database efficiency. You can read about them here.
Capturas
Instalación
For this plugin to work for you, your server must have the SQLite3 extension to php installed.
If you have the igbinary and APCu extensions, this plugin uses them to work more efficiently. But it works without them.
Installing «SQLite Object Cache» can be done either by searching for «SQLite Object Cache» via the «Plugins > Add New» screen in your WordPress dashboard, or by using the following steps:
- Descarga el plugin desde WordPress.org
- Sube el archivo ZIP a través de la pantalla ‘Plugins > Añadir nuevo > Subir’ de tu escritorio de WordPress
- Activa el plugin a través del menú «Plugins» de WordPress
Or, use these WP-CLI commands to install the plugin, secure it, activate it, and set the cache size to 32MiB.
wp plugin install sqlite-object-cache
wp config set WP_CACHE_KEY_SALT $(openssl rand -base64 12)
wp plugin activate sqlite-object-cache
wp sqlite-object-cache size 32
The plugin offers a few optional settings for your wp-config.php
file. Do not change them while the plugin is activated. If you change them, deactivate the plugin first, then change them, then reactivate the plugin.
- WP_SQLITE_OBJECT_CACHE_SERIALIZE. When true, this forces the plugin to use ‘s serialize() scheme to store cached data in SQLite. If this is not set, the plugin uses the more efficient igbinary scheme if it is available.
- WP_SQLITE_OBJECT_CACHE_DB_FILE. This is the SQLite file pathname. The default is
…/wp-content/.ht.object_cache.sqlite
. Use this if you want to place the SQLite cache file outside your document root. - WP_SQLITE_OBJECT_CACHE_TIMEOUT. This is the SQLite timeout in milliseconds. Default: 5000. (Notice that the times shown in the Statistics tab are in microseconds if you compare them to this timeout setting.)
- WP_SQLITE_OBJECT_CACHE_JOURNAL_MODE. This is the SQLite journal mode. Default: ‘WAL’. Possible values DELETE | TRUNCATE | PERSIST | MEMORY | WAL | WAL2 | NONE. (Not all SQLite3 implementations handle WAL2.)
- WP_SQLITE_OBJECT_CACHE_APCU. If true enables cache acceleration with APCu RAM. This setting can be updated from the plugin’s Settings page.
- WP_CACHE_KEY_SALT. Set this to a hard-to-guess random value to make your cache keys harder to guess. This setting works for other cache plugins as well.
Configuring the cache key salt
When multiple sites share the same server hardware and software, they can sometimes share the same cache data. Setting WP_CACHE_KEY_SALT
to a hard-to-guess random value for each site makes it much harder for one site to get another site’s data. This works for other cache plugins too. Notice that this WP_CACHE_KEY_SALT
value must be set, in your site’s wp-config.php
file, before activating any cache plugin, including page caches and persistent object caches.
To set the value put a line like this in wp-config.php
.
define( 'WP_CACHE_KEY_SALT', 'Random_t6xJix' );
Of course, use your own random value, not the one in this example. You can get one from your Linux command line shell with the openssl rand -base64 12
. Or, if you use WP-CLI you can set the value directly with
wp config set WP_CACHE_KEY_SALT $(openssl rand -base64 12)
Configuring and Using APCu
APCu is an in-memory storage medium. If APCu is available on your host server, you can configure this plugin to use it. There is an option to enable it on the plugin’s Settings page. Or you can do it manually. Put a WP_SQLITE_OBJECT_CACHE_APCU value of true
into your wp-config.php
file. You can use this WP-CLI command to do that.
wp config set --raw WP_SQLITE_OBJECT_CACHE_APCU true
Or, you can edit your wp-config.php
file to add this line.
define( 'WP_SQLITE_OBJECT_CACHE_APCU', true );
FAQ
-
¿Funciona esto con una instalación multisitio de WordPress?
-
Sí. Para ver la página de Ajustes, elije Ajustes > Caché de Objetos en el sitio principal, o en cualquier sitio, de la instalación multisitio.
-
¿Cuánto más rápido hará esto mi sitio?
-
Exactly predicting each site’s speedup is not possible. Still, benchmarking results comparing it to other object caching schemes are promising. Please see this. If you run a benchmark, please let the author know by leaving a comment on that page or using the support forum.
-
What Cached Data Size should I use for my site?
-
The default setting for Cached Data Size is 16 megabytes (MiB). This plugin allows the actual cached data size to grow larger than that, and occasionally removes old — the least recently updated — data to trim back the size to the setting. Take a look at the Statistics page. If your actual cached data usage under All Groups is consistently larger than the setting, double the setting.
If you operate a large and busy site, try an initial setting of 32 MiB, then adjust it based on the growth of the actual size.
Notice that this setting controls the size of the data in the cache. That is the size shown under All Groups. The data file used by SQLite is larger than that.
-
¿Qué es SQLite?
-
SQLite es un software de base de datos rápido y eficaz. No requiere un servidor independiente. En su lugar, se integra en php mediante la extensión SQLite3. Los programas SQLite no necesitan abrir conexiones de red para enviar peticiones y esperar respuestas.
-
What is igbinary?
-
igbinary is a php extension that provides an efficient way to serialize and compress the kinds of data objects stored in caches. It, in some cases, uses less than half the storage space of the built-in php data serializer. If igbinary is available in your php configuration, this plugin uses it, unless you force it not to by setting
WP_SQLITE_OBJECT_CACHE_SERIALIZE
totrue
inwp-config.php
. -
What is APCu?
-
APCu is php extension offering an in-memory storage medium. You can configure this plugin to use it to speed up cache lookups.
-
On most operating systems the size of the APCu cache is, as installed, 32MiB. If you need to increase this size you can a line to your
php.ini
file mentioning the apc.shm_size configuration option. For example, the lineapc.shm_size = 64M
sets the size to 64MiB. Please consult your operating system or hosting provider documetation for information on how to do this.Notice that sometimes multiple WordPress installations that run on the same server share the same APCu cache, so provide enough space for them all. And keep in mind that this plugin only uses APCu to accelerate its operations, so the consequences of setting its size too small are not great.
-
¿Este plugin sustituye MariaDB o MySQL por SQLite?
-
No. Tu servidor SQL de base de datos MariaDB o MySQL todavía contienen todo tu contenido. Todas las importaciones, exportaciones, copias de seguridad y otras operaciones de base de datos de tu sitio continúan funcionando normalmente. Este plugin utiliza SQLite simplemente para mantener valores con nombre. Por ejemplo, un valor denominado «post|3» contendrá una copia en caché temporal y fácil de recuperar del puesto número 3. Cuando necesite esa publicación, WordPress puede obtenerla rápidamente de SQLite.
-
Espera, ¿qué? ¿Realmente necesito dos tipos diferentes de base de datos SQL?
-
No, no es así. Este complemento no utiliza SQLite como servidor de bases de datos completo.
Una caché de objetos persistente necesita algún tipo de mecanismo de almacenamiento. SQLite sirve este plugin como mecanismo de almacenamiento de clave / valor rápido y simple.
Algunos proveedores de alojamiento ofrecen servidores de caché redis escalables y de alto rendimiento. Puedes utilizarlo a través del plugin Redis Object Cache. Los sitios que utilizan redis tienen una base de datos SQL y otro esquema de almacenamiento no SQL: redis. Otros proveedores de alojamiento ofrecen memcached, que tiene el Memcached Object Cache.
But many hosting providers don’t offer either redis or memcached, while they do offer SQLite. This plugin enables your site to use a persistent object cache even without a separate cache server. And, because everything happens within your web server, the performance is good.
-
Is this plugin compatible with my page-caching plugin?
-
Probably. Page caching and persistent object caching are completely separate functions in WordPress. But, some multi-feature caching plugins support optional object caching using redis or memcached. If that feature is enabled in your page cache plugin, you should not use this plugin.
You can find out whether your page-cache plugin also enables persistent object caching. Look at the Drop-in section of the Plugins -> Installed Plugins page. If it mentions the drop-in called «object-cache.php» then your page cache plugin is handling persistent object caching. You should disable that feature before using this plugin.
Users of this plugin have found that it works well with WP Rocket, LiteSpeed Cache, WP Total Cache, WP Super Cache, and WP Fastest Cache. It also works with Cloudflare and other content delivery networks. The author has not learned of any incompatibilities in this area. (If you find one please start a support topic!)
-
Can I disable object caching for my backend dashboard or other pages or REST API operations I choose?
-
No.
That’s not how object caching works. It’s different from page caching. It works at the level of individual database operations in the WordPress code, not at the level of whole pages.
-
¿Este plugin es compatible con mi versión de MySQL o MariaDB?
-
Sí. No requiere ninguna versión específica del servidor de bases de datos.
-
Is this persistent object cache faster than Redis or memcached?
-
Yes. Those cache servers require WordPress to make round-trip network requests, while this one does not. Many users have found this caching methodology to be fast.
-
This cache uses a file on my server HDD/SSD, while redis and memcached use RAM. Isn’t RAM faster?
-
RAM is indeed faster. Modern server operating systems offer extensive page caching for files, and SQLite is designed to take advantage of that, so the data needed may already be in RAM. Using a separate cache server require the web server to issue network requests and wait for responses, whereas using SQLite does not.
-
¿Por qué no utilizar el servidor principal de bases de datos MariaDB o MySql del sitio para la caché de objetos?
-
En WordPress, como en muchos frameworks web, tu servidor de base de datos es un cuello de botella para el rendimiento. Utilizar otro mecanismo para la caché de objetos evita aumentar la carga de trabajo de tu base de datos. Los servidores web sirven páginas utilizando varios procesos php, y cada proceso gestiona su propia carga de trabajo SQLite mientras actualiza un archivo de base de datos compartido. Eso reparte la carga de trabajo de la caché de objetos entre muchos procesos en lugar de centralizarla.
-
¿Tengo que hacer una copia de seguridad de los datos en SQLite?
-
No. Es una caché, y todo lo que hay en ella es efímero. Cuando WordPress no encuentra lo que necesita en la caché, simplemente lo vuelve a calcular o lo obtiene de la base de datos.
Para evitar hacer copias de seguridad de archivos SQLite, dile a tu plugin de copia de seguridad que omita los archivos llamados
*.sqlite
,*.sqlite-wal
,*.sqlite-wal2
y*.sqlite-shm
.Este plugin elimina automáticamente la copia de seguridad de los datos SQLite cuando utiliza los plugins Updraft Plus, BackWPUp, o WP STAGING. El plugin Duplicator no ofrece una forma automatizada de suprimir la copia de estos archivos.
If you use some other backup or cloning plugin, please let the author know by creating a support topic. It may be possible for this plugin to tell that plugin to skip backing up the SQLite files.
-
Si ya tengo otro plugin de caché de objetos persistente, ¿puedo utilizar éste?
-
No. Sólo necesitas un plugin de caché de objetos persistentes, y WordPress sólo admite uno.
-
Si tengo una instalación escalable con balanceador de carga, ¿puedo utilizarlo?
-
No. Si tienes más de un servidor web esto no funciona correctamente. Si operas a esa escala, utiliza redis u otro servidor de caché. (Si no estás seguro de si tienes una instalación con balanceador de carga, es casi seguro que no la tienes).
Please notice that SQLite does not work correctly if you put its files on a shared network drive (via CIFS, SMB, NFS, or some other drive sharing protocol).
-
¿Puedo utilizarlo con el plugin Performance Lab?
-
Sí, pero primero debes activar este plugin antes de activar Performance Lab. Y, debes desactivar Performance Lab antes de desactivar este plugin por última vez.
El plugin Performance Lab ofrece algunas formas avanzadas y experimentales que hacen que tu sitio sea más rápido. Una de sus funciones utiliza código de inicialización de caché de objetos para iniciar el seguimiento del rendimiento. Así que se requiere un orden de activación si quieres que ambos funcionen.
-
How can I use this object cache in my plugin or theme code to make it run faster?
-
Fácil. Utiliza los datos transitorios para almacenar tus datos almacenables en caché. La API de transitorios de WordPress utiliza la caché de objetos persistentes si está disponible, y la base de datos MariaDB o MySQL cuando no lo está. La API de metadatos y la API de opciones también utilizan la caché de objetos persistente.
-
¿Cómo funciona esto?
-
Este plugin utiliza un WordPress drop-in para ampliar la funcionalidad de la clase WP_Cache. Cuando activas el plugin crea el archivo dropin
.../wp-content/object-cache.php
. Tras la desactivación, elimina ese archivo y los datos almacenados en caché. -
¿Dónde almacena el plugin los datos almacenados en caché?
-
Está en el directorio
wp_content
de tu sitio, en el archivo llamado.ht.object-cache.sqlite
. El nombre de ese archivo tiene el prefijo.ht.
para evitar que tu servidor web permita que se descargue. SQLite también utiliza a veces los archivos denominados.ht.object-cache.sqlite-shm
y.ht.object-cache.sqlite-wal
, por lo que es posible que veas cualquiera de esos archivos.You can make the plugin put its files at some other location by putting the pathname you want in
WP_SQLITE_OBJECT_CACHE_DB_FILE
in yourwp-config.php
.En Linux y otros sistemas operativos derivados de UNIX, debes dar al comando
ls -a
para ver los archivos cuando sus nombres empiecen por punto. -
Quiero almacenar mis datos almacenados en caché en un lugar más seguro. ¿Cómo lo hago?
-
Poner los archivos .sqlite fuera de la raíz de documentos del sitio es una buena práctica de seguridad. Así es como lo puedes hacer. Si defines la constante
WP_SQLITE_OBJECT_CACHE_DB_FILE
enwp_config.php
el plugin la usará para el nombre de ruta del archivo sqlite. Por ejemplo, siwp-config.php
contiene esta líneadefine( 'WP_SQLITE_OBJECT_CACHE_DB_FILE', '/tmp/mysite-object-cache.sqlite' );
los datos de tu caché de objetos van a la carpeta
/tmp
en un archivo llamadomysite-object-cache.sqlite
.You can also define
WP_CACHE_KEY_SALT
to be a hard-to-guess text string. Continuing the example, this linedefine( 'WP_CACHE_KEY_SALT', 'qrstuv' );
hace que los datos de la caché de objetos vayan a la carpeta
/tmp
en un archivo llamadomysite-object-cache.qrstuv.sqlite
. -
Can this plugin use SQLite memory-mapped I/O?
-
Yes. You can use your OS’s memory map feature to access and share cache data with SQLite Memory-Mapped I/O. On some server configurations this allows multiple php processes to share cached data more quickly. In the plugin this is disabled by default. You can enable it by telling the plugin how many MiB to use for memory mapping. For example, this wp-config setting tells the plugin to use 32MiB.
define( 'WP_SQLITE_OBJECT_CACHE_MMAP_SIZE', 32 );
Notice that using memory-mapped I/O may not help performance in the highly concurrent environment of a busy web server. That is why it is disabled by default. Notice also that this kind of memory-mapping is not the same thing as the APCu cache.
-
A veces recibo errores de tiempo de espera de SQLite. ¿Cómo puedo corregirlos?
-
Algunos sitios, ocasionalmente, generan mensajes de error similares a este:
Unable to execute statement: database is locked in /var/www/wp-content/object-cache.php:1234
Esto puede ocurrir si tu servidor coloca tus archivos de WordPress en un almacenamiento conectado a la red (es decir, en una unidad de red). Para solucionarlo, almacena tus datos en caché en una unidad conectada localmente. Consulta la pregunta acerca de cómo almacenar tus datos en un lugar más seguro. También puede ocurrir en un sitio muy concurrido.
-
¿Por qué obtengo errores cuando utilizo WP-CLI para administrar mi sitio?
-
A veces, los comandos WP-CLI emitidos desde un intérprete de comandos se ejecutan con un usuario distinto del servidor web. Este complemento crea uno o más archivos de caché de objetos. Es posible que el servidor web no pueda leer o escribir en un archivo de caché de objetos si ha sido creado por el usuario wp-cli. O al revés.
En Linux, puedes ejecutar tus comandos shell WP-CLI de la siguiente forma:
sudo -u www-data wp config list
Así te aseguras de que se ejecutan con el mismo usuario que el servidor web. -
Does this plugin work with sites hosted on Microsoft Windows OSs with the IIS web server?
-
Yes. But please be aware that users have reported cache corruption when using APCu. And please be sure to use the so-called «non thread safe» versions of php executables and DLLs.
-
The Statistics display seems complex. What does it all mean?
-
This plugin measures individual operations such as the time to look something up in the cache. It collects those individual measurements. The Statistics display analyzes them to show the fastest and slowest operations, the average operation, and other desciptive statistics.
Please read this for more information. -
¿Hay algún chiste en todo esto?
-
P: ¿Cuáles son las dos cosas más difíciles de hacer bien en informática?
- Guardar cosas en caché.
- Poner nombre a las cosas.
- Afrontar los errores de uno en uno.
Seriously, the core of WordPress has already worked out, over years of development and millions of sites, how to cache things and name them. This plugin, and the other persistent object cache plugins, simply extend that mechanism to make those things persistent.
-
Tengo otra pregunta
-
Please look for more questions and answers here. Or ask your question in the support forum. If you start a support forum topic, please go to Tools->Site Health->Info, copy your site info from there and paste it into your support topic.
Reseñas
Colaboradores y desarrolladores
«SQLite Object Cache» es un software de código abierto. Las siguientes personas han colaborado con este plugin.
Colaboradores«SQLite Object Cache» está traducido en 3 idiomas. Gracias a los traductores por sus contribuciones.
Traduce «SQLite Object Cache» a tu idioma.
¿Interesado en el desarrollo?
Revisa el código , echa un vistazo al repositorio SVN o suscríbete al registro de desarrollo por RSS.
Registro de cambios
1.5.6
- Fix a warning while generating diagnostic info.
- Update wp-config.php more robustly.
1.5.5
- Some diagnostic data now appears in Site Health – Info.
- The drop-in no longer attempts to load translations early, to eliminate an unterminated recursion.
- A problem with index creation on ancient SQLite versions is corrected.
1.5.4
- Handle non-persistent groups, get_multiple cache-misses, and MS-DOS line endings correctly.
1.5.2
- Correct a regression in object fetching (failure to clone when needed).
- Correct wrong display of Use APCu checkbox immediately after setting change
1.5.1
- Provide APCu opt-in on the settings page.
1.5.0
- Use APCu to increase performance if it is available and if WP_SQLITE_OBJECT_CACHE_APCU is defined.