Or don't store your sessions at all...
On Mon, Aug 24, 2009 at 4:28 AM, Henrik Schröder <[email protected]> wrote:

> The correct way to do this is to store your sessions in your database and
> use memcached as a cache to speed it up. If you want to do something on
> session end, you make a script that goes through the stored sessions in your
> db, finds the expired ones, and does whatever it is you want to do.
>
> So, on every pageview you do a memcached get for the current user's session
> data.
> If it does not exist, you check the db.
> If it exists, you load it from db and store in memcached.
> If it does not exist in the db, it is a new session, so you create it.
> If it does exist in memcached, well, there you have it.
>
> Then you process your page, and perform any changes to the session object.
>
> And when your page is done, you store the session object back into
> memcached and your db.
> It is a good idea to attach a timestamp to your session object so that you
> only do db writes every N minutes instead of every pageview. This way, users
> may lose a minute or two of session data if a memcached server crashes or
> the data expires, but you will get a significant speedup by not having to
> write to the db on every pageview.
>
>
> /Henrik Schröder
>
> On Mon, Aug 24, 2009 at 00:22, ron <[email protected]> wrote:
>
>> I simply want to use memcached to store user sessions for multiple web
>> app servers, instead of using the tomcat's local session.
>> Tomcat supports something call HttpSessionListener which has a
>> listener method "sessionDestroyed" that allows a last chance clean up
>> before the session object is destroyed.
>> I know tomcat has ways to replicate sessions over multiple servers but
>> i am thinking memcached is an easier solution for that.
>>
>> If you know some other better option please let me know.. thx.
>>
>> On Aug 23, 10:08 am, Henrik Schröder <[email protected]> wrote:
>> > Basically, no, but there are ways you can do that yourself in your
>> > application. However, it still sounds like you're using memcached for
>> > something it was not designed to do. It is a cache, not a datastore. You
>> are
>> > never guaranteed to get back an item that you have stored, and you have
>> no
>> > way of knowing if a cache miss is because the item expired, or because
>> it
>> > was never stored in the first place.
>> >
>> > But what you can do is to store a timestamp yourself together with the
>> item.
>> > Then, whenever you retrieve the item, you look at your timestamp and
>> treat
>> > it as the actual expiry, so if it's passed, you perform your cleanup and
>> > return null to the caller. And whenever you store an item you tag on
>> this
>> > timestamp and set the actual expiry to sometime far in the future.
>> However,
>> > note that you may not always get back items and your cleanup may not run
>> for
>> > all items.
>> >
>> > Perhaps if you told us what you wanted to achieve with your application
>> we
>> > could help you do it properly with memcached or point you in the
>> direction
>> > of other technologies if memcached is the wrong one for the job?
>> >
>> > /Henrik Schröder
>> >
>> > On Sun, Aug 23, 2009 at 17:57, ron <[email protected]> wrote:
>> >
>> > > thanks.
>> >
>> > > So can memcached at least return an expiring object for the last time
>> > > to my application, with a flag set saying that it has expired in
>> > > memecached and the next time you request the object it will return
>> > > null?
>> > > Doing this will give me a chance to do my other application clean up
>> > > which needs the data in that expiring cache object.
>> >
>> > > On Aug 23, 8:34 am, Brian Moon <[email protected]> wrote:
>> > > > 1. No, memcached does not do that.
>> >
>> > > > 2. You don't want it to.
>> > >http://code.google.com/p/memcached/wiki/FAQ#When_do_expired_cached_it.
>> ..
>> > > > Having to have a garbage collector that watched items for expiration
>> > > > would increase the load that memcached put on a system a great deal.
>> >
>> > > > Brian.
>> > > > --------http://brian.moonspot.net/
>> >
>> > > > On 8/23/09 12:03 AM, ron wrote:
>> >
>> > > > > Hi,
>> >
>> > > > > Can memached trigger some kind of event to notify client that a
>> > > > > particular cached object is expired??
>> >
>> > > > > If it doesn't support, does anyone know what other technology out
>> > > > > there there is also a distributed cache but also it can send out
>> > > > > events when an object is about to expired??
>> >
>> > > > > thx.
>> > > > > Ron
>>
>
>


-- 
awl

Reply via email to