python 字典对象未在内存缓存中更新
python dictonary object not getting updated in memcache
我正在开发一个基于 Web2py 的 Web 应用程序,我正在 Google App Engine 上部署它。
我面临的问题是。每次我按照下面的代码用一个值更新内存缓存时,我的内存缓存就会被刷新
memclient = memcache.Client()
temp_list = memclient.get('event_list')
if temp_list is not None:
temp_dict = client_list = memclient.get('event_list')
logging.info('Before Updating')
logging.info(temp_dict)
temp_dict.update({str(form.vars.id):[str(form.vars.id),request.vars.first_name,request.vars.last_name]})
logging.info('After Updating')
logging.info(client_list)
memclient.add('event_list', temp_dict)
temp_dict= memclient.get('event_list')
logging.info('After Updating in memcache')
logging.info(temp_dict)
else:
temp_dict= {str(form.vars.id):[str(form.vars.id),request.vars.first_name,request.vars.last_name]}
logging.info('Before Updating')
logging.info(temp_dict)
logging.info('After Updating')
memclient.add('event_list', temp_dict)
temp_dict= memclient.get('event_list')
logging.info('After Updating in memcache')
logging.info(temp_dict)
如果这段代码 运行 两次旧值和新值都应该是内存缓存中 dict 对象的一部分,那么应该会发生什么。
虽然目前在日志中我正在检查这些值在内存缓存中被新值覆盖了。
Logs output
First Run
Before Updating
{'658XXXXXXXXXXX84': ['658XXXXXXXXXXX84', 'roshan', 'jain']}
After Updating
After Updating in memcache
{'658XXXXXXXXXXX84': ['658XXXXXXXXXXX84', 'roshan', 'jain']}
Second RUN
Before Updating
{'658XXXXXXXXXXX84': ['658XXXXXXXXXXX84', 'roshan', 'jain']}
After Updating
{'658XXXXXXXXXXX84': ['658XXXXXXXXXXX84', 'roshan', 'jain'], '566XXXXXXXXX80': ['566XXXXXXXXX80', 'MS', 'Dhoni']}
After Updating in memcache
{'658XXXXXXXXXXX84': ['658XXXXXXXXXXX84', 'roshan', 'jain']}
问题是新值没有得到更新。
注意:我是 Python 和 Web2py 的新手,尽管我已经广泛使用 GAE java,而且我认为 Map> 可以存储在缓存中。
感谢您的帮助
文档不是很清楚,但看起来 add
仅在密钥不存在时才更新缓存。由于您之前已将 "event_list" 存储在缓存中,因此第二次 add 调用什么都不做,您只是在后续的 get 中取回原始值。
你应该使用 memclient.set
.
如 所述,您应该使用 .set()
而不是 .add()
。另一种选择是使用 web2py 的 gae_memcache
模块,它允许您使用与 web2py 的标准 cache
机制相同的 API:
from gluon.contrib.gae_memcache import MemcacheClient
cache.ram = cache.disk = MemcacheClient(request)
然后您可以使用 cache.ram
and/or cache.disk
(两者都只是内存缓存客户端的别名),如下所述:http://web2py.com/books/default/chapter/29/04/the-core#cache
我正在开发一个基于 Web2py 的 Web 应用程序,我正在 Google App Engine 上部署它。 我面临的问题是。每次我按照下面的代码用一个值更新内存缓存时,我的内存缓存就会被刷新
memclient = memcache.Client()
temp_list = memclient.get('event_list')
if temp_list is not None:
temp_dict = client_list = memclient.get('event_list')
logging.info('Before Updating')
logging.info(temp_dict)
temp_dict.update({str(form.vars.id):[str(form.vars.id),request.vars.first_name,request.vars.last_name]})
logging.info('After Updating')
logging.info(client_list)
memclient.add('event_list', temp_dict)
temp_dict= memclient.get('event_list')
logging.info('After Updating in memcache')
logging.info(temp_dict)
else:
temp_dict= {str(form.vars.id):[str(form.vars.id),request.vars.first_name,request.vars.last_name]}
logging.info('Before Updating')
logging.info(temp_dict)
logging.info('After Updating')
memclient.add('event_list', temp_dict)
temp_dict= memclient.get('event_list')
logging.info('After Updating in memcache')
logging.info(temp_dict)
如果这段代码 运行 两次旧值和新值都应该是内存缓存中 dict 对象的一部分,那么应该会发生什么。 虽然目前在日志中我正在检查这些值在内存缓存中被新值覆盖了。
Logs output
First Run
Before Updating
{'658XXXXXXXXXXX84': ['658XXXXXXXXXXX84', 'roshan', 'jain']}
After Updating
After Updating in memcache
{'658XXXXXXXXXXX84': ['658XXXXXXXXXXX84', 'roshan', 'jain']}
Second RUN
Before Updating
{'658XXXXXXXXXXX84': ['658XXXXXXXXXXX84', 'roshan', 'jain']}
After Updating
{'658XXXXXXXXXXX84': ['658XXXXXXXXXXX84', 'roshan', 'jain'], '566XXXXXXXXX80': ['566XXXXXXXXX80', 'MS', 'Dhoni']}
After Updating in memcache
{'658XXXXXXXXXXX84': ['658XXXXXXXXXXX84', 'roshan', 'jain']}
问题是新值没有得到更新。
注意:我是 Python 和 Web2py 的新手,尽管我已经广泛使用 GAE java,而且我认为 Map> 可以存储在缓存中。
感谢您的帮助
文档不是很清楚,但看起来 add
仅在密钥不存在时才更新缓存。由于您之前已将 "event_list" 存储在缓存中,因此第二次 add 调用什么都不做,您只是在后续的 get 中取回原始值。
你应该使用 memclient.set
.
如 .set()
而不是 .add()
。另一种选择是使用 web2py 的 gae_memcache
模块,它允许您使用与 web2py 的标准 cache
机制相同的 API:
from gluon.contrib.gae_memcache import MemcacheClient
cache.ram = cache.disk = MemcacheClient(request)
然后您可以使用 cache.ram
and/or cache.disk
(两者都只是内存缓存客户端的别名),如下所述:http://web2py.com/books/default/chapter/29/04/the-core#cache