Deploy to GitHub pages
[awesomized/libmemcached] / libmemcached / memcached_cas.html
1
2
3 <!DOCTYPE html>
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]-->
6 <head>
7 <meta charset="utf-8">
8
9 <meta name="viewport" content="width=device-width, initial-scale=1.0">
10
11 <title>Working with data on the server in an atomic fashion &mdash; libmemcached-awesome 1.1.4 documentation</title>
12
13
14
15
16
17
18
19
20 <script type="text/javascript" src="../_static/js/modernizr.min.js"></script>
21
22
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>
28
29 <script type="text/javascript" src="../_static/js/theme.js"></script>
30
31
32
33
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" />
41 </head>
42
43 <body class="wy-body-for-nav">
44
45
46 <div class="wy-grid-for-nav">
47
48 <nav data-toggle="wy-nav-shift" class="wy-nav-side">
49 <div class="wy-side-scroll">
50 <div class="wy-side-nav-search" >
51
52
53
54 <a href="../index.html" class="icon icon-home"> libmemcached-awesome
55
56
57
58 </a>
59
60
61
62
63 <div class="version">
64 1.1
65 </div>
66
67
68
69
70 <div role="search">
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" />
75 </form>
76 </div>
77
78
79 </div>
80
81 <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
82
83
84
85
86
87
88 <ul class="current">
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"><a class="reference internal" href="memcached_append.html">Appending or Prepending Data</a></li>
99 <li class="toctree-l3 current"><a class="current reference internal" href="#">Working with data on the server in an atomic fashion</a></li>
100 </ul>
101 </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>
105 </ul>
106 </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>
111 </ul>
112 <ul>
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="../issues.html">Known issues</a></li>
115 <li class="toctree-l1"><a class="reference internal" href="../copyright.html">Copyright</a></li>
116 </ul>
117
118
119
120 </div>
121 </div>
122 </nav>
123
124 <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
125
126
127 <nav class="wy-nav-top" aria-label="top navigation">
128
129 <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
130 <a href="../index.html">libmemcached-awesome</a>
131
132 </nav>
133
134
135 <div class="wy-nav-content">
136
137 <div class="rst-content">
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155 <div role="navigation" aria-label="breadcrumbs navigation">
156
157 <ul class="wy-breadcrumbs">
158
159 <li><a href="../index.html">Docs</a> &raquo;</li>
160
161 <li><a href="index.html">libmemcached API</a> &raquo;</li>
162
163 <li><a href="index_data.html">Working with Data</a> &raquo;</li>
164
165 <li>Working with data on the server in an atomic fashion</li>
166
167
168 <li class="wy-breadcrumbs-aside">
169
170
171
172 <a href="https://github.com/awesomized/libmemcached/blob/v1.x/docs/source/libmemcached/memcached_cas.rst" class="fa fa-github"> Edit on GitHub</a>
173
174
175
176 </li>
177
178 </ul>
179
180
181 <hr/>
182 </div>
183 <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
184 <div itemprop="articleBody">
185
186 <div class="section" id="working-with-data-on-the-server-in-an-atomic-fashion">
187 <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>
188 <div class="section" id="synopsis">
189 <h2>SYNOPSIS<a class="headerlink" href="#synopsis" title="Permalink to this headline"></a></h2>
190 <dl class="docutils">
191 <dt>#include &lt;libmemcached/memcached.h&gt;</dt>
192 <dd>Compile and link with -lmemcached</dd>
193 </dl>
194 <dl class="function">
195 <dt id="_CPPv413memcached_casP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t8uint64_t">
196 <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="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>
197 <dd></dd></dl>
198
199 <dl class="function">
200 <dt id="_CPPv420memcached_cas_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t8uint64_t">
201 <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="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>
202 <dd><table class="docutils field-list" frame="void" rules="none">
203 <col class="field-name" />
204 <col class="field-body" />
205 <tbody valign="top">
206 <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
207 <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>
208 <li><strong>group_key</strong> -- key namespace</li>
209 <li><strong>group_key_length</strong> -- length of the <a class="reference internal" href="#_CPPv420memcached_cas_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t8uint64_t" title="memcached_cas_by_key::group_key"><code class="xref cpp cpp-any docutils literal notranslate"><span class="pre">group_key</span></code></a> without any trailing zero</li>
210 <li><strong>key</strong> -- the key to check</li>
211 <li><strong>key_length</strong> -- the length of the <a class="reference internal" href="#_CPPv420memcached_cas_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t8uint64_t" title="memcached_cas_by_key::key"><code class="xref cpp cpp-any docutils literal notranslate"><span class="pre">key</span></code></a> without any trailing zero</li>
212 <li><strong>value</strong> -- the value to set</li>
213 <li><strong>value_length</strong> -- the length of the <a class="reference internal" href="#_CPPv420memcached_cas_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t8uint64_t" title="memcached_cas_by_key::value"><code class="xref cpp cpp-any docutils literal notranslate"><span class="pre">value</span></code></a> without any trailing zero</li>
214 <li><strong>expiration</strong> -- expiration time as unix timestamp or relative time in seconds</li>
215 <li><strong>flags</strong> -- 16 bit flags</li>
216 <li><strong>cas</strong> -- the <code class="docutils literal notranslate"><span class="pre">cas</span></code> value to compare</li>
217 </ul>
218 </td>
219 </tr>
220 <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>
221 </td>
222 </tr>
223 </tbody>
224 </table>
225 </dd></dl>
226
227 </div>
228 <div class="section" id="description">
229 <h2>DESCRIPTION<a class="headerlink" href="#description" title="Permalink to this headline"></a></h2>
230 <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
231 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
232 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>
233 <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.
234 The difference is that it uses the <code class="docutils literal notranslate"><span class="pre">group_key</span></code> parameter to map objects to
235 particular servers.</p>
236 <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 <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
237 enabled. However, when using these operations with this behavior on, there are
238 limits to the size of the payload being sent to the server. The reason for
239 these limits is that the Memcached Server does not allow multi-datagram requests
240 and the current server implementation sets a datagram size to 1400 bytes. Due to
241 protocol overhead, the actual limit of the user supplied data is less than 1400
242 bytes and depends on the protocol in use as, well as the operation being
243 executed. When running with the binary protocol,
244 <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
245 expiry combined may not exceed 1368 bytes. When running with the ASCII protocol,
246 the exact limit fluctuates depending on which function is being executed and
247 whether the function is a cas operation or not. For non-cas ASCII set
248 operations, there are at least 1335 bytes available to split among the key,
249 key_prefix, and value; for cas ASCII operations there are at least 1318 bytes
250 available to split among the key, key_prefix and value. If the total size of the
251 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>
252 will be returned.</p>
253 </div>
254 <div class="section" id="return-value">
255 <h2>RETURN VALUE<a class="headerlink" href="#return-value" title="Permalink to this headline"></a></h2>
256 <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>.
257 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>.
258 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
259 string.</p>
260 </div>
261 <div class="section" id="see-also">
262 <h2>SEE ALSO<a class="headerlink" href="#see-also" title="Permalink to this headline"></a></h2>
263 <ul class="simple">
264 <li><em class="manpage"><a class="manpage reference external" href="https://linux.die.net/man/1/memcached">memcached(1)</a></em></li>
265 <li><a class="reference internal" href="../libmemcached.html"><span class="doc">C/C++ Client Library for memcached</span></a></li>
266 <li><a class="reference internal" href="memcached_set.html"><span class="doc">Storing data on the server</span></a></li>
267 <li><a class="reference internal" href="memcached_append.html"><span class="doc">Appending or Prepending Data</span></a></li>
268 <li><a class="reference internal" href="memcached_strerror.html"><span class="doc">Converting Error Codes to Messages</span></a></li>
269 </ul>
270 </div>
271 </div>
272
273
274 </div>
275
276 </div>
277 <footer>
278
279 <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
280
281 <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>
282
283
284 <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>
285
286 </div>
287
288
289 <hr/>
290
291 <div role="contentinfo">
292 <p>
293 &copy; <a href="../copyright.html">Copyright</a>
294
295 </p>
296 </div>
297 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>.
298
299 </footer>
300
301 </div>
302 </div>
303
304 </section>
305
306 </div>
307
308
309
310 <script type="text/javascript">
311 jQuery(function () {
312 SphinxRtdTheme.Navigation.enable(true);
313 });
314 </script>
315
316
317
318
319
320
321 </body>
322 </html>