さるへい備忘録

さるへいのやったことを綴っているブログです。基本的にテクノロジーの話題です。

PythonでLRUキャッシュを使って負荷軽減と高速化

皆さん、PythonにもPHPのOPCacheのようなキャッシュ機能があったのをご存知ですか?
そんなLRUCacheの紹介をしようと思います。こちらはPython3.2以降で使える機能です。

docs.python.org

LRUCacheは

LRU (least recently used) cache という技術をつかっています。具体的には未使用な期間が長いキャッシュを破棄していくアルゴリズムですね。
とはいえ使う上でそこまで気にしなくて良い話です。

使い方は以下のようになっております。

@lru_cache(maxsize=32)
def get_pep(plus_1, plus_2):
    return plus_1 + plus_2

デコレータとして利用すると良いようです。
上記使い方を見て分かる通り、関数の返り値をキャッシュします。

maxsizeというのは、LRUでキャッシュされる回数になります。つまり、上記だと32回キャッシュされたら、最も使われていないものから削除されていきます。
キャッシュを削除するための機能として、 cache_clear() も提供されています。こちらを用いて時限式でキャッシュを削除していくことも可能です。

redisなどと違って、10分だけキャッシュするみたいな仕組みは自分で作らないといけません。そこを鑑みてもredisよりも導入コストは小さいかなと思っています。
通信も発生しないですしこちらのほうが高速なイメージが強いですね。