Задать вопрос
@testopikachu

Почему в laravel в связке с redis может сбрасываться Cache::forever()?

Привет, у меня laravel 5.7 и redis 3.2.12
Переодически, примерно раз в сутки сбрасывается кеш, который был установлен навсегда - Cache::forever('key', 'val');

Я смог нагуглить, что когда у redis кончается память, то он выкидывает старые записи, но после установки maxmemory 1000mb ситуация не изменилась. Да и там не так много информации, даже 10mb должно было хватать.

Подскажите, куда копать?

Вот конфиг laravel:
CACHE_DRIVER=redis
SESSION_DRIVER=redis
SESSION_LIFETIME=120
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379


А вот конфиг redis, стандартный из centos 7, кроме maxmemory 1000mb:
bind 127.0.0.1
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /var/log/redis/redis.log
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/lib/redis
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
maxmemory 1000mb
maxmemory-policy allkeys-lru
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
  • Вопрос задан
  • 405 просмотров
Подписаться 3 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Стоит заметить, что кеш сам по себе не может служить в роли постоянного хранилища. И forever() говорит лишь запомнить данные на максимальное количество времени.

Так же стоит посмотреть ваш скрипт развертывания приложения, возможно в нем выполняется команда \Cache::flush(), которая чистит весь кеш. php artisan cache:reset - выполняет тоже самое действие.

В конфигах есть вот такая вот строчка, которая позволит ограничить область действия ресета кеша "своей" базой данных.

А чтобы попытаться получить хоть какую-то постоянность хранилища - пользуйтесь \Redis

ps: ответить более подробно довольно сложно, потому что неизвестно что происходит в вашем приложении. Может ваш код сам затирает данные из-за логической ошибки и вы ставите ваш же ключ \Cache::forever('key', null);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы