基于memcache的会话存储
lovely.session的Python项目详细描述
一个使用memcache的会话数据包提供了一个会话数据管理器,它将其数据存储在memcache中。包使用lovely.memcached来存储其数据。
如果要运行此测试,则需要使用--all作为测试参数。
vely.memcached.interfaces从可爱的.memcached.utility导入memcachedclient
>;>util=memcachedclient()
>;>component.provideUtil(util,imemcachedclient,name='session')
>;
导入将用于缓存测试的容器。
>;>;来自可爱的.session.memcached import memcachedsessiondatacontainer
>超时行为
~~~~~~~~~~~~~~~~~~~
我们需要测试容器的超时能力。我们可以通过模拟时间的流逝来实现这一点,同时最小化超时时间。
;>;>;timeoutsessiondata.\uu name\uuu='memcachesession'
>;>;timeoutsession=timeoutsessiondata['mysessionid']
>;>;timeoutsession
{}
从中获取新会话。
>;>timeoutdata=timeoutsession['mydata1']
>;>timeoutdata
{}
存储在memcache'}
现在从会话中获取该sessiondata。它应该只提供给我们,sessiondata应该有数据。
>;>timeout data=timeoutsession['mydata1']
>;>timeoutdata
{'info':'stored in memcache'}
data.timeout=1
>;>timeout sessiondata.lastaccesstime=0
现在再次询问会话数据。如果超时有效,则会话将为空。
>;>timeout session=timeout session data['mysessionid']
>;>timeoutsession
{}
Session['MyData1']
>;>>超时数据
{}
常规memcache访问
~~~~~~~~~~~~~~~~~~~~~~~
>现在我们创建一个memcache会话并将其连接到memcached客户端。
>;sessionData=memcachedSessionDataContainer()
>;>会话data.cache name=u'session'
我们需要为会话数据管理器提供一个名称,因为它用于
标识memcache中的缓存项。
>;>;sessiondata.\uu name='memcachesession'
>;>;session=sessiondata['mysessionid']
>;>;session
{}
>;>;类型(session)
<;类"可爱的.session.memcached.memcachesessiondata">;
>我们现在可以从会话中获取数据。
>;>;data=session['mydata']
>;>;data
{}
>;type(data)
<;类"love"ly.session.memcached.memcachepkgdata'>n memcache'}
事务支持
~~~~~~~~~~~~~~~~~~~~~~~~~
,因为memcachesession知道事务,我们需要提交
事务以将数据存储在memcache中。
>;导入事务
>;transaction.commit()
e现在读取会话数据它是从memcache中读取回来的。
>;>session=session data['mysessionid']
>;>session['mydata']
{'info':'存储在memcache中'}
>;>sessiondata.items()
[('mysessionid',<;lovely.session.memcached.datamanager object at…>;)]
memcachesession现在也支持savepoint,让我们检查它是如何工作的:
>我们首先设置一些数据:
>;>;session=session data['mysessionid']
>;>;data=session['mydata']
>;>;data['info']='我们希望保留这个'
设置一个保存点:
>;>savepoint=transaction.savepoint()
矿石价值:
>;>;数据["信息"]
"我们希望保留此数据"
新添加的数据也必须消失:
我们添加新数据:
>;>;数据["新信息"]="走开"
和新容器:
>;>;新数据=会话["我的新数据"]
>t;gt;newdata['foo']="bar"
将其回滚到上一个保存点:
>;>;savepoint.roll back()
数据已丢失:
>;>;data['newinfo']
回溯(最近一次调用时间):
…
键错误:"newinfo"
,因为它总是在检索时创建:
>;>session['mynewdata']
{}
iondata['mysessionid']
>;>session['mydata']
{'info':'我们想保留这个'}
总是在检索时创建:
>;>session['mynewdata']
{}
=
=
更改
==
<0.3.0(2009年11月12日)
----
-使用zope.container而不是zope.app.container
-删除未使用的依赖项
<0.2.2(2009-08-14)
----
-添加"lastaccesstime"类属性(修复旧实例)
>0.2.1(2009-08-14)
----
-正确实现会话数据的超时行为。
-删除重复的附加要求(python2.4兼容性)
0.2.0(2008-09-25)
----
-使数据管理器的保存点具有感知性。
>0.1.4(2008-07-31)
----
-修复了zcml以避免不推荐警告,因为会话api已移动到
``zope.session``。*叹息*
0.1.3(2008-07-31)
----
-修复了"setup.py"与最新布局相同的问题。
-修复了不推荐警告,因为会话API已移动到
``zope.session``.
<0.1.2(2007-08-13)
----
-move s来源于svn.zope.org.
0.1.1(2007-08-13)
----
-修复了对"可爱的.memcached"的依赖性。
==
下载
========
如果要运行此测试,则需要使用--all作为测试参数。
vely.memcached.interfaces从可爱的.memcached.utility导入memcachedclient
>;>util=memcachedclient()
>;>component.provideUtil(util,imemcachedclient,name='session')
>;
导入将用于缓存测试的容器。
>;>;来自可爱的.session.memcached import memcachedsessiondatacontainer
>超时行为
~~~~~~~~~~~~~~~~~~~
我们需要测试容器的超时能力。我们可以通过模拟时间的流逝来实现这一点,同时最小化超时时间。
;>;>;timeoutsessiondata.\uu name\uuu='memcachesession'
>;>;timeoutsession=timeoutsessiondata['mysessionid']
>;>;timeoutsession
{}
从中获取新会话。
>;>timeoutdata=timeoutsession['mydata1']
>;>timeoutdata
{}
存储在memcache'}
现在从会话中获取该sessiondata。它应该只提供给我们,sessiondata应该有数据。
>;>timeout data=timeoutsession['mydata1']
>;>timeoutdata
{'info':'stored in memcache'}
data.timeout=1
>;>timeout sessiondata.lastaccesstime=0
现在再次询问会话数据。如果超时有效,则会话将为空。
>;>timeout session=timeout session data['mysessionid']
>;>timeoutsession
{}
Session['MyData1']
>;>>超时数据
{}
常规memcache访问
~~~~~~~~~~~~~~~~~~~~~~~
>现在我们创建一个memcache会话并将其连接到memcached客户端。
>;sessionData=memcachedSessionDataContainer()
>;>会话data.cache name=u'session'
我们需要为会话数据管理器提供一个名称,因为它用于
标识memcache中的缓存项。
>;>;sessiondata.\uu name='memcachesession'
>;>;session=sessiondata['mysessionid']
>;>;session
{}
>;>;类型(session)
<;类"可爱的.session.memcached.memcachesessiondata">;
>我们现在可以从会话中获取数据。
>;>;data=session['mydata']
>;>;data
{}
>;type(data)
<;类"love"ly.session.memcached.memcachepkgdata'>n memcache'}
事务支持
~~~~~~~~~~~~~~~~~~~~~~~~~
,因为memcachesession知道事务,我们需要提交
事务以将数据存储在memcache中。
>;导入事务
>;transaction.commit()
e现在读取会话数据它是从memcache中读取回来的。
>;>session=session data['mysessionid']
>;>session['mydata']
{'info':'存储在memcache中'}
>;>sessiondata.items()
[('mysessionid',<;lovely.session.memcached.datamanager object at…>;)]
memcachesession现在也支持savepoint,让我们检查它是如何工作的:
>我们首先设置一些数据:
>;>;session=session data['mysessionid']
>;>;data=session['mydata']
>;>;data['info']='我们希望保留这个'
设置一个保存点:
>;>savepoint=transaction.savepoint()
矿石价值:
>;>;数据["信息"]
"我们希望保留此数据"
新添加的数据也必须消失:
我们添加新数据:
>;>;数据["新信息"]="走开"
和新容器:
>;>;新数据=会话["我的新数据"]
>t;gt;newdata['foo']="bar"
将其回滚到上一个保存点:
>;>;savepoint.roll back()
数据已丢失:
>;>;data['newinfo']
回溯(最近一次调用时间):
…
键错误:"newinfo"
,因为它总是在检索时创建:
>;>session['mynewdata']
{}
iondata['mysessionid']
>;>session['mydata']
{'info':'我们想保留这个'}
总是在检索时创建:
>;>session['mynewdata']
{}
=
=
更改
==
<0.3.0(2009年11月12日)
----
-使用zope.container而不是zope.app.container
-删除未使用的依赖项
<0.2.2(2009-08-14)
----
-添加"lastaccesstime"类属性(修复旧实例)
>0.2.1(2009-08-14)
----
-正确实现会话数据的超时行为。
-删除重复的附加要求(python2.4兼容性)
0.2.0(2008-09-25)
----
-使数据管理器的保存点具有感知性。
>0.1.4(2008-07-31)
----
-修复了zcml以避免不推荐警告,因为会话api已移动到
``zope.session``。*叹息*
0.1.3(2008-07-31)
----
-修复了"setup.py"与最新布局相同的问题。
-修复了不推荐警告,因为会话API已移动到
``zope.session``.
<0.1.2(2007-08-13)
----
-move s来源于svn.zope.org.
0.1.1(2007-08-13)
----
-修复了对"可爱的.memcached"的依赖性。
==
下载
========