[英]what is the best way to implement communication with redis in python
我正在嘗試編寫一個與redis通信的模塊。 到目前為止,它正在做的事情。
這是我寫的:
import redis
def get_data(token):
if token == "tokenA"
connection = redis.Redis(connection_pool=name_of_redis_engine1)
else:
connection = redis.Redis(connection_pool=name_of_redis_engine2)
data = connection.hgetall(token)
if not data:
raise Some Error
return data
def delete_data(token):
connection = redis.Redis(connection_pool=name_of_redis_engine)
data = redis_connection.delete(token)
if not data:
raise Some Error
return data
因為,兩個函數中都存在一些重復數據,這不是一個好方法。 我想知道什么是最好的方法讓它整潔也許上課? 。 將非常感謝任何幫助。
你可以把它變成一個類。 根據您的具體要求,您可以做的是:
class RedisStore:
def __init__(self, default_connection, tokenA_connection):
self._default_connection = default_connection
self._tokenA_connection = tokenA_connection
def _chose_connection(token):
if token == "tokenA"
return self._tokenA_connection
else:
return self._default_connection
def get_data(self, token):
connection = self._chose_connection(token)
data = connection.hgetall(token)
if not data:
raise Exception("Some Error") # you can only raise exceptions, and you should use a more specific one
return data
def delete_data(self, token):
connection = self._chose_connection(token)
data = connection.delete(token)
if not data:
raise Exception("Some Error") # if that is supposed to raise the same exception, you could generalize further...
return data
redis_store = new RedisStore(redis.Redis(connection_pool=name_of_redis_engine1), redis.Redis(connection_pool=name_of_redis_engine2))
您可以將類實例化一次,並將其重復用於多次查找/刪除。
讓它成為一個班級。
import redis
class RedisOp(object):
def __init__(self):
self.connection = redis.Redis(connection_pool=name_of_redis_engine)
def get_data(self, token):
data = self.connection.hgetall(token)
if not data:
raise Some Error
return data
def delete_data(self, token):
data = self.connection.delete(token)
if not data:
raise Some Error
return data
op = RedisOp()
print op.get_data('mykey')
op.delete_data('mykey')
謝謝@yarkee。 我想出了以下解決方案。 如果有人能指出一些更好的方法,我們將不勝感激。
class RedisClass(object):
def __init__(self, token=None):
self.token = token
if self.token == "TokenA":
self.redis_connection = redis.Redis(connection_pool="RedisEngineA")
else:
self.redis_connection = redis.Redis(connection_pool="RedisEngineB")
def get_data(self):
data = self.redis_connection.hgetall(self.token)
if not data:
raise AuthenticationError({"status: Invalid token"}, code=200, log_error=False)
return data
def delete_data(self):
data = self.redis_connection.delete(self.token)
if not data:
raise AuthenticationError({"status: Invalid token"}, code=200, log_error=False)
return data
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.