Могу ли я сохранить изменения в значении до истечения срока действия ключа redis

Я не смог найти лучшего решения. У меня есть идентификаторы и ранги в моем Redis. Возможно ли сохранить измененные ранги в базе данных до истечения срока действия ключа Redis? Могу ли я запустить какую-нибудь функцию до истечения срока действия ключа на x времени раньше

Вы можете использовать TTL (time to live) из redis, который определяет, сколько времени осталось до истечения срока действия ключа и запускает поток для сохранения вашего ранга в БД:

Предположим, что у вас есть ключ rank, значение которого 30 в redis, тогда:

import redis
from threading import Timer

# initializing the Redis client first
r = redis.StrictRedis(host='localhost', port=6379, db=0)

# simulate saving data to the database
def save_to_database(key, value):
    print(f"Saving key: {key}, value: {value} to database")
    # replace with actual database save logic
    # Example : db.save({"key": key, "rank": value})

# function to monitor and save data
def monitor_and_save(key):
    ttl = r.ttl(key)  # get the ttime to live (TTL) of the key
    if ttl > 30:
        # schedule the save operation to run 30 seconds before expiration
        delay = ttl - 30
        print(f"Scheduling save operation for key: {key} in {delay} seconds")
        Timer(delay, lambda: save_to_database(key, r.get(key).decode())).start()
    else:
        # if TTL is less than 30 seconds save immediately
        print(f"Key: {key} is about to expire, saving immediately")
        save_to_database(key, r.get(key).decode())

# for example 
# set a key with a 60 second expiration time
r.set("rank", 3, ex=60)

# monitor and save the key
monitor_and_save("rank")
Вернуться на верх