109 lines
3 KiB
Python
109 lines
3 KiB
Python
import os
|
|
from typing import Any, Optional
|
|
import redis
|
|
from redis.exceptions import RedisError
|
|
|
|
|
|
class RedisService:
|
|
def __init__(self):
|
|
self.redis_host = os.getenv("REDIS_HOST", "localhost")
|
|
self.redis_port = int(os.getenv("REDIS_PORT", "6379"))
|
|
self.redis_db = int(os.getenv("REDIS_DB", "0"))
|
|
self.redis_password = os.getenv("REDIS_PASSWORD")
|
|
self.client = self._create_client()
|
|
|
|
def _create_client(self) -> redis.Redis:
|
|
return redis.Redis(
|
|
host=self.redis_host,
|
|
port=self.redis_port,
|
|
db=self.redis_db,
|
|
password=self.redis_password,
|
|
decode_responses=True,
|
|
)
|
|
|
|
def set(self, key: str, value: Any, expire: Optional[int] = None) -> bool:
|
|
try:
|
|
return self.client.set(key, value, ex=expire)
|
|
except RedisError:
|
|
return False
|
|
|
|
def get(self, key: str) -> Optional[str]:
|
|
try:
|
|
return self.client.get(key)
|
|
except RedisError:
|
|
return None
|
|
|
|
def delete(self, key: str) -> bool:
|
|
try:
|
|
return bool(self.client.delete(key))
|
|
except RedisError:
|
|
return False
|
|
|
|
def exists(self, key: str) -> bool:
|
|
try:
|
|
return bool(self.client.exists(key))
|
|
except RedisError:
|
|
return False
|
|
|
|
def set_hash(self, name: str, mapping: dict) -> bool:
|
|
try:
|
|
return self.client.hmset(name, mapping)
|
|
except RedisError:
|
|
return False
|
|
|
|
def get_hash(self, name: str) -> Optional[dict]:
|
|
try:
|
|
return self.client.hgetall(name)
|
|
except RedisError:
|
|
return None
|
|
|
|
def delete_hash(self, name: str, *fields: str) -> int:
|
|
try:
|
|
return self.client.hdel(name, *fields)
|
|
except RedisError:
|
|
return 0
|
|
|
|
def set_list(self, name: str, values: list) -> bool:
|
|
try:
|
|
self.client.delete(name)
|
|
if values:
|
|
self.client.rpush(name, *values)
|
|
return True
|
|
except RedisError:
|
|
return False
|
|
|
|
def get_list(self, name: str, start: int = 0, end: int = -1) -> Optional[list]:
|
|
try:
|
|
return self.client.lrange(name, start, end)
|
|
except RedisError:
|
|
return None
|
|
|
|
def add_to_set(self, name: str, *values: str) -> int:
|
|
try:
|
|
return self.client.sadd(name, *values)
|
|
except RedisError:
|
|
return 0
|
|
|
|
def get_set(self, name: str) -> Optional[set]:
|
|
try:
|
|
return self.client.smembers(name)
|
|
except RedisError:
|
|
return None
|
|
|
|
def remove_from_set(self, name: str, *values: str) -> int:
|
|
try:
|
|
return self.client.srem(name, *values)
|
|
except RedisError:
|
|
return 0
|
|
|
|
def clear(self) -> bool:
|
|
try:
|
|
return self.client.flushdb()
|
|
except RedisError:
|
|
return False
|
|
|
|
def close(self):
|
|
try:
|
|
self.client.close()
|
|
except RedisError:
|
|
pass
|