下面我提供了一种代码例子仅仅是为了HTTP GET从Redis的数据请求作出响应:扭曲:使用txredisapi库劝需要
请求:http://example.com:8888/?auth=zefDWDd5mS7mcbfoDbDDf4eVAKb1nlDmzLwcmhDOeUc
响应:get: u'"True"'
的这段代码的目的是作为一个REST服务器(这就是为什么我使用lazyConnectionPool)响应请求,并使用来自Redis的数据(读/写)。
我需要做的:
- 运行多个请求里面的IndexHandler的render_GET Redis的(如GET,HMGET,SET等)
- 润多在事务内IndexHandler的render_GET请求
我已经尝试了多种方法来做到这一点(包括来自txredisapi库的例子),但由于缺乏经验,没有做到这一点。你能否就问题1)和2)提供建议。
在此先感谢。
import txredisapi as redis
from twisted.application import internet
from twisted.application import service
from twisted.web import server
from twisted.web.resource import Resource
class Root(Resource):
isLeaf = False
class BaseHandler(object):
isLeaf = True
def __init__(self, db):
self.db = db
Resource.__init__(self)
class IndexHandler(BaseHandler, Resource):
def _success(self, value, request, message):
request.write(message % repr(value))
request.finish()
def _failure(self, error, request, message):
request.write(message % str(error))
request.finish()
def render_GET(self, request):
try:
auth = request.args["auth"][0]
except:
request.setResponseCode(404, "not found")
return ""
d = self.db.hget(auth, 'user_add')
d.addCallback(self._success, request, "get: %s\n")
d.addErrback(self._failure, request, "get failed: %s\n")
return server.NOT_DONE_YET
# Redis connection parameters
REDIS_HOST = '10.10.0.110'
REDIS_PORT = 6379
REDIS_DB = 1
REDIS_POOL_SIZE = 1
REDIS_RECONNECT = True
# redis connection
_db = redis.lazyConnectionPool(REDIS_HOST, REDIS_PORT, REDIS_DB, REDIS_POOL_SIZE)
# http resources
root = Root()
root.putChild("", IndexHandler(_db))
application = service.Application("web")
srv = internet.TCPServer(8888, server.Site(root), interface="127.0.0.1")
srv.setServiceParent(application)
此代码看起来不错。我没有运行它,但它有什么问题? – Max
提供的代码是绝对有效的,并且没有任何当前实现的问题。我需要的是扩展它:(i)在IndexHandler的render_GET内部向Redis运行多个请求(如GET,HMGET,SET等); (ii)在IndexHandler的render_GET内部的事务中运行多个请求 –