> Can someone else reply with how other libraries are doing sets? Would you > see a benefit in a production environment?
I use an asynchronous add (put-if-absent) to repopulate the remote cache if it was not found in the local cache, not found in the remote cache, and therefore had to be created locally. Generally the remote cache is always warmed, as any invalidation should have reloaded that data in the remote cache (since local caches must be invalidated and reload against the fresh data in the remote cache). However, if a cache server fails then the data is lost and we'd like it to slowly be replenished. Doing an asynchronous put-if-absent allows for a gradual recovery without blocking the user request. ----- Original Message ---- From: Kevin Amerson <[EMAIL PROTECTED]> To: Ciaran <[EMAIL PROTECTED]> Cc: [email protected] Sent: Wednesday, January 16, 2008 11:36:48 AM Subject: Re: Enyim.Memcached and asynchronous sets I wonder if the benefit in a production web application would really be that great. For instance, each web request already runs in its own thread, so if each request in reality only submits a handful of sets then this won't really add any performance to a production web site. 50 web servers 100 users per server 5000 simultaneous sets to memcached, does each one need to do theirs asynchronously? Can someone else reply with how other libraries are doing sets? Would you see a benefit in a production environment? Kevin On Jan 16, 2008 6:06 AM, Ciaran <[EMAIL PROTECTED]> wrote: On Jan 16, 2008 11:50 AM, Kieran Benton <[EMAIL PROTECTED]> wrote: Hi Ciaran, I think this is definitely something that would be of benefit, as you're right, if you've architected your app correctly most SETs can be asynchronous. I'd argue for a BeginStore / EndStore standard pattern though like in the rest of the BCL. As I understand it, this is simply a naming convention and adding a parameter that implements IAsyncResult (and then using it correctly? ) Is this correct ? - ciaran Cheers, Kieran From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Ciaran Sent: 16 January 2008 11:41 To: [email protected] Subject: Re: Enyim.Memcached and asynchronous sets On Jan 16, 2008 9:45 AM, Ciaran <[EMAIL PROTECTED]> wrote: HI, Am I better modifying the Enyim.Memcached client to support an Async Set [clearly a workqueue around the normal set command] (and provide you with another patch), or just wrap the existing client in my own facade to provide this functionality, i.e. what would 'a' (Enyim) prefer. On the off-chance that someone's interested, the following code : IList<IEndPoint> servers = new List<IEndPoint>(); servers.Add(new Enyim.Caching.Configuration.Code.EndPoint("127.0.0.1", 11211)); MemCachedClientConfiguration configuration = new MemCachedClientConfiguration(servers); MemcachedClient client = new MemcachedClient(configuration); DateTime before = DateTime.Now; for (int i = 0; i < 10000; i++) { Guid guid = Guid.NewGuid(); client.Store(StoreMode.Set, guid.ToString(), guid); } DateTime after= DateTime.Now; Console.Out.WriteLine(String.Format("Took {0}ms to do 10000 stores", ((TimeSpan)(after-before)).TotalMilliseconds)); DateTime beforeAsync = DateTime.Now; for (int i = 0; i < 10000; i++) { Guid guid = Guid.NewGuid(); client.StoreAsync(StoreMode.Set, guid.ToString(), guid); } after = DateTime.Now; Console.Out.WriteLine(String.Format("Took {0}ms to do 10000 stores", ((TimeSpan)(after - beforeAsync)).TotalMilliseconds)); Prints the following timings: Took 1734.3861ms to do 10000 stores Took 62.5004ms to do 10000 stores (Interestingly the *actual* time to do the 10000 stores asynchronously, came out at about 1200ms, because many stores occurred in parallel fwiw) Thanks - Ciaran -- - Ciaran -- - Ciaran ____________________________________________________________________________________ Never miss a thing. Make Yahoo your home page. http://www.yahoo.com/r/hs
