Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #14457
| From | Jim Janney <jjanney@shell.xmission.com> |
|---|---|
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: Caching with timed expiry |
| Date | 2012-05-10 03:48 -0600 |
| Organization | objurgating the centipede |
| Message-ID | <ydny5p0jri1.fsf@shell.xmission.com> (permalink) |
| References | <joc4c0$2hm$1@news.albasani.net> <ydn3979kvz7.fsf@shell.xmission.com> <4fab77d3$0$6875$e4fe514c@news2.news.xs4all.nl> |
Silvio Bierman <silvio@moc.com> writes: > On 05/09/2012 09:14 PM, Jim Janney wrote: >> Sebastian<sebastian@undisclosed.invalid> writes: >> >>> Hello there, >>> >>> does anyone of a cache / map implementation in which entries >>> expire after a fixed time? By which I mean that after a cnfigurable >>> delay after an enzry has been caches,it is automatically removed >>> from the cache and some clean-up action (perhaps event-triggred) >>> can be taken. >>> >>> My scenario is this: A GUI client searches an LDAP server using >>> the virtual list view control. The server requires all requests >>> to be made over the same connection. So my middleware component >>> will need to check out that connection from a pool and cache it, >>> using the ASN1 cookie sent by the client as a key. >>> >>> Trouble is, if the client never signals that it won't request >>> another page (e. g. because it crashes), I need to auto-release >>> the LDAP server connection to the connection pool to prevent leakage. >>> I thought that a ready-made cache with timed expiry would come in handy. >>> If there is no such beast, any ideas for possible approaches? >>> >>> -- Sebastian >> >> Look at subclassing java.util.LinkedHashMap and overriding the >> removeEldestEntry method to check an expiration time. The removal time >> will not be precise (since it's triggered when something else is looked >> up) but it may be good enough. >> > > Actually this is not going to work since removeEldestEntry is only > called when calling put on the map and even then it is only called > once for each put, disallowing dropping multiple expired entries at > once. > I kicked LinkedHashMap around a couple of times to try and get this > working properly but gave up on it. Hmm, yes. An access-ordered LinkedHashMap may stop growing, but it will never shrink unless you explicitly remove entries. I suppose you could repeatedly add a bogus entry and then remove it again? Still not the cleanest approach. > > The simplest self-built solution is wrapping key/element pairs in > wrapper objects that also implements a doubly-linked list to represent > the queue and coupling that with a plain HashMap that maps key values > to the corresponding wrapper. > I have done this to create caches that makes elements expire if they > have been in the cache for too long or have not been retrieved for too > long. Naturally this can be done either implicitly at lookup time or > explicitly with some purgeExpiredEntries method that could be called > periodically even when not querying the cache. > > There probably also are existing cache libraries that will do this for > you if you don't mind the dependency. A separate priority queue kept in parallel with the map? -- Jim Janney
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Caching with timed expiry Sebastian <sebastian@undisclosed.invalid> - 2012-05-08 23:48 +0200
Re: Caching with timed expiry Jim Janney <jjanney@shell.xmission.com> - 2012-05-09 13:14 -0600
Re: Caching with timed expiry Silvio Bierman <silvio@moc.com> - 2012-05-10 10:09 +0200
Re: Caching with timed expiry Jim Janney <jjanney@shell.xmission.com> - 2012-05-10 03:48 -0600
Re: Caching with timed expiry Silvio Bierman <silvio@moc.com> - 2012-05-10 12:56 +0200
Re: Caching with timed expiry Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2012-05-10 06:57 -0300
Re: Caching with timed expiry Sebastian <sebastian@undisclosed.invalid> - 2012-05-13 23:05 +0200
Re: Caching with timed expiry Roedy Green <see_website@mindprod.com.invalid> - 2012-05-09 14:43 -0700
Re: Caching with timed expiry Robert Klemme <shortcutter@googlemail.com> - 2012-05-14 23:47 +0200
Re: Caching with timed expiry Arne Vajhøj <arne@vajhoej.dk> - 2012-05-20 22:18 -0400
Re: Caching with timed expiry Paul Cager <paul.cager@googlemail.com> - 2012-05-09 13:09 -0700
csiph-web