SQLite Object Cache

Descripción

Una caché de objetos persistentes ayuda a que tu sitio funcione bien. Este utiliza la extensión ampliamente disponible SQLite3 para php. Muchos servicios de alojamiento lo ofrecen. Si tu servicio de alojamiento no proporciona memcached o redis, es posible que puedas usar este plugin en su lugar y obtener el beneficio del almacenamiento en caché de objetos.

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.

Gracias a Till Krüss. Su plugin Redis Object Cache sirve como modelo para este. Y gracias a Ari Stathopoulos y Jonny Harris por revisar esto. (Todos los defectos son, por supuesto, enteramente responsabilidad del autor).

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.

Capturas

  • Panel de ajustes. Accede a él con Ajustes > Caché de objetos.
  • Panel de estadísticas de rendimiento.

Instalación

Puedes instalar «SQLite Object Cache» buscando «SQLite Object Cache» en la pantalla «Plugins > Añadir nuevo» de tu escritorio de WordPress, o siguiendo estos pasos:

  1. Descarga el plugin desde WordPress.org
  2. Sube el archivo ZIP a través de la pantalla ‘Plugins > Añadir nuevo > Subir’ de tu escritorio de WordPress
  3. Activa el plugin a través del menú «Plugins» de WordPress

El plugin ofrece ajustes opcionales para tu archivo wp-config.php. Si los cambias, desactiva primero el plugin, cámbialos y luego reactiva el plugin.

  1. WP_SQLITE_OBJECT_CACHE_DB_FILE. Esta es la ruta del archivo SQLite. El valor predeterminado es …/wp-content/.ht.object_cache.sqlite. Utiliza esta opción si deseas colocar el archivo de caché SQLite fuera de la raíz del documento.
  2. WP_SQLITE_OBJECT_CACHE_TIMEOUT. Este es el tiempo de espera de SQLite en milisegundos. Por defecto: 5000.
  3. 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.)

FAQ

¿Funciona esto con una instalación multisitio de WordPress?

. 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?

No es posible predecir exactamente la aceleración de cada sitio. Aun así, los resultados de la evaluación comparativa son prometedores. Por favor, lee esto. Si ejecutas una prueba de referencia, házselo saber al autor dejando un comentario en esa página o utilizando el foro de soporte.

What Cached Data Size should I use for my site?

The default setting for Cached Data Size is 4 MiB. This plugin allows the actual cached data size to grow larger than that, and occasionally removes old data to trim back the size to the setting. Take a look at the Statistics page. If your actual cached data setting 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.

¿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.

¿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 de alto rendimiento. Si tu proveedor ofrece redis, es una buena opción. Puedes usarlo a través del complemento Redis Object Cache. Los sitios que usan redis tienen una base de datos SQL y otro esquema de almacenamiento que no es SQL: redis. Otros proveedores de alojamiento ofrecen memcached, que tiene Memcached Object Cache.

Pero muchos proveedores de alojamiento no ofrecen ni redis ni memcached, mientras que sí ofrecen SQLite. Este complemento permite a tu sitio utilizar una caché de objetos persistente incluso sin un servidor de caché independiente.

¿Este plugin es compatible con mi versión de MySQL o MariaDB?

. No requiere ninguna versión específica del servidor de bases de datos.

¿Este plugin es compatible con mi versión de redis o memcached?

No utiliza ninguno de los dos. Por favor, no utilices este plugin si tienes acceso a redis o memcached. En su lugar, utiliza el complemento Redis Object Cache o Memcached Object Cache.

¿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 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.

Si utilizas algún otro plugin de copia de seguridad o clonación, informa al autor creando untema de debate.

Si ya tengo otra caché de objetos persistentes, ¿puedo utilizar ésta?

No. Sólo necesitas una caché de objetos persistente, y WordPress sólo permite una.

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).

¿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.

¿Cómo puedo usar esta caché de objetos para hacer que mi plugin o código de tema se ejecuten más rápido?

Utiliza datos transitorios para almacenar datos cacheables. La Transient API utiliza el almacenamiento en caché de objetos persistentes si está disponible, y la base de datos MariaDB o MySQL cuando no lo está. La Metadata API y la Options API también usan el almacenamiento en caché de objetos persistentes.

¿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.

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 en wp_config.php el plugin la usará para el nombre de ruta del archivo sqlite. Por ejemplo, si wp-config.php contiene esta línea

define( '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 llamado mysite-object-cache.sqlite.

También puedes definir WP_CACHE_KEY_SALT para que sea una cadena de texto. Continuando con el ejemplo, esta línea

define( 'WP_CACHE_KEY_SALT', 'qrstuv' );

hace que los datos de la caché de objetos vayan a la carpeta /tmp en un archivo llamado mysite-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.

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.

¿Qué significan las estadísticas?

Por favor, lee esto.

¿Hay algún chiste en todo esto?

P: ¿Cuáles son las dos cosas más difíciles de hacer bien en informática?

  1. Guardar cosas en caché.
  2. Poner nombre a las cosas.
  3. Afrontar los errores de uno en uno.

En serio, el núcleo de WordPress ya ha resuelto, a lo largo de años de desarrollo y millones de sitios, cómo almacenar cosas en caché y nombrarlas. Este plugin simplemente amplía ese mecanismo para hacer que esas cosas sean persistentes.

Tengo otra pregunta

Por favor, busca más preguntas y respuestas aquí. O haz tu pregunta en el foro de soporte.

Reseñas

24 de marzo de 2024 1 respuesta
As I write this, I'm waiting for a question in the Support group whether I can use this in conjunction with WP Rocket, which has helped on the frontend of the website, the customer facing bit. But that plugin does nothing to a sluggish Admin area on our shared hosting. SQLLite Object Cache has absolutely transformed how our WP experience is not, and the "statistics" allow us to track some of this. This is a dream plugin and quite quickly now become a part of our starter-kit for any WP install.
5 de febrero de 2024
Thanks Ollie for this great plugin! This saves a lot of cost for distributed caching which is unnecessary for single site hosting. Hope in the future, the plugin will have more settings or features likes: Trigger purge cache menu on admin bar Settings TTL for cache entries ....
1 de febrero de 2024 1 respuesta
Wow! I am absolutely astonished how this plugin works extremely well. Thank you, @olliejones for coming up with this idea and making it work flawlessly. Redis Object Cache would break my sites constantly. I still haven't had any issues with this Object Cache, and I beg you @olliejones to please keep it this stable. You are truly a hero!
30 de enero de 2024 2 respuestas
Works very well in environments where you can't use redis. I am having a hard time understanding the statistics page, but the plugin does work, which is evident from admin and frontend pages loading noticeably faster and being more responsive than before when I am logged in.
14 de enero de 2024
I rarely share reviews, but this plugin deserves one. I've always faced issues with my website resources, often noticing high CPU usage. After installing this plugin, resource consumption dropped dramatically. I never expected such a result. The developer is also very kind and helpful in case any issues arise. I highly recommend installing this plugin if you're experiencing high resource usage for your website. Additionally, I suggest following the suggestion "I want to store my cached data in a more secure place. How do I do that?" posted in the plugin description for security and further performance enhancements.
13 de diciembre de 2023
For me, Redis Object Cache was super resource (CPU) hungry, Docket Cache – Object Cache Accelerator was hit and miss (I had backend issues on a complex site), and SQLite Object Cache works like a charm and the site is faster. I don't have detailed stats for you, but it took me no time to notice the difference. I now have some plugins to swap. Thanks loads to the developers! Much appreciated!
Leer todas las 25 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 2 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.3.8

Add some support for new SQLite WAL2 write-ahead logging.
Support WordPress 6.5.

1.3.7

Bug fix: Not all versions of SQLite can do DELETE … LIMIT, so do transaction-size-limited DELETEs a different way.

1.3.6

  • Clean up in chunks in an attempt to reduce contention delays and timeouts.
  • Do PRAGMA wal_checkpoint(RESTART) when cleaning up, and also occasionally, to prevent the write-ahead log from growing without bound on busy systems.
  • Retry three times if cache updates time out.
  • Increase default cache size to 16MiB for new users.

1.3.5

  • php 8.1, php 8.2 compatibility.
  • Support for WordFence and other code using the object cache after shutdown.

1.3.4

  • Support SQLite Memory-Mapped I/O.
  • Reduce contention delays by limiting the number of get_multiple, set_multiple, add_multiple, and delete_multiple items in each transaction.
  • Reduce index page fragmentation by using key order for set_multiple and add_multiple operations.
  • Fix initialization defect in cache deletion. Props to @gRoberts84.

1.3.2

  • Avoid VACUUM except on cache flush, and do it only with maintenance mode enabled.