Skip to content

Commit 0c8d21f

Browse files
authored
[Sync-En] yac: document embedded values, LZ4, PIE install, delete semantics (#3420)
Sync with php/doc-en PR #5810 (d3a03f8f542cd083d793bbd8ef3d7756aae7711f). - book.xml: add simpara on microsecond-level read performance; add simpara on embedded values (yac 2.4.0) and FastLZ → LZ4 switch - yac.xml: fill in class intro (2 simpara); fill in _prefix property - setup.xml: add intro simpara; add PECL/PIE/source examples; add PIE availability note (2.3.2); document FastLZ → LZ4 in 2.4.0 - yac/delete.xml: add note on deferred expiry semantics; update return value (repeated delete returns true, array requires all keys present); update example; add info/dump to seealso - yac/dump.xml: document limit=-1 dumps all entries; note offset availability (yac 2.4.0) in parameter description
1 parent 9bd8ddd commit 0c8d21f

5 files changed

Lines changed: 161 additions & 36 deletions

File tree

reference/yac/book.xml

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<!-- EN-Revision: 1a42637cd40d0f75af1435ff051c7caa9b1c83e0 Maintainer: lacatoire Status: ready -->
2+
<!-- EN-Revision: d3a03f8f542cd083d793bbd8ef3d7756aae7711f Maintainer: lacatoire Status: ready -->
33

44
<book xml:id="book.yac" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
55
<?phpdoc extension-membership="pecl" ?>
@@ -22,13 +22,31 @@
2222
concurrente peut au pire provoquer un échec de stockage ou une lecture
2323
ratée que l'appelant peut simplement réessayer.
2424
</simpara>
25+
<simpara>
26+
Sans verrou ni communication inter-processus dans le chemin d'accès,
27+
une lecture est essentiellement une recherche dans une table de hachage
28+
en mémoire partagée. Yac est ainsi extrêmement rapide, avec une latence
29+
de lecture à la microseconde, et son débit peut s'adapter au nombre de
30+
workers tant que les écritures sont réparties sur plusieurs clés.
31+
</simpara>
2532
<simpara>
2633
Parce que Yac échange des garanties de cohérence contre vitesse et
2734
débit, il convient mieux aux données coûteuses à produire mais faciles à
2835
recréer : fragments de page, instantanés de configuration, petites
2936
réponses de service et autres caches locaux. Il ne doit pas être utilisé
3037
comme stockage faisant autorité pour des données irremplaçables.
3138
</simpara>
39+
<simpara>
40+
Depuis yac 2.4.0, les petites valeurs scalaires —
41+
<constant>NULL</constant>, booléens, entiers, courtes chaînes jusqu'à
42+
7 octets et tableaux vides — sont stockées directement dans le slot de
43+
la table de hachage plutôt que dans un bloc de valeur séparé
44+
(« valeurs intégrées »), ce qui supprime l'allocation et la copie de
45+
bloc à chaque accès et améliore significativement les performances tout
46+
en réduisant l'utilisation mémoire. La version 2.4.0 a également
47+
remplacé le moteur de compression FastLZ par LZ4, rendant les lectures
48+
compressées plusieurs fois plus rapides.
49+
</simpara>
3250
<note>
3351
<simpara>
3452
La mémoire partagée n'est visible qu'au sein d'une seule machine. Pour

reference/yac/setup.xml

Lines changed: 56 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<!-- EN-Revision: 1a42637cd40d0f75af1435ff051c7caa9b1c83e0 Maintainer: lacatoire Status: ready -->
2+
<!-- EN-Revision: d3a03f8f542cd083d793bbd8ef3d7756aae7711f Maintainer: lacatoire Status: ready -->
33

44
<chapter xml:id="yac.setup" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
55
&reftitle.setup;
@@ -14,6 +14,10 @@
1414
<!-- {{{ Installation -->
1515
<section xml:id="yac.installation">
1616
&reftitle.install;
17+
<simpara>
18+
Yac peut être installé de trois façons : via PECL, via PIE ou en
19+
compilant depuis les sources.
20+
</simpara>
1721
<simpara>
1822
&pecl.moved;
1923
</simpara>
@@ -24,29 +28,64 @@
2428
<simpara>
2529
&pecl.windows.download.avail;
2630
</simpara>
27-
<para>
31+
<example>
32+
<title>Installer Yac avec PECL</title>
33+
<programlisting role="shell">
34+
<![CDATA[
35+
pecl install yac
36+
]]>
37+
</programlisting>
38+
</example>
39+
<simpara>
40+
Depuis Yac 2.3.2, l'extension peut être installée avec
41+
&link.pie;, le PHP Installer for Extensions, en exécutant la commande
42+
suivante.
43+
</simpara>
44+
<example>
45+
<title>Installer Yac avec PIE</title>
46+
<programlisting role="shell">
47+
<![CDATA[
48+
pie install laruence/yac
49+
]]>
50+
</programlisting>
51+
</example>
52+
<simpara>
53+
Des sérialisateurs optionnels peuvent être activés à l'installation :
54+
</simpara>
55+
<example>
56+
<title>Installer Yac avec PIE et un sérialisateur</title>
57+
<programlisting role="shell">
58+
<![CDATA[
59+
pie install laruence/yac --enable-json
60+
]]>
61+
</programlisting>
62+
</example>
63+
<simpara>
2864
Le code source est hébergé sur
29-
<link xlink:href="&url.git.hub;laruence/yac">GitHub</link>. Pour compiler
30-
l'extension depuis les sources :
31-
<screen>
65+
<link xlink:href="&url.git.hub;laruence/yac">GitHub</link>. Pour
66+
compiler l'extension depuis les sources, exécuter les commandes
67+
suivantes en remplaçant les chemins par ceux de l'installation PHP
68+
locale.
69+
</simpara>
70+
<example>
71+
<title>Compiler Yac depuis les sources</title>
72+
<programlisting role="shell">
3273
<![CDATA[
33-
$ git clone https://github.com/laruence/yac.git
34-
$ cd yac
35-
$ phpize
36-
$ ./configure
37-
$ make
38-
$ sudo make install
74+
/chemin/vers/phpize
75+
./configure --with-php-config=/chemin/vers/php-config
76+
make && make install
3977
]]>
40-
</screen>
41-
</para>
78+
</programlisting>
79+
</example>
4280
<simpara>
4381
Les options <literal>configure</literal> suivantes sont disponibles :
4482
</simpara>
4583
<simpara>
46-
Les valeurs sont compressées avec LZ4 avant d'être stockées. Par défaut,
47-
Yac utilise la copie de LZ4 fournie avec l'extension ; aucun indicateur
48-
supplémentaire n'est nécessaire. Pour lier l'extension contre la
49-
bibliothèque LZ4 système, utiliser le commutateur
84+
Les valeurs sont compressées avec LZ4 avant d'être stockées. Le moteur
85+
de compression LZ4 a été introduit dans Yac 2.4.0, remplaçant l'ancien
86+
FastLZ. Par défaut, Yac utilise la copie de LZ4 fournie avec l'extension ;
87+
aucun indicateur supplémentaire n'est nécessaire. Pour lier l'extension
88+
contre la bibliothèque LZ4 système, utiliser le commutateur
5089
<option role="configure">--with-system-lz4</option>, qui nécessite que
5190
l'en-tête <literal>lz4.h</literal> et <literal>liblz4</literal> soient
5291
installés.

reference/yac/yac.xml

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<!-- EN-Revision: 1a42637cd40d0f75af1435ff051c7caa9b1c83e0 Maintainer: lacatoire Status: ready -->
2+
<!-- EN-Revision: d3a03f8f542cd083d793bbd8ef3d7756aae7711f Maintainer: lacatoire Status: ready -->
33

44
<reference xml:id="class.yac" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
55

@@ -11,9 +11,27 @@
1111
<!-- {{{ Yac intro -->
1212
<section xml:id="yac.intro">
1313
&reftitle.intro;
14-
<para>
15-
16-
</para>
14+
<simpara>
15+
La classe <classname>Yac</classname> est l'interface du cache. Chaque
16+
instance sur le même hôte est un handle léger vers un cache partagé :
17+
toutes les instances lisent et écrivent les mêmes entrées, et en créer
18+
une n'alloue rien au-delà du handle lui-même.
19+
</simpara>
20+
<simpara>
21+
Le préfixe optionnel passé à
22+
<methodname>Yac::__construct</methodname> est ajouté à chaque clé, ce
23+
qui permet à plusieurs instances (ou applications) de partager un même
24+
cache sans collision de clés. En plus des opérations classiques de cache
25+
(<methodname>Yac::add</methodname>,
26+
<methodname>Yac::set</methodname>,
27+
<methodname>Yac::get</methodname>,
28+
<methodname>Yac::delete</methodname> et
29+
<methodname>Yac::flush</methodname>), la classe fournit
30+
<methodname>Yac::info</methodname> et
31+
<methodname>Yac::dump</methodname> pour inspecter le cache, et surcharge
32+
l'accès aux propriétés pour que lire ou écrire une propriété d'objet lise
33+
ou écrive une entrée du cache.
34+
</simpara>
1735
</section>
1836
<!-- }}} -->
1937

@@ -54,7 +72,13 @@
5472
<varlistentry xml:id="yac.props.prefix">
5573
<term><varname>_prefix</varname></term>
5674
<listitem>
57-
<para></para>
75+
<simpara>
76+
Le préfixe de clé défini via
77+
<methodname>Yac::__construct</methodname>. Il est ajouté à chaque
78+
clé utilisée avec l'instance ; aucun séparateur n'est inséré, il
79+
faut donc en inclure un dans le préfixe si nécessaire. Le préfixe
80+
ne doit pas dépasser <constant>YAC_MAX_KEY_LEN</constant> (48) octets.
81+
</simpara>
5882
</listitem>
5983
</varlistentry>
6084
</variablelist>

reference/yac/yac/delete.xml

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<!-- EN-Revision: 1a42637cd40d0f75af1435ff051c7caa9b1c83e0 Maintainer: lacatoire Status: ready -->
2+
<!-- EN-Revision: d3a03f8f542cd083d793bbd8ef3d7756aae7711f Maintainer: lacatoire Status: ready -->
33

44
<refentry xml:id="yac.delete" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
55
<refnamediv>
@@ -17,6 +17,21 @@
1717
<simpara>
1818
Supprime un ou plusieurs éléments du cache.
1919
</simpara>
20+
<note>
21+
<simpara>
22+
La suppression est implémentée en marquant l'entrée comme expirée
23+
plutôt qu'en vidant son slot : l'entrée cesse immédiatement d'être
24+
lisible, mais le slot reste occupé jusqu'à ce que la même clé soit
25+
stockée à nouveau ou qu'une écriture ultérieure le récupère. En
26+
conséquence, le nombre de slots utilisés rapporté par
27+
<methodname>Yac::info</methodname> ne diminue pas après une
28+
suppression, et <methodname>Yac::dump</methodname> liste toujours
29+
l'entrée supprimée jusqu'à ce que son slot soit recyclé ; un
30+
<literal>ttl</literal> non nul dans le passé indique une entrée
31+
supprimée ou expirée, il appartient donc à l'appelant de les
32+
filtrer dans la sortie de <methodname>Yac::dump</methodname>.
33+
</simpara>
34+
</note>
2035
</refsect1>
2136

2237
<refsect1 role="parameters">
@@ -49,7 +64,15 @@
4964
&reftitle.returnvalues;
5065
<simpara>
5166
Retourne &true; en cas de succès, ou &false; si la clé n'était pas
52-
présente dans le cache.
67+
présente dans le cache. Comme une suppression ne fait que marquer
68+
l'entrée comme expirée, une clé supprimée mais pas encore écrasée est
69+
toujours considérée comme présente : supprimer la même clé à nouveau
70+
retourne &true;.
71+
</simpara>
72+
<simpara>
73+
Quand un <type>array</type> de clés est fourni, &true; est retourné
74+
uniquement si toutes les clés étaient présentes ; si une clé est
75+
absente, &false; est retourné.
5376
</simpara>
5477
</refsect1>
5578

@@ -63,16 +86,25 @@
6386
$yac = new Yac();
6487
$yac->set("foo", "bar");
6588
66-
var_dump($yac->delete("foo")); // bool(true)
67-
var_dump($yac->delete("foo")); // bool(false): déjà supprimé
89+
var_dump($yac->delete("foo")); // bool(true) : marquée expirée
90+
var_dump($yac->get("foo")); // bool(false) : manquant désormais
91+
var_dump($yac->delete("foo")); // bool(true) à nouveau : le slot n'a pas
92+
// encore été écrasé
93+
var_dump($yac->delete("jamais")); // bool(false) : jamais stockée
94+
95+
// une suppression ne libère pas le slot : slots_used ne diminue pas, et
96+
// l'entrée expirée apparaît toujours dans le dump
97+
var_dump($yac->info()["slots_used"]); // int(1)
98+
print_r($yac->dump()); // "foo" est toujours listée ; son ttl
99+
// est dans le passé
68100
69-
// suppression différée : garder l'entrée lisible encore 60 secondes,
70-
// elle disparaît seulement après ce délai
101+
// suppression différée : garder l'entrée lisible encore 60 secondes
71102
$yac->set("tmp", "value");
72-
var_dump($yac->delete("tmp", 60)); // bool(true)
103+
var_dump($yac->delete("tmp", 60)); // bool(true)
73104
74-
// supprimer plusieurs clés à la fois
75-
var_dump($yac->delete(array("a", "b")));
105+
// supprimer plusieurs clés à la fois retourne true uniquement si toutes
106+
// les clés étaient présentes
107+
var_dump($yac->delete(array("tmp", "non"))); // bool(false) : "non" absente
76108
?>
77109
]]>
78110
</programlisting>
@@ -85,6 +117,8 @@ var_dump($yac->delete(array("a", "b")));
85117
<simplelist>
86118
<member><methodname>Yac::set</methodname></member>
87119
<member><methodname>Yac::flush</methodname></member>
120+
<member><methodname>Yac::info</methodname></member>
121+
<member><methodname>Yac::dump</methodname></member>
88122
</simplelist>
89123
</para>
90124
</refsect1>

reference/yac/yac/dump.xml

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<!-- EN-Revision: 1a42637cd40d0f75af1435ff051c7caa9b1c83e0 Maintainer: lacatoire Status: ready -->
2+
<!-- EN-Revision: d3a03f8f542cd083d793bbd8ef3d7756aae7711f Maintainer: lacatoire Status: ready -->
33

44
<refentry xml:id="yac.dump" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
55
<refnamediv>
@@ -29,15 +29,25 @@
2929
<simpara>
3030
Nombre maximum d'entrées à retourner.
3131
</simpara>
32+
<simpara>
33+
Passer <literal>-1</literal> comme <parameter>limit</parameter> vide
34+
toutes les entrées actuellement présentes dans le cache. Il est à
35+
noter que construire la liste complète peut utiliser une quantité
36+
considérable de mémoire pour un grand cache ; quand la mémoire est
37+
un critère, il vaut mieux paginer les entrées avec
38+
<parameter>limit</parameter> et <parameter>offset</parameter>.
39+
</simpara>
3240
</listitem>
3341
</varlistentry>
3442
<varlistentry>
3543
<term><parameter>offset</parameter></term>
3644
<listitem>
3745
<simpara>
38-
Nombre d'entrées à sauter avant de collecter, qui peut être utilisé
39-
pour paginer un cache contenant plus d'entrées que
40-
<parameter>limit</parameter>.
46+
Nombre d'entrées à sauter avant de collecter. Ce paramètre est
47+
disponible à partir de PECL yac 2.4.0 ; les versions antérieures
48+
commencent toujours depuis la première entrée. Combiné avec
49+
<parameter>limit</parameter>, il peut être utilisé pour paginer un
50+
cache contenant plus d'entrées qu'un seul appel ne peut en retourner.
4151
</simpara>
4252
</listitem>
4353
</varlistentry>

0 commit comments

Comments
 (0)