update docs
[m6w6/libmemcached] / libmemcached / memcached_cas.html
1
2
3 <!DOCTYPE html>
4 <html class="writer-html5" lang="en" >
5 <head>
6 <meta charset="utf-8">
7
8 <meta name="viewport" content="width=device-width, initial-scale=1.0">
9
10 <title>Working with data on the server in an atomic fashion &mdash; libmemcached 1.0.99 documentation</title>
11
12
13
14 <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
15 <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
16
17
18
19
20
21
22
23 <!--[if lt IE 9]>
24 <script src="../_static/js/html5shiv.min.js"></script>
25 <![endif]-->
26
27
28 <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
29 <script src="../_static/jquery.js"></script>
30 <script src="../_static/underscore.js"></script>
31 <script src="../_static/doctools.js"></script>
32 <script src="../_static/language_data.js"></script>
33
34 <script type="text/javascript" src="../_static/js/theme.js"></script>
35
36
37 <link rel="index" title="Index" href="../genindex.html" />
38 <link rel="search" title="Search" href="../search.html" />
39 <link rel="copyright" title="Copyright" href="../copyright.html" />
40 <link rel="next" title="Messages and Errors" href="index_errors.html" />
41 <link rel="prev" title="Appending or Prepending Data" href="memcached_append.html" />
42 </head>
43
44 <body class="wy-body-for-nav">
45
46
47 <div class="wy-grid-for-nav">
48
49 <nav data-toggle="wy-nav-shift" class="wy-nav-side">
50 <div class="wy-side-scroll">
51 <div class="wy-side-nav-search" >
52
53
54
55 <a href="../index.html" class="icon icon-home" alt="Documentation Home"> libmemcached
56
57
58
59 </a>
60
61
62
63
64 <div class="version">
65 1.0
66 </div>
67
68
69
70
71 <div role="search">
72 <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
73 <input type="text" name="q" placeholder="Search docs" />
74 <input type="hidden" name="check_keywords" value="yes" />
75 <input type="hidden" name="area" value="default" />
76 </form>
77 </div>
78
79
80 </div>
81
82
83 <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
84
85
86
87
88
89
90 <p class="caption"><span class="caption-text">libmemcached</span></p>
91 <ul class="current">
92 <li class="toctree-l1"><a class="reference internal" href="../libmemcached.html">Introduction</a></li>
93 <li class="toctree-l1 current"><a class="reference internal" href="index.html">libmemcached API</a><ul class="current">
94 <li class="toctree-l2"><a class="reference internal" href="index_basics.html">Basics</a></li>
95 <li class="toctree-l2 current"><a class="reference internal" href="index_data.html">Working with Data</a><ul class="current">
96 <li class="toctree-l3"><a class="reference internal" href="memcached_auto.html">Incrementing and Decrementing Values</a></li>
97 <li class="toctree-l3"><a class="reference internal" href="memcached_exist.html">Determine if a keys exists</a></li>
98 <li class="toctree-l3"><a class="reference internal" href="memcached_touch.html">Update expiration on a key</a></li>
99 <li class="toctree-l3"><a class="reference internal" href="memcached_flush_buffers.html">Flush and send buffered commands</a></li>
100 <li class="toctree-l3"><a class="reference internal" href="memcached_result_st.html">Working with result sets</a></li>
101 <li class="toctree-l3"><a class="reference internal" href="memcached_append.html">Appending or Prepending Data</a></li>
102 <li class="toctree-l3 current"><a class="current reference internal" href="#">Working with data on the server in an atomic fashion</a></li>
103 </ul>
104 </li>
105 <li class="toctree-l2"><a class="reference internal" href="index_errors.html">Messages and Errors</a></li>
106 <li class="toctree-l2"><a class="reference internal" href="index_advanced.html">Advanced Topics</a></li>
107 <li class="toctree-l2"><a class="reference internal" href="index_deprecated.html">Deprecated Functionality</a></li>
108 </ul>
109 </li>
110 <li class="toctree-l1"><a class="reference internal" href="index_misc.html">Misc</a></li>
111 </ul>
112 <p class="caption"><span class="caption-text">libmemcachedutil</span></p>
113 <ul>
114 <li class="toctree-l1"><a class="reference internal" href="../libmemcachedutil.html">Introduction</a></li>
115 <li class="toctree-l1"><a class="reference internal" href="../libmemcachedutil/index.html">libmemcachedutil API</a></li>
116 </ul>
117 <p class="caption"><span class="caption-text">libhashkit</span></p>
118 <ul>
119 <li class="toctree-l1"><a class="reference internal" href="../libhashkit.html">Introduction</a></li>
120 <li class="toctree-l1"><a class="reference internal" href="../libhashkit/index.html">libhashkit API</a></li>
121 </ul>
122 <p class="caption"><span class="caption-text">Client Applications</span></p>
123 <ul>
124 <li class="toctree-l1"><a class="reference internal" href="../bin/index.html">Client Applications</a></li>
125 </ul>
126 <p class="caption"><span class="caption-text">Copyright</span></p>
127 <ul>
128 <li class="toctree-l1"><a class="reference internal" href="../copyright.html">Copyright</a></li>
129 </ul>
130
131
132
133 </div>
134
135 </div>
136 </nav>
137
138 <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
139
140
141 <nav class="wy-nav-top" aria-label="top navigation">
142
143 <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
144 <a href="../index.html">libmemcached</a>
145
146 </nav>
147
148
149 <div class="wy-nav-content">
150
151 <div class="rst-content">
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169 <div role="navigation" aria-label="breadcrumbs navigation">
170
171 <ul class="wy-breadcrumbs">
172
173 <li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
174
175 <li><a href="index.html">libmemcached API</a> &raquo;</li>
176
177 <li><a href="index_data.html">Working with Data</a> &raquo;</li>
178
179 <li>Working with data on the server in an atomic fashion</li>
180
181
182 <li class="wy-breadcrumbs-aside">
183
184
185
186 </li>
187
188 </ul>
189
190
191 <hr/>
192 </div>
193 <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
194 <div itemprop="articleBody">
195
196 <div class="section" id="working-with-data-on-the-server-in-an-atomic-fashion">
197 <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>
198 <div class="section" id="synopsis">
199 <h2>SYNOPSIS<a class="headerlink" href="#synopsis" title="Permalink to this headline"></a></h2>
200 <dl class="simple">
201 <dt>#include &lt;libmemcached/memcached.h&gt;</dt><dd><p>Compile and link with -lmemcached</p>
202 </dd>
203 </dl>
204 <dl class="cpp function">
205 <dt id="_CPPv413memcached_casP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t8uint64_t">
206 <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>
207 <dd></dd></dl>
208
209 <dl class="cpp function">
210 <dt id="_CPPv420memcached_cas_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t8uint64_t">
211 <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 <dd><dl class="field-list simple">
213 <dt class="field-odd">Parameters</dt>
214 <dd class="field-odd"><ul class="simple">
215 <li><p><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</p></li>
216 <li><p><strong>group_key</strong> -- key namespace</p></li>
217 <li><p><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</p></li>
218 <li><p><strong>key</strong> -- the key to check</p></li>
219 <li><p><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</p></li>
220 <li><p><strong>value</strong> -- the value to set</p></li>
221 <li><p><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</p></li>
222 <li><p><strong>expiration</strong> -- expiration time as unix timestamp or relative time in seconds</p></li>
223 <li><p><strong>flags</strong> -- 16 bit flags</p></li>
224 <li><p><strong>cas</strong> -- the <code class="docutils literal notranslate"><span class="pre">cas</span></code> value to compare</p></li>
225 </ul>
226 </dd>
227 <dt class="field-even">Returns</dt>
228 <dd class="field-even"><p><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>
229 </dd>
230 </dl>
231 </dd></dl>
232
233 </div>
234 <div class="section" id="description">
235 <h2>DESCRIPTION<a class="headerlink" href="#description" title="Permalink to this headline"></a></h2>
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> overwrites data in the server as long as the <code class="docutils literal notranslate"><span class="pre">cas</span></code> value is
237 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
238 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>
239 <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.
240 The difference is that it uses the <code class="docutils literal notranslate"><span class="pre">group_key</span></code> parameter to map objects to
241 particular servers.</p>
242 <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
243 enabled. However, when using these operations with this behavior on, there are
244 limits to the size of the payload being sent to the server. The reason for
245 these limits is that the Memcached Server does not allow multi-datagram requests
246 and the current server implementation sets a datagram size to 1400 bytes. Due to
247 protocol overhead, the actual limit of the user supplied data is less than 1400
248 bytes and depends on the protocol in use as, well as the operation being
249 executed. When running with the binary protocol,
250 <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
251 expiry combined may not exceed 1368 bytes. When running with the ASCII protocol,
252 the exact limit fluctuates depending on which function is being executed and
253 whether the function is a cas operation or not. For non-cas ASCII set
254 operations, there are at least 1335 bytes available to split among the key,
255 key_prefix, and value; for cas ASCII operations there are at least 1318 bytes
256 available to split among the key, key_prefix and value. If the total size of the
257 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>
258 will be returned.</p>
259 </div>
260 <div class="section" id="return-value">
261 <h2>RETURN VALUE<a class="headerlink" href="#return-value" title="Permalink to this headline"></a></h2>
262 <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>.
263 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>.
264 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
265 string.</p>
266 </div>
267 <div class="section" id="see-also">
268 <h2>SEE ALSO<a class="headerlink" href="#see-also" title="Permalink to this headline"></a></h2>
269 <ul class="simple">
270 <li><p><em class="manpage"><a class="manpage reference external" href="https://linux.die.net/man/1/memcached">memcached(1)</a></em></p></li>
271 <li><p><a class="reference internal" href="../libmemcached.html"><span class="doc">C/C++ Client Library for memcached</span></a></p></li>
272 <li><p><a class="reference internal" href="memcached_set.html"><span class="doc">Storing data on the server</span></a></p></li>
273 <li><p><a class="reference internal" href="memcached_append.html"><span class="doc">Appending or Prepending Data</span></a></p></li>
274 <li><p><a class="reference internal" href="memcached_strerror.html"><span class="doc">Converting Error Codes to Messages</span></a></p></li>
275 </ul>
276 </div>
277 </div>
278
279
280 </div>
281
282 </div>
283 <footer>
284
285 <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
286
287 <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>
288
289
290 <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>
291
292 </div>
293
294
295 <hr/>
296
297 <div role="contentinfo">
298 <p>
299
300
301 &copy; <a href="../copyright.html">Copyright</a>
302
303 </p>
304 </div>
305
306
307
308 Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
309
310 <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
311
312 provided by <a href="https://readthedocs.org">Read the Docs</a>.
313
314 </footer>
315
316 </div>
317 </div>
318
319 </section>
320
321 </div>
322
323
324 <script type="text/javascript">
325 jQuery(function () {
326 SphinxRtdTheme.Navigation.enable(true);
327 });
328 </script>
329
330
331
332
333
334
335 </body>
336 </html>