Thanks, Brian,
I understand that. My goal here is to better understand possible limitations
and set expectations properly. Actually per what I saw in my tests (if the
second series of inserts will still be of 512K then all of them will be
stored successfully) I would conclude that if my data is about the same size
(let's say from 9 to 10K) then I will do much more better by having all data
pieces of the same size (align to 10K). Again this is a speculation without
knowing internals but my impression is that memcached successfully reuses
slots of the same size.

Regards,
Sergei    

-----Original Message-----
From: Brian Moon [mailto:[email protected]] 
Sent: Tuesday, July 06, 2010 8:36 PM
To: [email protected]
Cc: siroga
Subject: Re: LRU mechanism question

Just to pile on, test data that is all the same size like that is 
probably a very bad test of memcached. Most likely, all your data is not 
the exact same size.

Brian.
--------
http://brian.moonspot.net/

On 7/6/10 5:36 PM, siroga wrote:
> Hi,
> I just started playing with memcached. While doing very basic stuff I
> found one thing that confused me a lot.
> I have memcached running with default settings - 64M of memory for
> caching.
> 1. Called flushALL to clean the cache.
> 2. insert 100 of byte arrays 512K each - this should consume about 51M
> of memory so  I should have enough space to keep all of them - and to
> very that call get() for each of them  - as expected all arrays are
> present
> 3. I call flushAll again - so cache should be clear
> 4. insert 100 arrays of smaller size ( 256K). I also expected that I
> have enough memory to store them (overall I need about 26M), but
> surprisingly to me when calling get() only last 15 where found in the
> cache!!!
>
> It looks like memcached still hold memory occupied by first 100
> arrays.
> Memcache-top says that only 3.8M out of 64 used.
>
> Any info/explanation on memcached memory management details is very
> welcomed. Sorry if it is a well known feature, but I did not find much
> on a wiki that would suggest explanation.
>
> Regards,
> Sergei
>
> Here is my test program (I got the same result using both danga and
> spy.memcached. clients):
>
>      MemCachedClient cl;
>
> @Test
>      public void strange() throws Throwable
>      {
>          byte[] testLarge = new byte[1024*512];
>          byte[] testSmall = new byte[1024*256];
>          int COUNT = 100;
>          cl.flushAll();
>          Thread.sleep(1000);
>          for (int i = 0; i<  COUNT; i++)
>          {
>              cl.set("largekey" + i, testLarge, 600);
>          }
>          for (int i = 0; i<  COUNT; i++)
>          {
>              if (null != cl.get("largekey" + i))
>              {
>                  System.out.println("First not null " + i);
>                  break;
>              }
>          }
>          Thread.sleep(1000);
>          cl.flushAll();
>          Thread.sleep(1000);
>          for (int i = 0; i<  COUNT; i++)
>          {
>              cl.set("smallkey" + i, testSmall, 600);
>          }
>          for (int i = 0; i<  COUNT; i++)
>          {
>              if (null != cl.get("smallkey" + i))
>              {
>                  System.out.println("First not null " + i);
>                  break;
>              }
>          }
>
>      }

Reply via email to