基于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"的依赖性。



==
下载
========

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
用于批量操作的java RESTful API分块响应   java读取在线存储的文本文件   在Java ME中将双精度舍入到小数点后5位   java查找一个数字的最接近因子   java更改JMenuBar的字体   java Kmeans聚类算法运行时间和复杂性   java是否可以阻止try catch返回null   java内容解析器指向具有正确URI的错误表   java Android Kotlin插装测试未被识别为插装测试   java TestNG@Dataprovider   在forloop和print语句中声明变量时发生java错误   java在Android Studio 3中设置JNI