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 to data on the server" 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></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>Working with data on the server in an atomic fashion
</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=
"working-with-data-on-the-server-in-an-atomic-fashion">
212 <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>
213 <div class=
"section" id=
"synopsis">
214 <span id=
"index-0"></span><h2>SYNOPSIS
<a class=
"headerlink" href=
"#synopsis" title=
"Permalink to this headline">¶
</a></h2>
215 <p>#include
<libmemcached/memcached.h
></p>
216 <dl class=
"function">
217 <dt id=
"_CPPv413memcached_casP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t8uint64_t">
218 <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>
221 <dl class=
"function">
222 <dt id=
"_CPPv420memcached_cas_by_keyP12memcached_stPKc6size_tPKc6size_tPKc6size_t6time_t8uint32_t8uint64_t">
223 <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>
226 <p>Compile and link with -lmemcached
</p>
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-func docutils literal notranslate"><span class=
"pre">memcached_cas()
</span></code></a> overwrites data in the server as long as the “cas”
231 value is still the same in the server. You can get the cas value of a result
232 by calling
<a class=
"reference internal" href=
"memcached_result_st.html#_CPPv420memcached_result_casPK19memcached_result_st" title=
"memcached_result_cas"><code class=
"xref cpp cpp-func docutils literal notranslate"><span class=
"pre">memcached_result_cas()
</span></code></a> on a memcached_result_st(
3)
233 structure. At the point that this note was written cas is still buggy in memcached.
234 Turning on tests for it in libmemcached(
3) is optional. Please see
235 <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> for information on how to do this.
</p>
236 <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-func docutils literal notranslate"><span class=
"pre">memcached_cas_by_key()
</span></code></a> method behaves in a similar method as the non
237 key methods. The difference is that it uses the group_key parameter
238 to map objects to particular servers.
</p>
239 <p><a class=
"reference internal" href=
"#_CPPv413memcached_casP12memcached_stPKc6size_tPKc6size_t6time_t8uint32_t8uint64_t" title=
"memcached_cas"><code class=
"xref cpp cpp-func 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 enabled. However, when using these operations with this behavior
240 on, there are limits to the size of the payload being sent to the server. The
241 reason for these limits is that the Memcached Server does not allow
242 multi-datagram requests and the current server implementation sets a datagram
243 size to
1400 bytes. Due to protocol overhead, the actual limit of the user
244 supplied data is less than
1400 bytes and depends on the protocol in use as,
245 well as the operation being executed. When running with the binary protocol,
246 <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,
247 flags and expiry combined may not exceed
1368 bytes. When running with the
248 ASCII protocol, the exact limit fluctuates depending on which function is
249 being executed and whether the function is a cas operation or not. For
250 non-cas ASCII set operations, there are at least
1335 bytes available to
251 split among the key, key_prefix, and value; for cas ASCII operations there
252 are at least
1318 bytes available to split among the key, key_prefix and value. If the total size of the 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> will be returned.
</p>
254 <div class=
"section" id=
"return">
255 <h2>RETURN
<a class=
"headerlink" href=
"#return" 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-type 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-func docutils literal notranslate"><span class=
"pre">memcached_strerror()
</span></code></a> to translate this value to a printable
261 <div class=
"section" id=
"see-also">
262 <h2>SEE ALSO
<a class=
"headerlink" href=
"#see-also" title=
"Permalink to this headline">¶
</a></h2>
272 <div class=
"rst-footer-buttons" role=
"navigation" aria-label=
"footer navigation">
274 <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>
277 <a href=
"memcached_append.html" class=
"btn btn-neutral float-left" title=
"Appending or Prepending to data on the server" accesskey=
"p" rel=
"prev"><span class=
"fa fa-arrow-circle-left"></span> Previous
</a>
284 <div role=
"contentinfo">
286 © <a href=
"../copyright.html">Copyright
</a>
290 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>.
303 <script type=
"text/javascript">
305 SphinxRtdTheme.Navigation.enable(true);