123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- <?xml version="1.0" encoding='ISO-8859-1'?>
- <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
- <!-- Include general documentation entities -->
- <!ENTITY % docentities SYSTEM "../../../docbook/entities.xml">
- %docentities;
- ]>
- <!-- Module User's Guide -->
- <chapter>
-
- <title>&adminguide;</title>
-
- <section>
- <title>Overview</title>
- <para>
- The module provides access to the distributed hash table <emphasis>memcached</emphasis>.
- This hash table is stored in memory and can can be accessed via a pseudo-variable:
- $mct(key). Entries are stored and retrieved from an external server application.
- </para>
- <para>
- The <quote>key</quote> can be a static string and also any existing pseudo-variable. Further
- interfaces to the functionality provided from memcached are also provided, like access to the
- atomic increment and decrement operations.
- <example>
- <title>Storing and retrieving entries</title>
- <programlisting format="linespecific">
- ...
- $mct(test) = 1;
- xlog("stored value is $mct(test)");
- $mct(test) = $null; # delete it
- xlog("stored value is $mct(test)"); # will return <null> or empty string
- ...
- </programlisting>
- </example>
- <example>
- <title>Using atomic operations</title>
- <programlisting format="linespecific">
- ...
- $mct(cnt) = 1;
- $mcinc(cnt) = 1; # increment by 1
- xlog("counter is now $mct(cnt)");
- $mcdec(cnt) = 1; # decrement by 1
- xlog("counter is now $mct(cnt)");
- ...
- </programlisting>
- </example>
- <example>
- <title>Set custom expire time when adding an entry</title>
- <programlisting format="linespecific">
- ...
- $mct(test=>10) = 1;
- xlog("stored value is $mct(test)");
- # sleep 10 seconds
- xlog("stored value is $mct(test)"); # will return <null>
- ...
- </programlisting>
- </example>
- <example>
- <title>Modifying expire time for existing entries</title>
- <programlisting format="linespecific">
- ...
- $mct(test) = 1;
- xlog("stored value is $mct(test)");
- $mctex(test) = 10; # set expire time to 10 seconds
- # sleep 10 seconds
- xlog("stored value is $mct(test)"); # will return <null>
- ...
- </programlisting>
- </example>
- </para>
- <para>
- This module is an addition to the existing <emphasis>htable</emphasis> functionality,
- not a replacement. In smaller architectures or installations where only one instance
- needs access to the hash table the htable module is easier to setup, as no dedicated
- server needs to be provided. But when a distributed storage facilility is necessary,
- or one want to separate the storage from the SIP server, this module could be used.
- </para>
- </section>
- <section>
- <title>Implementation notes</title>
- <para>
- Important notes about made assumptions and adaptions that were necessary for the proper
- integration of this library into &kamailio;.
- </para>
- <section>
- <title>Data safety</title>
- <para>
- Don't store data in memcached that you don't also have somewhere else. This system was
- designed as fast cache, and not for persistent storage. The memcached server can crash,
- machines can reboot or are restarted. If the memcache storage pool gets fulls, it starts
- to drop the least used items, even if they are not yet expired. So don't store any data in
- it where it would be a problem when it disappear from one moment to the other.
- </para>
- </section>
- <section>
- <title>Size restrictions</title>
- <para>
- The maximum key length that is supported from memcached is 250 characters. In order
- to support longer keys in the &kamailio; configuration script they are hashed with MD5.
- This should normally be safe against collisions, as the value space is sufficiently large enough.
- </para>
- <para>
- The maximum value size that is supported is 1MB. The reason for this is the internal memory
- manager used from memcached. But normally this restriction should be not a problem in the
- SIP environment where this module is used.
- </para>
- </section>
- </section>
- <section>
- <title>Dependencies</title>
- <section>
- <title>&kamailio; Modules</title>
- <para>
- The following modules must be loaded before this module:
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>No dependencies on other &kamailio; modules</emphasis>.
- </para>
- </listitem>
- </itemizedlist>
- </para>
- </section>
- <section>
- <title>External Libraries or Applications</title>
- <para>
- The following libraries or applications must be installed before running
- &kamailio; with this module loaded:
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>the <ulink url="http://libmemcached.org/">libmemcached</ulink> library</emphasis>.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>the <ulink url="http://danga.com/memcached/">memcached</ulink> server implementation</emphasis>.
- </para>
- </listitem>
- </itemizedlist>
- </para>
- </section>
- </section>
- <section>
- <title>Parameters</title>
- <section id="memcached.p.servers">
- <title><varname>servers</varname> (str)</title>
- <para>
- The servers to connect to. At the moment only one server is supported.
- <!-- If more then one server is used they must be specified in the exact same order, otherwise
- the hashing algorithm and the data access will not work. -->
- </para>
- <para>
- <emphasis>
- Default value is <quote>localhost:11211</quote>.
- </emphasis>
- </para>
- <example>
- <title>Set <varname>servers</varname> parameter</title>
- <programlisting format="linespecific">
- ...
- modparam("memcached", "servers", "localhost:11211")
- ...
- </programlisting>
- </example>
- </section>
- <section id="memcached.p.expire">
- <title><varname>expire</varname> (integer)</title>
- <para>
- The default expire value of entries in memcached in seconds. The maximal
- value is 2592000 (about 30 days). A value of zero means that no automatic expiration is done,
- memcached will then delete the least used items when the cache gets full.
- </para>
- <para>
- Please note that memcached implements lazy caching, that means items are only
- deleted when they requested (they are of course not delivered to the client),
- or on insertion of new entries when the cache is full. Items can also be deleted
- before there expire time when the available space in memory is exhausted.
- </para>
- <para>
- It is possible to override this default value when adding a key with the
- <emphasis>mct</emphasis> psuedo-variable, or later on by setting a different
- timeout for an existing key with the <emphasis>mctex</emphasis> pseudo-variable.
- </para>
- <para>
- <emphasis>
- Default value is <quote>10800</quote>s (3h).
- </emphasis>
- </para>
- <example>
- <title>Set <varname>expire</varname> parameter</title>
- <programlisting format="linespecific">
- ...
- modparam("memcached", "expire", 10800)
- ...
- </programlisting>
- </example>
- </section>
- <section id="memcached.p.mode">
- <title><varname>mode</varname> (integer)</title>
- <para>
- The used storage mode for the memcached module for write access
- to the hash table. A value of <quote>0</quote> means to set
- (overwrite) the old value, with a value of <quote>1</quote> the
- module will not overwrite it. Here every entry to the hash table could
- be written only once, subsequent inserts will fail.
- </para>
- <para>
- <emphasis>
- Default value is <quote>0</quote> (overwrite).
- </emphasis>
- </para>
- <example>
- <title>Set <varname>mode</varname> parameter</title>
- <programlisting format="linespecific">
- ...
- modparam("memcached", "mode", 0)
- ...
- </programlisting>
- </example>
- </section>
- <section id="memcached.p.timeout">
- <title><varname>timeout</varname> (integer)</title>
- <para>
- The timeout for the memcache servers access in milliseconds.
- </para>
- <para>
- <emphasis>
- Default value is <quote>5000</quote> (5s).
- </emphasis>
- </para>
- <example>
- <title>Set <varname>timeout</varname> parameter</title>
- <programlisting format="linespecific">
- ...
- modparam("memcached", "timeout", 10000)
- ...
- </programlisting>
- </example>
- </section>
- <section id="memcached.p.memory">
- <title><varname>memory</varname> (integer)</title>
- <para>
- The memory mode for the memcached client library. The library can
- use the system memory manager or the internal memory manager from
- &kamailio;. The system memory manager configuration is the default,
- most implementations (like other projects) probably use this
- approach as well. The internal memory configuration should be
- faster and protects better against memory leaks that could bring
- down your server, as the available memory pool is limited by the
- &kamailio; configuration.
- </para>
- <para>
- <emphasis>
- Default value is <quote>0</quote> (use system memory manager).
- </emphasis>
- </para>
- <example>
- <title>Set <varname>memory</varname> parameter</title>
- <programlisting format="linespecific">
- ...
- modparam("memcached", "memory", 1)
- ...
- </programlisting>
- </example>
- </section>
- <section id="memcached.p.stringify">
- <title><varname>stringify</varname> (integer)</title>
- <para>
- The string mode for the memcached module. By default the module
- checks the flags for each returned value from the memcached library
- to decide to evaluate it as string or numerical value. If you need
- interoperability with existing applications that are not able to
- set this flag, you can force the module to evaluate all values as
- strings.
- </para>
- <para>
- <emphasis>
- Default value is <quote>0</quote> (don't force string values).
- </emphasis>
- </para>
- <example>
- <title>Set <varname>stringify</varname> parameter</title>
- <programlisting format="linespecific">
- ...
- modparam("memcached", "stringify", 1)
- ...
- </programlisting>
- </example>
- </section>
- </section>
- <section>
- <section>
- <title>Exported pseudo-variables</title>
- <itemizedlist>
- <listitem><para>
- <emphasis>$mct(key)</emphasis>
- </para></listitem>
- <listitem><para>
- <emphasis>$mct(key=>expiry)</emphasis>
- </para></listitem>
- <listitem><para>
- <emphasis>$mcinc(key)</emphasis>
- </para></listitem>
- <listitem><para>
- <emphasis>$mcdec(key)</emphasis>
- </para></listitem>
- <listitem><para>
- <emphasis>$mctex(key)</emphasis>
- </para></listitem>
- </itemizedlist>
- <para>
- Exported pseudo-variables are documented at &kamwikilink;.
- </para>
- </section>
- </section>
- </chapter>
|