Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 50 additions & 6 deletions reference/yac/book.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 68c2c871505aadf983f16113c5b077b335ce8d76 Maintainer: andresdzphp Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: d3a03f8f542cd083d793bbd8ef3d7756aae7711f Maintainer: andresdzphp Status: ready -->

<book xml:id="book.yac" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<?phpdoc extension-membership="pecl" ?>
Expand All @@ -10,9 +8,55 @@

<preface xml:id="intro.yac">
&reftitle.intro;
<para>
Yac (Otro caché), es un caché de datos de usuario de memoria compartida sin bloqueo, podría utilizarse para reemplazar el APC, el memcache local.
</para>
<simpara>
Yac (Yet Another Cache) es una caché de datos de usuario en memoria
compartida y sin bloqueos, que puede utilizarse para reemplazar a APC
o a un memcached local.
</simpara>
<simpara>
Yac almacena los datos en memoria compartida, lo que los hace visibles
para todos los procesos de trabajo de PHP de la misma máquina sin
ninguna comunicación entre procesos. En lugar de bloqueos, Yac se basa
en actualizaciones atómicas de las ranuras junto con unos pocos sondeos
de colisión, de modo que un fallo de caché nunca bloquea una petición y
una escritura concurrente puede provocar, en el peor de los casos, un
almacenamiento fallido o una lectura perdida que quien la invoca puede
simplemente reintentar.
</simpara>
<simpara>
Al no haber bloqueos ni comunicación entre procesos en la ruta de
acceso, una lectura es esencialmente una búsqueda hash en memoria
compartida. Como resultado, Yac es extremadamente rápida, con una
latencia de lectura del orden de microsegundos, y su rendimiento puede
escalar con el número de procesos de trabajo mientras las escrituras se
repartan entre distintas claves.
</simpara>
<simpara>
Dado que Yac sacrifica garantías de corrección a cambio de velocidad y
rendimiento, resulta más adecuada para datos que son costosos de
producir pero fáciles de recrear: fragmentos de página, instantáneas de
configuración, respuestas pequeñas de servicios y otras cachés locales.
No debería utilizarse como almacén de referencia para datos
irremplazables.
</simpara>
<simpara>
A partir de yac 2.4.0, los valores escalares pequeños —
<constant>NULL</constant>, booleanos, enteros, cadenas cortas de hasta
7 bytes y arrays vacíos — se almacenan directamente dentro de la ranura
hash en lugar de en un bloque de valor separado («valores
incrustados»), lo que elimina la reserva de memoria del valor y la
copia del bloque en cada acceso, mejorando significativamente el
rendimiento al tiempo que reduce el uso de memoria. La versión 2.4.0
también cambió el motor de compresión de FastLZ a LZ4, haciendo que las
lecturas comprimidas sean varias veces más rápidas.
</simpara>
<note>
<simpara>
La memoria compartida solo es visible dentro de una misma máquina.
Para compartir una caché entre varios servidores, se debe utilizar en
su lugar una caché en red como Memcached o Redis.
</simpara>
</note>
</preface>

&reference.yac.setup;
Expand Down
77 changes: 53 additions & 24 deletions reference/yac/ini.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: d4d5216e7a965ca194f6b1c9dee84cecab2674e5 Maintainer: andresdzphp Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: 1a42637cd40d0f75af1435ff051c7caa9b1c83e0 Maintainer: andresdzphp Status: ready -->

<section xml:id="yac.configuration" xmlns="http://docbook.org/ns/docbook">
&reftitle.runtime;
Expand Down Expand Up @@ -76,9 +74,14 @@
<type>int</type>
</term>
<listitem>
<para>

</para>
<simpara>
Los valores serializados que superan este número de bytes se
comprimen antes de almacenarse (actualmente con LZ4). Se debe
establecer a <literal>-1</literal> (el valor predeterminado) para
desactivar por completo la compresión. Comprimir valores grandes
ahorra memoria compartida a costa de algo de CPU tanto al almacenar
como al recuperar.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ini.yac.debug">
Expand All @@ -87,9 +90,10 @@
<type>int</type>
</term>
<listitem>
<para>

</para>
<simpara>
Reservada para depuración. A partir de Yac 2.4.0 esta directiva
está registrada pero no tiene ningún efecto.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ini.yac.enable">
Expand All @@ -98,9 +102,10 @@
<type>int</type>
</term>
<listitem>
<para>

</para>
<simpara>
Indica si Yac está activado. Si está desactivado, crear una
instancia de <classname>Yac</classname> lanza una excepción.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ini.yac.enable-cli">
Expand All @@ -109,9 +114,13 @@
<type>int</type>
</term>
<listitem>
<para>

</para>
<simpara>
Indica si Yac está activado al ejecutarse bajo la SAPI
<literal>CLI</literal>. Está desactivado de forma predeterminada
porque los scripts de línea de comandos suelen iniciarse y
detenerse de inmediato, y el segmento de memoria compartida se
crearía en vano.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ini.yac.keys-memory-size">
Expand All @@ -120,9 +129,15 @@
<type>string</type>
</term>
<listitem>
<para>

</para>
<simpara>
Cantidad de memoria compartida utilizada para las ranuras de la
tabla hash que contienen las claves y la información de control.
Cada ranura es una estructura de tamaño fijo, de modo que este
valor determina cuántos elementos pueden gestionarse a la vez. El
valor predeterminado es <literal>4M</literal>. Yac divide esta
zona en segmentos; el tamaño de segmento es 4M, por lo que este
valor debe ser un múltiplo de <literal>4M</literal>.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ini.yac.serializer">
Expand All @@ -131,9 +146,17 @@
<type>string</type>
</term>
<listitem>
<para>

</para>
<simpara>
Serializador utilizado para convertir valores PHP arbitrarios en
bytes antes de almacenarlos. Los valores permitidos son
<literal>php</literal> (el predeterminado),
<literal>json</literal>, <literal>igbinary</literal> y
<literal>msgpack</literal>. Los tres últimos requieren que la
extensión se haya compilado con el soporte correspondiente. Los
serializadores binarios, como <literal>igbinary</literal> y
<literal>msgpack</literal>, suelen ser más rápidos y producen
datos más pequeños que <literal>php</literal>.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ini.yac.values-memory-size">
Expand All @@ -142,9 +165,15 @@
<type>string</type>
</term>
<listitem>
<para>

</para>
<simpara>
Cantidad de memoria compartida utilizada para almacenar los
valores propiamente dichos. El valor predeterminado es
<literal>64M</literal>. Yac reserva esta zona en segmentos de 4M
cada uno, por lo que este valor debe ser un múltiplo de
<literal>4M</literal>. Cuando la zona está llena, las entradas
usadas menos recientemente se eliminan para hacer sitio a las
nuevas.
</simpara>
</listitem>
</varlistentry>

Expand Down
103 changes: 88 additions & 15 deletions reference/yac/setup.xml
Original file line number Diff line number Diff line change
@@ -1,31 +1,104 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 9dbf3a558f49ddc5b2e0097abd3f06cf5413f25d Maintainer: andresdzphp Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: d3a03f8f542cd083d793bbd8ef3d7756aae7711f Maintainer: andresdzphp Status: ready -->

<chapter xml:id="yac.setup" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
&reftitle.setup;

<section xml:id="yac.requirements">
&reftitle.required;
<para>

</para>
<simpara>
No se requiere ninguna biblioteca externa.
</simpara>
</section>

<!-- {{{ Installation -->
<section xml:id="yac.installation">
&reftitle.install;
<para>
<simpara>
Yac se puede instalar de tres maneras: mediante PECL, mediante PIE o
compilándolo a partir del código fuente.
</simpara>
<simpara>
&pecl.moved;
</para>
<para>
</simpara>
<simpara>
&pecl.info;
<link xlink:href="&url.pecl.package;yac">&url.pecl.package;yac</link>.
</para>
<para>
</simpara>
<simpara>
&pecl.windows.download.avail;
</para>
</simpara>
<example>
<title>Instalación de Yac con PECL</title>
<programlisting role="shell">
<![CDATA[
pecl install yac
]]>
</programlisting>
</example>
<simpara>
A partir de Yac 2.3.2, la extensión se puede instalar con
&link.pie;, el instalador de extensiones de PHP, ejecutando lo
siguiente en la línea de comandos.
</simpara>
<example>
<title>Instalación de Yac con PIE</title>
<programlisting role="shell">
<![CDATA[
pie install laruence/yac
]]>
</programlisting>
</example>
<simpara>
Los serializadores opcionales se pueden activar en el momento de la instalación:
</simpara>
<example>
<title>Instalación de Yac con PIE y un serializador</title>
<programlisting role="shell">
<![CDATA[
pie install laruence/yac --enable-json
]]>
</programlisting>
</example>
<simpara>
El código fuente está alojado en
<link xlink:href="&url.git.hub;laruence/yac">GitHub</link>. Para
compilar la extensión a partir del código fuente, se debe ejecutar lo
siguiente en la línea de comandos, sustituyendo las rutas por las de la
instalación local de PHP.
</simpara>
<example>
<title>Compilación de Yac a partir del código fuente</title>
<programlisting role="shell">
<![CDATA[
/path/to/phpize
./configure --with-php-config=/path/to/php-config
make && make install
]]>
</programlisting>
</example>
<simpara>
Están disponibles las siguientes opciones de <literal>configure</literal>:
</simpara>
<simpara>
Los valores se comprimen con LZ4 antes de ser almacenados. El motor de
compresión LZ4 se introdujo en Yac 2.4.0, en sustitución del anterior
FastLZ. De forma predeterminada, Yac utiliza la copia de LZ4 incluida con la
extensión; no se necesita ningún indicador adicional. Para enlazar en su lugar
con la biblioteca LZ4 del sistema, se utiliza la opción
<option role="configure">--with-system-lz4</option>, que
requiere que estén instalados la cabecera <literal>lz4.h</literal> y
<literal>liblz4</literal>.
</simpara>
<simpara>
Se pueden compilar serializadores alternativos con
<option role="configure">--enable-json</option>,
<option role="configure">--enable-msgpack</option> o
<option role="configure">--enable-igbinary</option>, que registran la
extensión correspondiente como una dependencia opcional. El serializador
utilizado en tiempo de ejecución se selecciona con la directiva ini
<link linkend="ini.yac.serializer">yac.serializer</link>.
</simpara>
</section>
<!-- }}} -->

Expand All @@ -35,9 +108,9 @@

<section xml:id="yac.resources">
&reftitle.resources;
<para>

</para>
<simpara>
Esta extensión no define ningún tipo de recurso.
</simpara>
</section>

</chapter>
Expand Down
Loading