Saying *NO* to stale data

Eric Hodel drbrain at segment7.net
Wed Jul 5 18:49:13 UTC 2006


On Jul 5, 2006, at 5:30 AM, Michael Carter wrote:

> A user with id 1 makes two simultaneous requests which we'll call  
> request A and request B: A posts a message to some forum and B  
> changes the user's email address. Lets assume that a valid User  
> object exists under the key "user_1". Here is a chronological list  
> of events as they occur in request A and B
>
> 1. A: user = memcached.get("user_1")
> 2. B: user = memcached.get("user_1")
> 3. B: user.email = "newemail", user.lastAction = now
> 4. B: SQL update on user id=1
> 5. B: memcached.set("user_1", user)
> 6. A: user.lastAction = now
> 7. A: SQL update on user id=1
> 8. A: memcached.set("user_1", user) *** Here lies the problem
>
> Now the memcached version of user_1 has stale data for the email  
> address.
>
> Is there a built-in or standard way of addressing this?

In this scenario 7) destroys data in your database.  Add a version  
column to the database and update only when memcached and the DB  
agree on the record versions.

-- 
Eric Hodel - drbrain at segment7.net - http://blog.segment7.net
This implementation is HODEL-HASH-9600 compliant

http://trackmap.robotcoop.com




More information about the memcached mailing list