下面我提供了一種代碼例子僅僅是爲了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內部的事務中運行多個請求 –