2

以下に、Redis からのデータを使用して HTTP GET 要求に応答するだけのコード例を示します。

リクエスト: http://example.com:8888/?auth=zefDWDd5mS7mcbfoDbDDf4eVAKb1nlDmzLwcmhDOeUc レスポンス: get: u'"True"'

このコードの目的は、REST サーバーとして機能し (そのため、私は lazyConnectionPool を使用しています)、リクエストに応答し、Redis からのデータ (読み取り/書き込み) を使用します。

私は何をする必要がありますか:

  1. IndexHandler の render_GET 内で Redis への複数のリクエストを実行します (GET、HMGET、SET など)。
  2. 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)
4

1 に答える 1