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>Working with data on the server in an atomic fashion
— 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=
"Messages and Errors" href=
"index_errors.html" />
40 <link rel=
"prev" title=
"Appending or Prepending Data" href=
"memcached_append.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><ul class=
"current">
94 <li class=
"toctree-l3"><a class=
"reference internal" href=
"memcached_auto.html">Incrementing and Decrementing Values
</a></li>
95 <li class=
"toctree-l3"><a class=
"reference internal" href=
"memcached_exist.html">Determine if a keys exists.
</a></li>
96 <li class=
"toctree-l3"><a class=
"reference internal" href=
"memcached_touch.html">memcached_touch, memcached_touch_by_key
</a></li>
97 <li class=
"toctree-l3"><a class=
"reference internal" href=
"memcached_flush_buffers.html">Flushing client buffers
</a></li>
98 <li class=
"toctree-l3"><a class=
"reference internal" href=
"memcached_result_st.html">Working with result sets
</a></li>
99 <li class=
"toctree-l3"><a class=
"reference internal" href=
"memcached_append.html">Appending or Prepending Data
</a></li>
100 <li class=
"toctree-l3 current"><a class=
"current reference internal" href=
"#">Working with data on the server in an atomic fashion
</a></li>
103 <li class=
"toctree-l2"><a class=
"reference internal" href=
"index_errors.html">Messages and Errors
</a></li>
104 <li class=
"toctree-l2"><a class=
"reference internal" href=
"index_advanced.html">Advanced Topics
</a></li>
105 <li class=
"toctree-l2"><a class=
"reference internal" href=
"index_deprecated.html">Deprecated Functionality
</a></li>
108 <li class=
"toctree-l1"><a class=
"reference internal" href=
"index_misc.html">Misc
</a></li>
110 <p class=
"caption"><span class=
"caption-text">libmemcachedutil
</span></p>
112 <li class=
"toctree-l1"><a class=
"reference internal" href=
"../libmemcachedutil.html">Introduction
</a></li>
113 <li class=
"toctree-l1"><a class=
"reference internal" href=
"../libmemcachedutil/index.html">libmemcachedutil API
</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></li>
120 <p class=
"caption"><span class=
"caption-text">Client Applications
</span></p>
122 <li class=
"toctree-l1"><a class=
"reference internal" href=
"../bin/index.html">Client Applications
</a></li>
124 <p class=
"caption"><span class=
"caption-text">Copyright
</span></p>
126 <li class=
"toctree-l1"><a class=
"reference internal" href=
"../copyright.html">Copyright
</a></li>
135 <section data-toggle=
"wy-nav-shift" class=
"wy-nav-content-wrap">
138 <nav class=
"wy-nav-top" aria-label=
"top navigation">
140 <i data-toggle=
"wy-nav-top" class=
"fa fa-bars"></i>
141 <a href=
"../index.html">libmemcached
</a>
146 <div class=
"wy-nav-content">
148 <div class=
"rst-content">
166 <div role=
"navigation" aria-label=
"breadcrumbs navigation">
168 <ul class=
"wy-breadcrumbs">
170 <li><a href=
"../index.html">Docs
</a> »</li>
172 <li><a href=
"index.html">libmemcached API
</a> »</li>
174 <li><a href=
"index_data.html">Working with Data
</a> »</li>
176 <li>Working with data on the server in an atomic fashion
</li>
179 <li class=
"wy-breadcrumbs-aside">
190 <div role=
"main" class=
"document" itemscope=
"itemscope" itemtype=
"http://schema.org/Article">
191 <div itemprop=
"articleBody">
193 <div class=
"section" id=
"working-with-data-on-the-server-in-an-atomic-fashion">
194 <h1>Working with data on the server in an atomic fashion
<a class=
"headerlink" href=
"#working-with-data-on-the-server-in-an-atomic-fashion" title=
"Permalink to this headline">¶
</a></h1>
195 <div class=
"section" id=
"synopsis">
196 <h2>SYNOPSIS
<a class=
"headerlink" href=
"#synopsis" title=
"Permalink to this headline">¶
</a></h2>
198 <dt>#include
<libmemcached/memcached.h
></dt><dd><p>Compile and link with -lmemcached
</p>
201 <dl class=
"cpp function">
202 <dt id=
"_CPPv413memcached_casP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t8uint64_t">
203 <span id=
"_CPPv313memcached_casP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t8uint64_t"></span><span id=
"_CPPv213memcached_casP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t8uint64_t"></span><span id=
"memcached_cas__memcached_stP.cCP.s.cCP.s.time_t.uint32_t.uint64_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_cas
</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>, uint64_t
<em>cas
</em><span class=
"sig-paren">)
</span><a class=
"headerlink" href=
"#_CPPv413memcached_casP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t8uint64_t" title=
"Permalink to this definition">¶
</a><br /></dt>
206 <dl class=
"cpp function">
207 <dt id=
"_CPPv420memcached_cas_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t8uint64_t">
208 <span id=
"_CPPv320memcached_cas_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t8uint64_t"></span><span id=
"_CPPv220memcached_cas_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t8uint64_t"></span><span id=
"memcached_cas_by_key__memcached_stP.cCP.s.cCP.s.cCP.s.time_t.uint32_t.uint64_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_cas_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>, uint64_t
<em>cas
</em><span class=
"sig-paren">)
</span><a class=
"headerlink" href=
"#_CPPv420memcached_cas_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t8uint64_t" title=
"Permalink to this definition">¶
</a><br /></dt>
212 <div class=
"section" id=
"description">
213 <h2>DESCRIPTION
<a class=
"headerlink" href=
"#description" title=
"Permalink to this headline">¶
</a></h2>
214 <p><a class=
"reference internal" href=
"#_CPPv413memcached_casP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t8uint64_t" title=
"memcached_cas"><code class=
"xref cpp cpp-any docutils literal notranslate"><span class=
"pre">memcached_cas()
</span></code></a> overwrites data in the server as long as the
<code class=
"docutils literal notranslate"><span class=
"pre">cas
</span></code> value is
215 still the same in the server. You can get the
<code class=
"docutils literal notranslate"><span class=
"pre">cas
</span></code> value of a result by
216 calling
<a class=
"reference internal" href=
"memcached_result_st.html#_CPPv420memcached_result_casPK19memcached_result_st" title=
"memcached_result_cas"><code class=
"xref cpp cpp-any docutils literal notranslate"><span class=
"pre">memcached_result_cas()
</span></code></a> on a
<a class=
"reference internal" href=
"memcached_result_st.html#_CPPv419memcached_result_st" title=
"memcached_result_st"><code class=
"xref cpp cpp-any docutils literal notranslate"><span class=
"pre">memcached_result_st
</span></code></a> structure.
</p>
217 <p>At the point that this note was written cas is still buggy in memcached. Turning
218 on tests for it in
<code class=
"xref cpp cpp-any docutils literal notranslate"><span class=
"pre">libmemcached
</span></code> is optional. Please see
<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> for
219 information on how to do this.
</p>
220 <p><a class=
"reference internal" href=
"#_CPPv420memcached_cas_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t8uint64_t" title=
"memcached_cas_by_key"><code class=
"xref cpp cpp-any docutils literal notranslate"><span class=
"pre">memcached_cas_by_key()
</span></code></a> method behaves in a similar way as the non key methods.
221 The difference is that it uses the
<code class=
"docutils literal notranslate"><span class=
"pre">group_key
</span></code> parameter to map objects to
222 particular servers.
</p>
223 <p><a class=
"reference internal" href=
"#_CPPv413memcached_casP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t8uint64_t" title=
"memcached_cas"><code class=
"xref cpp cpp-any docutils literal notranslate"><span class=
"pre">memcached_cas()
</span></code></a> is tested with the
<code class=
"xref cpp cpp-any docutils literal notranslate"><span class=
"pre">MEMCACHED_BEHAVIOR_USE_UDP
</span></code> behavior
224 enabled. However, when using these operations with this behavior on, there are
225 limits to the size of the payload being sent to the server. The reason for
226 these limits is that the Memcached Server does not allow multi-datagram requests
227 and the current server implementation sets a datagram size to
1400 bytes. Due to
228 protocol overhead, the actual limit of the user supplied data is less than
1400
229 bytes and depends on the protocol in use as, well as the operation being
230 executed. When running with the binary protocol,
231 <code class=
"xref cpp cpp-any docutils literal notranslate"><span class=
"pre">MEMCACHED_BEHAVIOR_BINARY_PROTOCOL
</span></code>, the size of the key,value, flags and
232 expiry combined may not exceed
1368 bytes. When running with the ASCII protocol,
233 the exact limit fluctuates depending on which function is being executed and
234 whether the function is a cas operation or not. For non-cas ASCII set
235 operations, there are at least
1335 bytes available to split among the key,
236 key_prefix, and value; for cas ASCII operations there are at least
1318 bytes
237 available to split among the key, key_prefix and value. If the total size of the
238 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>
239 will be returned.
</p>
241 <div class=
"section" id=
"return-value">
242 <h2>RETURN VALUE
<a class=
"headerlink" href=
"#return-value" title=
"Permalink to this headline">¶
</a></h2>
243 <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>.
244 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>.
245 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
248 <div class=
"section" id=
"see-also">
249 <h2>SEE ALSO
<a class=
"headerlink" href=
"#see-also" title=
"Permalink to this headline">¶
</a></h2>
251 <li><p><em class=
"manpage"><a class=
"manpage reference external" href=
"https://linux.die.net/man/1/memcached">memcached(
1)
</a></em></p></li>
252 <li><p><a class=
"reference internal" href=
"../libmemcached.html"><span class=
"doc">C/C++ Client Library for memcached
</span></a></p></li>
253 <li><p><a class=
"reference internal" href=
"memcached_set.html"><span class=
"doc">Storing data on the server
</span></a></p></li>
254 <li><p><a class=
"reference internal" href=
"memcached_append.html"><span class=
"doc">Appending or Prepending Data
</span></a></p></li>
255 <li><p><a class=
"reference internal" href=
"memcached_strerror.html"><span class=
"doc">Converting Error Codes to Messages
</span></a></p></li>
266 <div class=
"rst-footer-buttons" role=
"navigation" aria-label=
"footer navigation">
268 <a href=
"index_errors.html" class=
"btn btn-neutral float-right" title=
"Messages and Errors" accesskey=
"n" rel=
"next">Next
<span class=
"fa fa-arrow-circle-right"></span></a>
271 <a href=
"memcached_append.html" class=
"btn btn-neutral float-left" title=
"Appending or Prepending Data" accesskey=
"p" rel=
"prev"><span class=
"fa fa-arrow-circle-left"></span> Previous
</a>
278 <div role=
"contentinfo">
280 © <a href=
"../copyright.html">Copyright
</a>
284 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>.
297 <script type=
"text/javascript">
299 SphinxRtdTheme.Navigation.enable(true);