<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
The simple answer is that it's an LRU cache. The least recently
accessed object will be deleted to make room for a new one.<br>
<br>
The more accurate answer is that it is a series of independent LRU
caches organized by ranges of object sizes. When a new object needs to
evict an old one, an object of roughly the same size is evicted (even
if there were objects of other sizes that were accessed less recently).
The downside is that it's not pure LRU, but the upside is that you are
guaranteed that at most one object will ever be evicted to make room
for a new one.<br>
<br>
But in the vast majority of cases you can think of it as a simple LRU
cache and you'll be close enough.<br>
<br>
-Steve<br>
<br>
<br>
Dmitry Koterov wrote:
<blockquote
 cite="midd7df81620703201118v59fcecf0v2ed87a5e93437c8@mail.gmail.com"
 type="cite">By the way, where can I found a description of memcached
deletion algorythm? <br>
What elements are deleted and in what order? <br>
  <br>
  <div><span class="gmail_quote">On 3/20/07, <b
 class="gmail_sendername">Steven Grimm</b> &lt;
  <a href="mailto:sgrimm@facebook.com">sgrimm@facebook.com</a>&gt;
wrote:</span>
  <blockquote class="gmail_quote"
 style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">What's
the problem you're trying to solve? You want to see why cache
    <br>
entries are vanishing, I imagine? If so, then you're right, just logging<br>
it will be easiest, especially if you have multiple clients. The server<br>
doesn't do that out of the box, but it'd be pretty easy to hack in. I
    <br>
think the following would do it (output will only happen if you run the<br>
server with "-vv"):<br>
    <br>
--- a/src/items.c<br>
+++ b/src/items.c<br>
@@ -100,6 +100,8 @@ item *do_item_alloc(char *key, size_t nkey, int
    <br>
flags, rel_time_t expti<br>
    <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (search = tails[id]; tries&gt;0 &amp;&amp; search; tries--,<br>
search=search-&gt;prev) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (search-&gt;refcount==0) {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (settings.verbose &gt; 1)<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("evicting item %s\n", ITEM_key(search));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do_item_unlink(search);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
    <br>
That's against the MT version of the code but should apply to the
    <br>
vanilla 1.2.x code too (maybe even 1.1.x).<br>
    <br>
-Steve<br>
    <br>
    <br>
Cristian Rusu wrote:<br>
&gt; Hello<br>
&gt;<br>
&gt; Is there any way to make the server call a specified client API<br>
&gt; function on object deletion when that happens in order to release
    <br>
&gt; resources for new objects? It will be useful at least for debug
purposes?<br>
&gt;<br>
&gt; Something I can set as a callback just before using add or set<br>
&gt; API...to return all keys deleted.<br>
&gt; Or to set a dump file if not....
    <br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Sincerely<br>
&gt; Cristian Rusu<br>
&gt; Web Programmer &amp; Electronic publisher<br>
    <br>
  </blockquote>
  </div>
  <br>
</blockquote>
<br>
</body>
</html>