Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #14457

Re: Caching with timed expiry

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>

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar | Unroll thread


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