I have a few a few model classes such as a user class which is passed a dictionary, and wraps it providing various methods, some of which communicate with the database when a value needs to be changed. The dictionary itself is made from an sqlalchemy RowProxy, so all its keys are actually attribute names taken directly from the sql user table. (attributes include user_id, username, email, passwd, etc)
If a user is logged in, should I simply save this dictionary to a redis key value store, and simply call a new user object when needed and pass it this dictionary from redis(which should be faster than only saving a user id in a session and loading the values again from the db based on that user_id)?
Or should I somehow serialize the entire object and save it in redis? I’d appreciate any alternate methods of managing model and session objects that any of you feel would be better as well.
In case anyone is wondering I’m only using the sqlalchemy expression language, and not the orm. I’m using the model classes as interfaces, and coding against those.
Unless you’re being really careful, serializing the entire object into redis is going to cause problems. You’re effectively treating it like a cache, so you have to be careful that those values are expired if the user changes something about themselves. You also have to make sure that all of the values are serializable (likely via pickle). You didn’t specify whether this is a premature optimization so I’m going to say that it probably is and recommend that you just track the user id and reload his information when you need it from your database.