LoginSignup
14
7

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-04-26

最近、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がキャッシュを消してるのが分かったので良かった。

参考

14
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
7