Mind there is a difference in behavior in cache.ram and cache.disk and 
cache.memcache. Leonel is talking about cache.ram and cache.ram only works 
if you have one single server and only as long the process in the server is 
running. Your web server can arbitrarily restart at will and this will 
invalidate the cache at random time. All changes would be lost.

Cache.disk and cache.memcache instead have a more persistent storage but 
the object you see is only a copy of the one stored.

It is therefore a very bad idea to ever change a change a cached object. 
Something will always break. It is ok to replace such object.




On Monday, 4 May 2015 10:56:35 UTC-5, Chris Modzelewski wrote:
>
> Awesome! Thank you very much for this explanation!
>
> All the best,
> Chris
>
> On Tuesday, April 28, 2015 at 6:22:49 PM UTC-4, Leonel Câmara wrote:
>>
>> This one:
>>
>> A. Does the cached object get updated:
>>
>> The cached object is updated immediately because it's the same object. 
>> Cache ram does not clone it. Notice that the behaviour will be different if 
>> you're using cache disk.
>>
>> Do know that doing this is a very bad idea, as you will run into all 
>> sorts of thread safety problems. You should consider cached values 
>> immutable if you don't want to worry about safety yourself.
>>
>>
>> And finally, if I wish to force a changed value of some_object to be 
>> saved to the cache, am I correct that I should then call:
>> some_object.arg3 = 1111
>> some_object = cache.ram(self.id_attribute, lambda self, time=0)
>>
>>
>> This will force the change, but, again, if it's the same object the 
>> change will already be there.
>>
>> > Does this mean that the next time someone instantiates an object of 
>> class "SomeClass" with the same arg1 value but a different time_expire 
>> value, the cached object will be overwritten?
>>
>> It will be overwritten if the cached value has a timestamp that is 
>> expired with the given time_expire value. 
>>   
>>
>>
>> I think that maybe your problem is that you're not understanding what the 
>> cache is actually saving in your example. When you put an object in cache 
>> ram, what's actually in the cache is a reference to the object. So if you 
>> have a reference to that same object somewhere else and you modify it, 
>> you're actually modifying the same object that cache is referencing.
>>
>> Cache disk is different, because cache disk pickles your object and when 
>> you ask it for a value it unpickles it, so each time you will get a new 
>> object albeit with the same attributes.
>>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to