4 <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
5 <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
9 <meta name=
"viewport" content=
"width=device-width, initial-scale=1.0">
11 <title>Appending or Prepending to data on the server
— libmemcached
1.0.99 documentation
</title>
20 <script type=
"text/javascript" src=
"../_static/js/modernizr.min.js"></script>
23 <script type=
"text/javascript" id=
"documentation_options" data-url_root=
"../" src=
"../_static/documentation_options.js"></script>
24 <script src=
"../_static/jquery.js"></script>
25 <script src=
"../_static/underscore.js"></script>
26 <script src=
"../_static/doctools.js"></script>
27 <script src=
"../_static/language_data.js"></script>
29 <script type=
"text/javascript" src=
"../_static/js/theme.js"></script>
34 <link rel=
"stylesheet" href=
"../_static/css/theme.css" type=
"text/css" />
35 <link rel=
"stylesheet" href=
"../_static/pygments.css" type=
"text/css" />
36 <link rel=
"index" title=
"Index" href=
"../genindex.html" />
37 <link rel=
"search" title=
"Search" href=
"../search.html" />
38 <link rel=
"copyright" title=
"Copyright" href=
"../copyright.html" />
39 <link rel=
"next" title=
"Working with data on the server in an atomic fashion" href=
"memcached_cas.html" />
40 <link rel=
"prev" title=
"Working with result sets" href=
"memcached_result_st.html" />
43 <body class=
"wy-body-for-nav">
46 <div class=
"wy-grid-for-nav">
48 <nav data-toggle=
"wy-nav-shift" class=
"wy-nav-side">
49 <div class=
"wy-side-scroll">
50 <div class=
"wy-side-nav-search" >
54 <a href=
"../index.html" class=
"icon icon-home"> libmemcached
71 <form id=
"rtd-search-form" class=
"wy-form" action=
"../search.html" method=
"get">
72 <input type=
"text" name=
"q" placeholder=
"Search docs" />
73 <input type=
"hidden" name=
"check_keywords" value=
"yes" />
74 <input type=
"hidden" name=
"area" value=
"default" />
81 <div class=
"wy-menu wy-menu-vertical" data-spy=
"affix" role=
"navigation" aria-label=
"main navigation">
88 <p class=
"caption"><span class=
"caption-text">libmemcached
</span></p>
90 <li class=
"toctree-l1"><a class=
"reference internal" href=
"../libmemcached.html">Introduction
</a></li>
91 <li class=
"toctree-l1 current"><a class=
"reference internal" href=
"index.html">libmemcached API
</a><ul class=
"current">
92 <li class=
"toctree-l2"><a class=
"reference internal" href=
"index_basics.html">Basics
</a></li>
93 <li class=
"toctree-l2 current"><a class=
"reference internal" href=
"index_data.html">Working with Data
</a></li>
94 <li class=
"toctree-l2"><a class=
"reference internal" href=
"index_errors.html">Messages and Errors
</a></li>
95 <li class=
"toctree-l2"><a class=
"reference internal" href=
"index_advanced.html">Advanced Topics
</a></li>
96 <li class=
"toctree-l2"><a class=
"reference internal" href=
"index_deprecated.html">Deprecated Functionality
</a></li>
99 <li class=
"toctree-l1"><a class=
"reference internal" href=
"index_misc.html">Misc
</a><ul>
100 <li class=
"toctree-l2"><a class=
"reference internal" href=
"configuration.html">Configuration
</a></li>
101 <li class=
"toctree-l2"><a class=
"reference internal" href=
"constants.html">Constants
</a></li>
102 <li class=
"toctree-l2"><a class=
"reference internal" href=
"examples.html">Examples
</a></li>
103 <li class=
"toctree-l2"><a class=
"reference internal" href=
"versioning.html">Versioning
</a></li>
107 <p class=
"caption"><span class=
"caption-text">libmemcachedutil
</span></p>
109 <li class=
"toctree-l1"><a class=
"reference internal" href=
"../libmemcachedutil.html">Introduction
</a></li>
110 <li class=
"toctree-l1"><a class=
"reference internal" href=
"../libmemcachedutil/index.html">libmemcachedutil API
</a><ul>
111 <li class=
"toctree-l2"><a class=
"reference internal" href=
"../libmemcachedutil/memcached_pool.html">Working with memcached pools
</a></li>
115 <p class=
"caption"><span class=
"caption-text">libhashkit
</span></p>
117 <li class=
"toctree-l1"><a class=
"reference internal" href=
"../libhashkit.html">Introduction
</a></li>
118 <li class=
"toctree-l1"><a class=
"reference internal" href=
"../libhashkit/index.html">libhashkit API
</a><ul>
119 <li class=
"toctree-l2"><a class=
"reference internal" href=
"../libhashkit/hashkit_create.html">Creating a hashkit structure
</a></li>
120 <li class=
"toctree-l2"><a class=
"reference internal" href=
"../libhashkit/hashkit_function.html">Set Hash Function
</a></li>
121 <li class=
"toctree-l2"><a class=
"reference internal" href=
"../libhashkit/hashkit_functions.html">Available Hashes
</a></li>
122 <li class=
"toctree-l2"><a class=
"reference internal" href=
"../libhashkit/hashkit_value.html">Generate hash value
</a></li>
126 <p class=
"caption"><span class=
"caption-text">Client Applications
</span></p>
128 <li class=
"toctree-l1"><a class=
"reference internal" href=
"../bin/index.html">Client Applications
</a><ul>
129 <li class=
"toctree-l2"><a class=
"reference internal" href=
"../bin/memcapable.html">memcapable - Checking a Memcached server capabilities and compatibility
</a></li>
130 <li class=
"toctree-l2"><a class=
"reference internal" href=
"../bin/memcat.html">memcat - “cat” data from a server
</a></li>
131 <li class=
"toctree-l2"><a class=
"reference internal" href=
"../bin/memcp.html">memcp - Copy data to a server
</a></li>
132 <li class=
"toctree-l2"><a class=
"reference internal" href=
"../bin/memdump.html">memdump - Dumping your server
</a></li>
133 <li class=
"toctree-l2"><a class=
"reference internal" href=
"../bin/memerror.html">memerror - translate an error code to a string
</a></li>
134 <li class=
"toctree-l2"><a class=
"reference internal" href=
"../bin/memflush.html">memflush - flush all data from a server
</a></li>
135 <li class=
"toctree-l2"><a class=
"reference internal" href=
"../bin/memrm.html">memrm - Remove data from a server
</a></li>
136 <li class=
"toctree-l2"><a class=
"reference internal" href=
"../bin/memslap.html">memslap - Load testing and benchmarking a server
</a></li>
137 <li class=
"toctree-l2"><a class=
"reference internal" href=
"../bin/memaslap.html">memaslap - Load testing and benchmarking a server
</a></li>
138 <li class=
"toctree-l2"><a class=
"reference internal" href=
"../bin/memstat.html">memstat - Gather statistics from a server
</a></li>
139 <li class=
"toctree-l2"><a class=
"reference internal" href=
"../bin/memexist.html">memexist - Check for the existence of a key
</a></li>
140 <li class=
"toctree-l2"><a class=
"reference internal" href=
"../bin/memparse.html">memparse - Parse an option string
</a></li>
141 <li class=
"toctree-l2"><a class=
"reference internal" href=
"../bin/memping.html">memping - Test to see if a server is available.
</a></li>
142 <li class=
"toctree-l2"><a class=
"reference internal" href=
"../bin/memtouch.html">memtouch - Touches a key.
</a></li>
153 <section data-toggle=
"wy-nav-shift" class=
"wy-nav-content-wrap">
156 <nav class=
"wy-nav-top" aria-label=
"top navigation">
158 <i data-toggle=
"wy-nav-top" class=
"fa fa-bars"></i>
159 <a href=
"../index.html">libmemcached
</a>
164 <div class=
"wy-nav-content">
166 <div class=
"rst-content">
184 <div role=
"navigation" aria-label=
"breadcrumbs navigation">
186 <ul class=
"wy-breadcrumbs">
188 <li><a href=
"../index.html">Docs
</a> »</li>
190 <li><a href=
"index.html">libmemcached API
</a> »</li>
192 <li><a href=
"index_data.html">Working with Data
</a> »</li>
194 <li>Appending or Prepending to data on the server
</li>
197 <li class=
"wy-breadcrumbs-aside">
208 <div role=
"main" class=
"document" itemscope=
"itemscope" itemtype=
"http://schema.org/Article">
209 <div itemprop=
"articleBody">
211 <div class=
"section" id=
"appending-or-prepending-to-data-on-the-server">
212 <h1>Appending or Prepending to data on the server
<a class=
"headerlink" href=
"#appending-or-prepending-to-data-on-the-server" title=
"Permalink to this headline">¶
</a></h1>
213 <p id=
"index-0">Appending or Prepending to data on the server
</p>
214 <div class=
"section" id=
"synopsis">
215 <h2>SYNOPSIS
<a class=
"headerlink" href=
"#synopsis" title=
"Permalink to this headline">¶
</a></h2>
216 <p>#include
<libmemcached/memcached.h
></p>
217 <dl class=
"function">
218 <dt id=
"_CPPv417memcached_prependP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t">
219 <span id=
"_CPPv317memcached_prependP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t"></span><span id=
"_CPPv217memcached_prependP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t"></span><span id=
"memcached_prepend__memcached_stP.cCP.s.cCP.s.time_t.uint32_t"></span><a class=
"reference internal" href=
"memcached_return_t.html#_CPPv418memcached_return_t" title=
"memcached_return_t">memcached_return_t
</a> <code class=
"sig-name descname">memcached_prepend
</code><span class=
"sig-paren">(
</span><a class=
"reference internal" href=
"memcached_create.html#_CPPv412memcached_st" title=
"memcached_st">memcached_st
</a> *
<em>ptr
</em>,
<em class=
"property">const
</em> char *
<em>key
</em>, size_t
<em>key_length
</em>,
<em class=
"property">const
</em> char *
<em>value
</em>, size_t
<em>value_length
</em>, time_t
<em>expiration
</em>, uint32_t
<em>flags
</em><span class=
"sig-paren">)
</span><a class=
"headerlink" href=
"#_CPPv417memcached_prependP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t" title=
"Permalink to this definition">¶
</a><br /></dt>
222 <dl class=
"function">
223 <dt id=
"_CPPv416memcached_appendP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t">
224 <span id=
"_CPPv316memcached_appendP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t"></span><span id=
"_CPPv216memcached_appendP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t"></span><span id=
"memcached_append__memcached_stP.cCP.s.cCP.s.time_t.uint32_t"></span><a class=
"reference internal" href=
"memcached_return_t.html#_CPPv418memcached_return_t" title=
"memcached_return_t">memcached_return_t
</a> <code class=
"sig-name descname">memcached_append
</code><span class=
"sig-paren">(
</span><a class=
"reference internal" href=
"memcached_create.html#_CPPv412memcached_st" title=
"memcached_st">memcached_st
</a> *
<em>ptr
</em>,
<em class=
"property">const
</em> char *
<em>key
</em>, size_t
<em>key_length
</em>,
<em class=
"property">const
</em> char *
<em>value
</em>, size_t
<em>value_length
</em>, time_t
<em>expiration
</em>, uint32_t
<em>flags
</em><span class=
"sig-paren">)
</span><a class=
"headerlink" href=
"#_CPPv416memcached_appendP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t" title=
"Permalink to this definition">¶
</a><br /></dt>
227 <dl class=
"function">
228 <dt id=
"_CPPv424memcached_prepend_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t">
229 <span id=
"_CPPv324memcached_prepend_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t"></span><span id=
"_CPPv224memcached_prepend_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t"></span><span id=
"memcached_prepend_by_key__memcached_stP.cCP.s.cCP.s.cCP.s.time_t.uint32_t"></span><a class=
"reference internal" href=
"memcached_return_t.html#_CPPv418memcached_return_t" title=
"memcached_return_t">memcached_return_t
</a> <code class=
"sig-name descname">memcached_prepend_by_key
</code><span class=
"sig-paren">(
</span><a class=
"reference internal" href=
"memcached_create.html#_CPPv412memcached_st" title=
"memcached_st">memcached_st
</a> *
<em>ptr
</em>,
<em class=
"property">const
</em> char *
<em>group_key
</em>, size_t
<em>group_key_length
</em>,
<em class=
"property">const
</em> char *
<em>key
</em>, size_t
<em>key_length
</em>,
<em class=
"property">const
</em> char *
<em>value
</em>, size_t
<em>value_length
</em>, time_t
<em>expiration
</em>, uint32_t
<em>flags
</em><span class=
"sig-paren">)
</span><a class=
"headerlink" href=
"#_CPPv424memcached_prepend_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t" title=
"Permalink to this definition">¶
</a><br /></dt>
232 <dl class=
"function">
233 <dt id=
"_CPPv423memcached_append_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t">
234 <span id=
"_CPPv323memcached_append_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t"></span><span id=
"_CPPv223memcached_append_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t"></span><span id=
"memcached_append_by_key__memcached_stP.cCP.s.cCP.s.cCP.s.time_t.uint32_t"></span><a class=
"reference internal" href=
"memcached_return_t.html#_CPPv418memcached_return_t" title=
"memcached_return_t">memcached_return_t
</a> <code class=
"sig-name descname">memcached_append_by_key
</code><span class=
"sig-paren">(
</span><a class=
"reference internal" href=
"memcached_create.html#_CPPv412memcached_st" title=
"memcached_st">memcached_st
</a> *
<em>ptr
</em>,
<em class=
"property">const
</em> char *
<em>group_key
</em>, size_t
<em>group_key_length
</em>,
<em class=
"property">const
</em> char *
<em>key
</em>, size_t
<em>key_length
</em>,
<em class=
"property">const
</em> char *
<em>value
</em>, size_t
<em>value_length
</em>, time_t
<em>expiration
</em>, uint32_t
<em>flags
</em><span class=
"sig-paren">)
</span><a class=
"headerlink" href=
"#_CPPv423memcached_append_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t" title=
"Permalink to this definition">¶
</a><br /></dt>
237 <p>Compile and link with -lmemcached
</p>
239 <div class=
"section" id=
"description">
240 <h2>DESCRIPTION
<a class=
"headerlink" href=
"#description" title=
"Permalink to this headline">¶
</a></h2>
241 <p><a class=
"reference internal" href=
"#_CPPv417memcached_prependP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t" title=
"memcached_prepend"><code class=
"xref cpp cpp-func docutils literal notranslate"><span class=
"pre">memcached_prepend()
</span></code></a> and memcached_append are used to
242 modify information on a server. All methods take a key, and its length to
243 store the object. Keys are currently limited to
250 characters when using
244 either a version of memcached which is
1.4 or below, or when using the text
245 protocol. You must supply both a value and a length. Optionally you
246 may test an expiration time for the object and a
16 byte value (it is
247 meant to be used as a bitmap). “flags” is a
4byte space that is stored
248 alongside of the main value. Many sub libraries make use of this field,
249 so in most cases users should avoid making use of it.
</p>
250 <p><a class=
"reference internal" href=
"#_CPPv417memcached_prependP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t" title=
"memcached_prepend"><code class=
"xref cpp cpp-func docutils literal notranslate"><span class=
"pre">memcached_prepend()
</span></code></a> places a segment of data before the last piece
251 of data stored. Currently expiration and key are not used in the server.
</p>
252 <p><a class=
"reference internal" href=
"#_CPPv416memcached_appendP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t" title=
"memcached_append"><code class=
"xref cpp cpp-func docutils literal notranslate"><span class=
"pre">memcached_append()
</span></code></a> places a segment of data at the end of the last
253 piece of data stored. Currently expiration and key are not used in the server.
</p>
254 <p><a class=
"reference internal" href=
"#_CPPv424memcached_prepend_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t" title=
"memcached_prepend_by_key"><code class=
"xref cpp cpp-func docutils literal notranslate"><span class=
"pre">memcached_prepend_by_key()
</span></code></a> and
255 <a class=
"reference internal" href=
"#_CPPv423memcached_append_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t" title=
"memcached_append_by_key"><code class=
"xref cpp cpp-func docutils literal notranslate"><span class=
"pre">memcached_append_by_key()
</span></code></a> methods both behave in a similar
256 method as the non key methods. The difference is that they use their
257 group_key parameter to map objects to particular servers.
</p>
258 <p>If you are looking for performance,
<a class=
"reference internal" href=
"memcached_set.html#_CPPv413memcached_setP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t" title=
"memcached_set"><code class=
"xref cpp cpp-func docutils literal notranslate"><span class=
"pre">memcached_set()
</span></code></a> with non-blocking
259 IO is the fastest way to store data on the server.
</p>
260 <p>All of the above functions are tested with the
261 <a class=
"reference internal" href=
"memcached_behavior.html#_CPPv4N20memcached_behavior_t26MEMCACHED_BEHAVIOR_USE_UDPE" title=
"MEMCACHED_BEHAVIOR_USE_UDP"><code class=
"xref cpp cpp-any docutils literal notranslate"><span class=
"pre">MEMCACHED_BEHAVIOR_USE_UDP
</span></code></a> behavior enabled. However, when using
262 these operations with this behavior on, there are limits to the size of the
263 payload being sent to the server. The reason for these limits is that the
264 Memcached Server does not allow multi-datagram requests
265 and the current server implementation sets a datagram size to
1400 bytes. Due
266 to protocol overhead, the actual limit of the user supplied data is less than
267 1400 bytes and depends on the protocol in use as, well as the operation being
268 executed. When running with the binary protocol,
269 <a class=
"reference internal" href=
"memcached_behavior.html#_CPPv4N20memcached_behavior_t34MEMCACHED_BEHAVIOR_BINARY_PROTOCOLE" title=
"MEMCACHED_BEHAVIOR_BINARY_PROTOCOL"><code class=
"xref cpp cpp-any docutils literal notranslate"><span class=
"pre">MEMCACHED_BEHAVIOR_BINARY_PROTOCOL
</span></code></a>, the size of the key,value,
270 flags and expiry combined may not exceed
1368 bytes. When running with the
271 ASCII protocol, the exact limit fluctuates depending on which function is
272 being executed and whether the function is a cas operation or not. For
273 non-cas ASCII set operations, there are at least
1335 bytes available
274 to split among the key, key_prefix, and value; for cas ASCII operations
275 there are at least
1318 bytes available to split among the key, key_prefix
276 and value. If the total size of the command, including overhead, exceeds
277 1400 bytes, a
<a class=
"reference internal" href=
"memcached_return_t.html#_CPPv4N18memcached_return_t23MEMCACHED_WRITE_FAILUREE" title=
"MEMCACHED_WRITE_FAILURE"><code class=
"xref cpp cpp-any docutils literal notranslate"><span class=
"pre">MEMCACHED_WRITE_FAILURE
</span></code></a> will be returned.
</p>
279 <div class=
"section" id=
"return">
280 <h2>RETURN
<a class=
"headerlink" href=
"#return" title=
"Permalink to this headline">¶
</a></h2>
281 <p>All methods return a value of type
<a class=
"reference internal" href=
"memcached_return_t.html#_CPPv418memcached_return_t" title=
"memcached_return_t"><code class=
"xref cpp cpp-type docutils literal notranslate"><span class=
"pre">memcached_return_t
</span></code></a>.
282 On success the value will be
<a class=
"reference internal" href=
"memcached_return_t.html#_CPPv4N18memcached_return_t17MEMCACHED_SUCCESSE" title=
"MEMCACHED_SUCCESS"><code class=
"xref cpp cpp-any docutils literal notranslate"><span class=
"pre">MEMCACHED_SUCCESS
</span></code></a>.
283 Use
<a class=
"reference internal" href=
"memcached_strerror.html#_CPPv418memcached_strerrorP12memcached_st18memcached_return_t" title=
"memcached_strerror"><code class=
"xref cpp cpp-func docutils literal notranslate"><span class=
"pre">memcached_strerror()
</span></code></a> to translate this value to a printable
286 <div class=
"section" id=
"see-also">
287 <h2>SEE ALSO
<a class=
"headerlink" href=
"#see-also" title=
"Permalink to this headline">¶
</a></h2>
288 <p><em class=
"manpage"><a class=
"manpage reference external" href=
"http://man7.org/linux/man-pages/man1/memcached.1.html">memcached(
1)
</a></em> <em class=
"manpage"><a class=
"manpage reference external" href=
"http://man7.org/linux/man-pages/man3/libmemcached.3.html">libmemcached(
3)
</a></em> <em class=
"manpage"><a class=
"manpage reference external" href=
"http://man7.org/linux/man-pages/man3/memcached_strerror.3.html">memcached_strerror(
3)
</a></em> <em class=
"manpage"><a class=
"manpage reference external" href=
"http://man7.org/linux/man-pages/man3/memcached_set.3.html">memcached_set(
3)
</a></em> <em class=
"manpage"><a class=
"manpage reference external" href=
"http://man7.org/linux/man-pages/man3/memcached_add.3.html">memcached_add(
3)
</a></em> <em class=
"manpage"><a class=
"manpage reference external" href=
"http://man7.org/linux/man-pages/man3/memcached_cas.3.html">memcached_cas(
3)
</a></em> <em class=
"manpage"><a class=
"manpage reference external" href=
"http://man7.org/linux/man-pages/man3/memcached_replace.3.html">memcached_replace(
3)
</a></em></p>
298 <div class=
"rst-footer-buttons" role=
"navigation" aria-label=
"footer navigation">
300 <a href=
"memcached_cas.html" class=
"btn btn-neutral float-right" title=
"Working with data on the server in an atomic fashion" accesskey=
"n" rel=
"next">Next
<span class=
"fa fa-arrow-circle-right"></span></a>
303 <a href=
"memcached_result_st.html" class=
"btn btn-neutral float-left" title=
"Working with result sets" accesskey=
"p" rel=
"prev"><span class=
"fa fa-arrow-circle-left"></span> Previous
</a>
310 <div role=
"contentinfo">
312 © <a href=
"../copyright.html">Copyright
</a>
316 Built with
<a href=
"http://sphinx-doc.org/">Sphinx
</a> using a
<a href=
"https://github.com/rtfd/sphinx_rtd_theme">theme
</a> provided by
<a href=
"https://readthedocs.org">Read the Docs
</a>.
329 <script type=
"text/javascript">
331 SphinxRtdTheme.Navigation.enable(true);