ADR-018: Caching
Status
Accepted
Context
Efficient caching is important for performance and scalability. Smarter currently implements its own function results caching using from smarter.lib.cache import cache_results. This approach focuses on caching the results of function calls rather than traditional object or instance caching.
Decision
The preferred methodology for caching in this project is to use cache_results for function result caching. Contributors should always attempt to use this approach for caching function outputs. Example:
from smarter.lib.cache import cache_results
@cache_results(timeout=3600, logging_enabled=True)
def expensive_function(args):
# hard-to-do computation
return result
PENDING: - cache_results should be moved into its own independently managed PyPi package. - This is not a traditional “object caching” solution; it only covers function results, not class instances. This limitation needs to be addressed.
Alternatives Considered
Implementing traditional object or instance caching.
Using third-party caching libraries for broader caching needs.
Consequences
Positive: - Provides a simple and consistent approach to function result caching. - Improves performance for repeated function calls.
Negative: - Does not cover object or class instance caching. - Requires future work to address broader caching needs.