Алгоритм кэширования для клиентской оболочки веб-API

Я разработал клиентскую библиотеку Python, которая представляет собой клиентскую оболочку для веб-API. особенностью будет механизм локального кэширования: это позволит сэкономить время и пропускную способность, когда клиенты библиотеки вызывают один и тот же запрос в веб-API в разное время.

У меня очень мало требований

  1. кеш должен быть разработан (без внешних библиотек) и запущен Python 2.6/2.7 envs
  2. библиотека должна предоставлять единый интерфейс, чтобы можно было использовать внешние механизмы кэширования (например, memcached) обертки, которые будут внедряться зависимостями
  3. кеш должен быть потокобезопасным
  4. Кэшируемое содержимое будет полезной нагрузкой JSON ответов веб-API.
  5. данные, предоставляемые веб-API, меняются в разное время: например, наблюдаемая в настоящее время погода над городом может меняться каждый час, а прогноз погоды на 15 дней может меняться каждые 5 дней или около того.

Какой самый простой алгоритм можно использовать?

Я думал об алгоритме LRU (наименее недавно использованный), но я думаю, что можно оценить и другие альтернативы - я совсем не эксперт в кэшах!


person csparpa    schedule 03.12.2013    source источник
comment
с python 3.2 уже есть встроенный кэш lru с семантикой декоратора (см. lru_cache )   -  person behzad.nouri    schedule 03.12.2013
comment
К сожалению, библиотека поддерживает только Python 2.6/2.7... но все равно спасибо, добавлю в требования :)   -  person csparpa    schedule 03.12.2013
comment
Самым простым было бы просто указать время истечения срока действия для каждой кэшированной записи. Зачем вам самое простое? LRU достаточно прост :)   -  person chill    schedule 03.12.2013
comment
Будучи абсолютно тупым в отношении кешей, я думаю, что возможны и многие другие ;)   -  person csparpa    schedule 03.12.2013


Ответы (1)


Вы можете просто скопировать и адаптировать исходный код из lru_cache (см. http://hg.python.org/cpython/file/default/Lib/functools.py).

person aquavitae    schedule 03.12.2013