Избавление от файлов temp-xxxx.rdb

#git #redis

#git #redis

Вопрос:

При запуске redis из каталога с a redis.conf , который включает:

 save 60 10000
dir ./
  

он сохраняет временный temp-1234.rdb (с постоянно меняющимся номером), чтобы сохранить постоянство. Проблема в том, что я запускаю redis-server из своего репозитория git, и эти временные файлы генерируются там и отображаются как неотслеживаемые.

Есть ли способ помешать redis генерировать их (или генерировать их в другом месте)?

Или я должен просто добавить их в .gitignore ?

Ответ №1:

Вы можете изменить значение по умолчанию dir ./ (текущий рабочий каталог) redis.conf где-нибудь за пределами вашего репозитория git.

 # For default save/load DB in/from the working directory
# Note that you must specify a directory not a file name.
#dir ./
dir /home/octopus/redis_server/
  

Комментарии:

1. вы знаете, принимает ли он ~ вместо жестко заданного начального пути?

Ответ №2:

Вы можете изменить свою стратегию сохранения Redis, настроив файл .conf. но temp-**.rdb всегда будет находиться в том же каталоге, что и ./ по умолчанию.

числовой ** указывает pid, который принадлежит процессу, разветвленному сервером redis для сохранения базы данных на диске, после завершения работы выполняется атомарное переименование. он существует некоторое время со старым файлом rdb.

следует ли вам добавлять их в .gitignore, зависит от вашей возможности при выполнении «git add **». это может быть включено, когда bgSaving работает только сейчас. Конечно, вы могли бы создать такое правило без вреда, только если вы гарантируете, что оно исключает другие обычные файлы.

найдите rdb.c в каталоге redis src:

строка «snprintf(tmpfile,256,»temp-%d.rdb», (int) getpid());»

  /* Save the DB on disk. Return REDIS_ERR on error, REDIS_OK on success */
int rdbSave(char *filename) {
    dictIterator *di = NULL;
    dictEntry *de;
    char tmpfile[256];
    char magic[10];
    int j;
    long long now = mstime();
    FILE *fp;
    rio rdb;
    uint64_t cksum;

    snprintf(tmpfile,256,"temp-%d.rdb", (int) getpid());
    fp = fopen(tmpfile,"w");
    if (!fp) {
        redisLog(REDIS_WARNING, "Failed opening .rdb for saving: %s",
            strerror(errno));
        return REDIS_ERR;
    }