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 Data
— libmemcached
1.1.0 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 type=
"text/javascript" src=
"../_static/jquery.js"></script>
25 <script type=
"text/javascript" src=
"../_static/underscore.js"></script>
26 <script type=
"text/javascript" src=
"../_static/doctools.js"></script>
27 <script type=
"text/javascript" 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">
89 <li class=
"toctree-l1"><a class=
"reference internal" href=
"../libmemcached.html">Introduction
</a></li>
90 <li class=
"toctree-l1 current"><a class=
"reference internal" href=
"index.html">libmemcached API
</a><ul class=
"current">
91 <li class=
"toctree-l2"><a class=
"reference internal" href=
"index_basics.html">Basics
</a></li>
92 <li class=
"toctree-l2 current"><a class=
"reference internal" href=
"index_data.html">Working with Data
</a><ul class=
"current">
93 <li class=
"toctree-l3"><a class=
"reference internal" href=
"memcached_auto.html">Incrementing and Decrementing Values
</a></li>
94 <li class=
"toctree-l3"><a class=
"reference internal" href=
"memcached_exist.html">Determine if a keys exists
</a></li>
95 <li class=
"toctree-l3"><a class=
"reference internal" href=
"memcached_touch.html">Update expiration on a key
</a></li>
96 <li class=
"toctree-l3"><a class=
"reference internal" href=
"memcached_flush_buffers.html">Flush and send buffered commands
</a></li>
97 <li class=
"toctree-l3"><a class=
"reference internal" href=
"memcached_result_st.html">Working with result sets
</a></li>
98 <li class=
"toctree-l3 current"><a class=
"current reference internal" href=
"#">Appending or Prepending Data
</a></li>
99 <li class=
"toctree-l3"><a class=
"reference internal" href=
"memcached_cas.html">Working with data on the server in an atomic fashion
</a></li>
102 <li class=
"toctree-l2"><a class=
"reference internal" href=
"index_errors.html">Messages and Errors
</a></li>
103 <li class=
"toctree-l2"><a class=
"reference internal" href=
"index_advanced.html">Advanced Topics
</a></li>
104 <li class=
"toctree-l2"><a class=
"reference internal" href=
"index_deprecated.html">Deprecated Functionality
</a></li>
107 <li class=
"toctree-l1"><a class=
"reference internal" href=
"../libmemcachedutil/index.html">libmemcachedutil API
</a></li>
108 <li class=
"toctree-l1"><a class=
"reference internal" href=
"../libhashkit/index.html">libhashkit API
</a></li>
109 <li class=
"toctree-l1"><a class=
"reference internal" href=
"../bin/index.html">Client Applications
</a></li>
110 <li class=
"toctree-l1"><a class=
"reference internal" href=
"index_misc.html">Miscellaneous
</a></li>
113 <li class=
"toctree-l1"><a class=
"reference internal" href=
"../changelogs.html">Change Logs
</a></li>
114 <li class=
"toctree-l1"><a class=
"reference internal" href=
"../copyright.html">Copyright
</a></li>
123 <section data-toggle=
"wy-nav-shift" class=
"wy-nav-content-wrap">
126 <nav class=
"wy-nav-top" aria-label=
"top navigation">
128 <i data-toggle=
"wy-nav-top" class=
"fa fa-bars"></i>
129 <a href=
"../index.html">libmemcached
</a>
134 <div class=
"wy-nav-content">
136 <div class=
"rst-content">
154 <div role=
"navigation" aria-label=
"breadcrumbs navigation">
156 <ul class=
"wy-breadcrumbs">
158 <li><a href=
"../index.html">Docs
</a> »</li>
160 <li><a href=
"index.html">libmemcached API
</a> »</li>
162 <li><a href=
"index_data.html">Working with Data
</a> »</li>
164 <li>Appending or Prepending Data
</li>
167 <li class=
"wy-breadcrumbs-aside">
171 <a href=
"https://github.com/m6w6/libmemcached/blob/v1.x/docs/source/libmemcached/memcached_append.rst" class=
"fa fa-github"> Edit on GitHub
</a>
182 <div role=
"main" class=
"document" itemscope=
"itemscope" itemtype=
"http://schema.org/Article">
183 <div itemprop=
"articleBody">
185 <div class=
"section" id=
"appending-or-prepending-data">
186 <h1>Appending or Prepending Data
<a class=
"headerlink" href=
"#appending-or-prepending-data" title=
"Permalink to this headline">¶
</a></h1>
187 <div class=
"section" id=
"synopsis">
188 <h2>SYNOPSIS
<a class=
"headerlink" href=
"#synopsis" title=
"Permalink to this headline">¶
</a></h2>
189 <dl class=
"docutils">
190 <dt>#include
<libmemcached-
<a href=
"#id1"><span class=
"problematic" id=
"id2">|libmemcached_version|
</span></a>/memcached.h
></dt>
191 <dd>Compile and link with -lmemcached
</dd>
193 <dl class=
"function">
194 <dt id=
"_CPPv417memcached_prependP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t">
195 <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=
"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>
198 <dl class=
"function">
199 <dt id=
"_CPPv416memcached_appendP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t">
200 <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=
"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>
203 <dl class=
"function">
204 <dt id=
"_CPPv424memcached_prepend_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t">
205 <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=
"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>
208 <dl class=
"function">
209 <dt id=
"_CPPv423memcached_append_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t">
210 <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=
"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>
211 <dd><table class=
"docutils field-list" frame=
"void" rules=
"none">
212 <col class=
"field-name" />
213 <col class=
"field-body" />
215 <tr class=
"field-odd field"><th class=
"field-name">Parameters:
</th><td class=
"field-body"><ul class=
"first simple">
216 <li><strong>ptr
</strong> -- pointer to an initialized
<a class=
"reference internal" href=
"memcached_create.html#_CPPv412memcached_st" title=
"memcached_st"><code class=
"xref cpp cpp-any docutils literal notranslate"><span class=
"pre">memcached_st
</span></code></a> struct
</li>
217 <li><strong>group_key
</strong> -- key namespace
</li>
218 <li><strong>group_key_length
</strong> -- length of the key namespace without any terminating zero
</li>
219 <li><strong>key
</strong> -- the key
</li>
220 <li><strong>key_length
</strong> -- length of the key without any terminating zero
</li>
221 <li><strong>value
</strong> -- the value to append/prepend
</li>
222 <li><strong>value_length
</strong> -- the length of the value without any terminating zero
</li>
223 <li><strong>expiration
</strong> -- expiration as a unix timestamp or as relative expiration time in seconds
</li>
224 <li><strong>flags
</strong> --
16 bit flags
</li>
228 <tr class=
"field-even field"><th class=
"field-name">Returns:
</th><td class=
"field-body"><p class=
"first last"><a class=
"reference internal" href=
"memcached_return_t.html#_CPPv418memcached_return_t" title=
"memcached_return_t"><code class=
"xref cpp cpp-any docutils literal notranslate"><span class=
"pre">memcached_return_t
</span></code></a> indicating success
</p>
236 <div class=
"section" id=
"description">
237 <h2>DESCRIPTION
<a class=
"headerlink" href=
"#description" title=
"Permalink to this headline">¶
</a></h2>
238 <p><a class=
"reference internal" href=
"#_CPPv417memcached_prependP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t" title=
"memcached_prepend"><code class=
"xref cpp cpp-any docutils literal notranslate"><span class=
"pre">memcached_prepend()
</span></code></a> and memcached_append are used to modify information on a
239 server. All methods take a
<code class=
"docutils literal notranslate"><span class=
"pre">key
</span></code>, and
<code class=
"docutils literal notranslate"><span class=
"pre">key_length
</span></code> to store the object. Keys
240 are currently limited to
250 characters when using either a version of memcached
241 which is
1.4 or below, or when using the text protocol. You must supply both a
242 value and a length. Optionally you may set an expiration time for the object
243 and a
16 bit value (it is meant to be used as a bitmap).
<code class=
"docutils literal notranslate"><span class=
"pre">flags
</span></code> is a
4 byte
244 space that is stored along the main value. Many sub libraries make use of
245 this field, so in most cases users should avoid making use of it.
</p>
246 <p><a class=
"reference internal" href=
"#_CPPv417memcached_prependP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t" title=
"memcached_prepend"><code class=
"xref cpp cpp-any docutils literal notranslate"><span class=
"pre">memcached_prepend()
</span></code></a> places a segment of data before the last piece of data
247 stored. Currently expiration and key are not used in the server.
</p>
248 <p><a class=
"reference internal" href=
"#_CPPv416memcached_appendP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t" title=
"memcached_append"><code class=
"xref cpp cpp-any docutils literal notranslate"><span class=
"pre">memcached_append()
</span></code></a> places a segment of data at the end of the last piece of data
249 stored. Currently expiration and key are not used in the server.
</p>
250 <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-any docutils literal notranslate"><span class=
"pre">memcached_prepend_by_key()
</span></code></a> and
<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-any docutils literal notranslate"><span class=
"pre">memcached_append_by_key()
</span></code></a> methods both behave in
251 a similar manner as the non key methods. The difference is that they use their
252 group_key parameter to map objects to particular servers.
</p>
253 <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-any docutils literal notranslate"><span class=
"pre">memcached_set()
</span></code></a> with non-blocking IO is the
254 fastest way to store data on the server.
</p>
255 <p>All of the above functions are tested with the
<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>
256 behavior enabled. However, when using these operations with this behavior on,
257 there are limits to the size of the payload being sent to the server. The
258 reason for these limits is that the Memcached Server does not allow
259 multi-datagram requests and the current server implementation sets a datagram
260 size to
1400 bytes. Due to protocol overhead, the actual limit of the user
261 supplied data is less than
1400 bytes and depends on the protocol in use as,
262 well as the operation being executed. When running with the binary protocol,
263 <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, flags and
264 expiry combined may not exceed
1368 bytes. When running with the ASCII protocol,
265 the exact limit fluctuates depending on which function is being executed and
266 whether the function is a cas operation or not. For non-cas ASCII set
267 operations, there are at least
1335 bytes available to split among the key,
268 key_prefix, and value; for cas ASCII operations there are at least
1318 bytes
269 available to split among the key, key_prefix and value. If the total size of the
270 command, including overhead, exceeds
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>
271 will be returned.
</p>
273 <div class=
"section" id=
"return-value">
274 <h2>RETURN VALUE
<a class=
"headerlink" href=
"#return-value" title=
"Permalink to this headline">¶
</a></h2>
275 <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-any docutils literal notranslate"><span class=
"pre">memcached_return_t
</span></code></a>. On success the value
276 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>.
</p>
277 <p>Use
<a class=
"reference internal" href=
"memcached_strerror.html#_CPPv418memcached_strerrorP12memcached_st18memcached_return_t" title=
"memcached_strerror"><code class=
"xref cpp cpp-any docutils literal notranslate"><span class=
"pre">memcached_strerror()
</span></code></a> to translate this value to a printable string.
</p>
279 <div class=
"section" id=
"see-also">
280 <h2>SEE ALSO
<a class=
"headerlink" href=
"#see-also" title=
"Permalink to this headline">¶
</a></h2>
282 <li><em class=
"manpage"><a class=
"manpage reference external" href=
"https://linux.die.net/man/1/memcached">memcached(
1)
</a></em></li>
283 <li><a class=
"reference internal" href=
"../libmemcached.html"><span class=
"doc">C/C++ Client Library for memcached
</span></a></li>
284 <li><a class=
"reference internal" href=
"memcached_set.html"><span class=
"doc">Storing data on the server
</span></a></li>
285 <li><a class=
"reference internal" href=
"memcached_cas.html"><span class=
"doc">Working with data on the server in an atomic fashion
</span></a></li>
286 <li><a class=
"reference internal" href=
"memcached_strerror.html"><span class=
"doc">Converting Error Codes to Messages
</span></a></li>
297 <div class=
"rst-footer-buttons" role=
"navigation" aria-label=
"footer navigation">
299 <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>
302 <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>
309 <div role=
"contentinfo">
311 © <a href=
"../copyright.html">Copyright
</a>
315 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>.
328 <script type=
"text/javascript">
330 SphinxRtdTheme.Navigation.enable(true);