Help us understand the problem. What is going on with this article?

Re:dashのキャッシュデータを削除する

More than 3 years have passed since last update.

最近、Re:dashをちょくちょく使っています。
キャッシュ関連で気になったことがあったのでメモ。

Re:dashはクエリを毎回発行しなくてもいいように、結果をローカルのPostgreSQLにキャッシュして利用している。
長期運用してたり、リアルタイムにクエリを発行するようなSQLを書いてるとキャッシュが溜まっていってしまい、ディスクを圧迫していったので、この辺の問題を解決したいなと思って調べたら環境変数で設定できるようでした。

普段はdockerで立ち上げてるので、docker-composeに環境変数を書いていきます

docker-compose.ymlは公式のものからREDASH_QUERY_RESULT_CLEANUPの3つを追記しただけです。
ここで気をつけないといけないのは、実際にキャッシュを削除しているのはworkerなので、workerのところに書いてあげないといけません。serverのところに書いちゃうと動きません。

  worker:
    build: .
    command: scheduler
    environment:
      PYTHONUNBUFFERED: 0
      REDASH_LOG_LEVEL: "INFO"
      REDASH_REDIS_URL: "redis://redis:6379/0"
      REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres"
      QUEUES: "queries,scheduled_queries,celery"
      WORKERS_COUNT: 2
      REDASH_QUERY_RESULTS_CLEANUP_ENABLED: "true"
      REDASH_QUERY_RESULTS_CLEANUP_COUNT: 150
      REDASH_QUERY_RESULTS_CLEANUP_MAX_AGE: 1
  • REDASH_QUERY_RESULTS_CLEANUP_ENABLED
    • キャッシュの削除を有効にするかどうか設定(defaultはfalse)
  • REDASH_QUERY_RESULTS_CLEANUP_COUNT
    • 古いキャッシュを何件ずつ削除するかを設定
  • REDASH_QUERY_RESULTS_CLEANUP_MAX_AGE
    • 過去何日経ったキャッシュを削除するかを設定

今回、僕がdocker-composeに書いた設定だと
1日前のキャッシュを150件ずつ削除するようになっています。

実際にどこで消しているのか?

worker.py - GetRedash/redash でworkerが5分置きにredash.tasks.cleanup_query_resultsを叩くようになっている。
つまり、1日前のキャッシュを5分おきに150件消すようになっていて
10分で300件消すことになる。

で、実際のタスクはここ cleanup_query_results() - GetRedash/redash

cleanup_query_resultの中身まではまだ読めてないけど、
5分おきにworkerがキャッシュを消してるのが分かったので良かった。

参考

328
フロントエンド初心者
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away