es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo almacenar el resultado en la caché?

Quiero almacenar el resultado en caché también por un límite de tiempo como 24 horas. ¿Cómo puedo hacerlo? Intenté con lru_cache pero no obtuve el código correcto para hacerlo.

import json
import IndicatorTypes
from OTXv2 import OTXv2
from OTXv2 import INDICATOR_DETAILS

otx = OTXv2("xxxxx65f25729f6ccb41020174c9aeff3bfe43xxxx2eb3b756ae532xxxxxx")
indicator = '45.148.10.241'

indicator_details = otx.get_indicator_details_full(IndicatorTypes.IPv4, indicator)
obj = indicator_details["url_list"]
obj1 = indicator_details["reputation"]
obj2 = indicator_details["general"]
with open('incoming_data.json', 'w') as data_file:
    json.dump(obj, data_file, indent=4)
    json.dump(obj1, data_file, indent=4)
    json.dump(obj2, data_file, indent=4)
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para almacenar el resultado en caché durante un límite de tiempo de 24 horas, puedes utilizar el decorador functools.lru_cache() junto con la biblioteca ttl_cache. La biblioteca ttl_cache permite establecer un tiempo de vida (TTL) para el resultado en caché.

    Aquí tienes un ejemplo de código:

    import json
    import IndicatorTypes
    from OTXv2 import OTXv2
    from OTXv2 import INDICATOR_DETAILS
    from functools import lru_cache
    from ttl_cache import ttl_cache
    
    
    otx = OTXv2("xxxxx65f25729f6ccb41020174c9aeff3bfe43xxxx2eb3b756ae532xxxxxx")
    indicator = '45.148.10.241'
    
    @ttl_cache(maxsize=1024, ttl=86400) # establece el tamaño máximo de la caché y un TTL de 24 horas
    @lru_cache(maxsize=1024)
    def get_indicator_details(indicator):
        indicator_details = otx.get_indicator_details_full(IndicatorTypes.IPv4, indicator)
        obj = indicator_details["url_list"]
        obj1 = indicator_details["reputation"]
        obj2 = indicator_details["general"]
        with open('incoming_data.json', 'w') as data_file:
            json.dump(obj, data_file, indent=4)
            json.dump(obj1, data_file, indent=4)
            json.dump(obj2, data_file, indent=4)
        return indicator_details
    
    indicator_details = get_indicator_details(indicator)
    

    Aquí, la función get_indicator_details() está decorada tanto con ttl_cache como con lru_cache. El decorador ttl_cache establece un tamaño máximo de caché de 1024 entradas y un TTL de 86400 segundos (es decir, 24 horas), mientras que el decorador lru_cache almacena el resultado en la memoria para su recuperación más rápida.
    Cuando se llama a la función con el mismo valor de indicator, la función decorada buscará primero en la caché una entrada coincidente y, si se encuentra, devolverá el resultado en caché. Si no se encuentra, ejecutará la función y almacenará el resultado en la caché con el TTL especificado.

    Puedes ajustar los parámetros de tamaño máximo de caché y TTL según tus necesidades.

Comments are closed.