The error message 'redis can't save in background fork cannot allocate memory' occurs when Redis faces a shortage of memory to execute its background saving operations. Redis saves data to disk by creating a child process using fork(), which writes the data to disk while Redis serves client requests. This method allows Redis to write to the disk without blocking clients. However, if there isn't enough memory for the fork() system call, Redis won't be able to create the necessary child process for background saving. Consequently, an error message pops up. Running Redis on a device with restricted memory resources or increasing Redis' dataset size without expanding the available memory are the most frequent reasons for this error.
There are several ways to solve the issue:
Increase the available memory: The most effective solution is to expand the memory available to Redis. If Redis runs on low-memory hardware, upgrading hardware or migrating Redis to a server with more memory may help.
Reduce Redis dataset size: If increasing the available memory is impossible, reducing the Redis dataset size could help. You can remove unnecessary keys or configure Redis to use less memory for data storage.
Modify Redis configuration: Disabling background saving by modifying Redis' configuration eliminates the requirement for the fork() system call. However, this increases the risk of data loss in the case of unanticipated shutdowns or crashes.
Use Redis append-only file (AOF) mode: Redis AOF mode is an alternative to RDB snapshots. In AOF mode, Redis writes all changes to a log file instead of performing periodic background saves. This approach eliminates the need for fork() system calls and reduces the risk of data loss.
Dragonfly is fully compatible with the Redis ecosystem and requires no code changes to implement.