Browse Source

Continue functioning even if Redis is down

pull/2/head
Noah Petherbridge 5 years ago
parent
commit
a69e013fb5
1 changed files with 31 additions and 12 deletions
  1. +31
    -12
      rophako/jsondb.py

+ 31
- 12
rophako/jsondb.py View File

@@ -187,23 +187,35 @@ def write_json(path, data):
# Redis Caching Functions #
############################################################################

disable_redis = False
def get_redis():
"""Connect to Redis or return the existing connection."""
global redis_client
if not redis_client:
redis_client = redis.StrictRedis(
host = Config.db.redis_host,
port = Config.db.redis_port,
db = Config.db.redis_db,
)
global disable_redis

if not redis_client and not disable_redis:
try:
redis_client = redis.StrictRedis(
host = Config.db.redis_host,
port = Config.db.redis_port,
db = Config.db.redis_db,
)
redis_client.ping()
except Exception as e:
logger.error("Couldn't connect to Redis; memory caching will be disabled! {}".format(e.message))
redis_client = None
disable_redis = True
return redis_client


def set_cache(key, value, expires=None):
"""Set a key in the Redis cache."""
key = Config.db.redis_prefix + key
client = get_redis()
if not client:
return

try:
client = get_redis()
client.set(key, json.dumps(value))

# Expiration date?
@@ -217,8 +229,11 @@ def get_cache(key):
"""Get a cached item."""
key = Config.db.redis_prefix + key
value = None
client = get_redis()
if not client:
return

try:
client = get_redis()
value = client.get(key)
if value:
value = json.loads(value)
@@ -232,6 +247,8 @@ def del_cache(key):
"""Delete a cached item."""
key = Config.db.redis_prefix + key
client = get_redis()
if not client:
return
client.delete(key)


@@ -243,8 +260,9 @@ def lock_cache(key, timeout=5, expire=20):
The `expire` is how long a lock may exist before it's considered stale.

Returns True on success, None on failure to acquire lock."""
lock_key = key + "_lock"
client = get_redis()
client = get_redis()
if not client:
return

# Take the lock.
lock = client.lock(key, timeout=expire)
@@ -255,5 +273,6 @@ def lock_cache(key, timeout=5, expire=20):

def unlock_cache(lock):
"""Release the lock on a cache key."""
lock.release()
logger.debug("Cache lock released")
if lock:
lock.release()
logger.debug("Cache lock released")

Loading…
Cancel
Save