Redis
Redis can be practically considered as a new standard for the market when it comes to cache. Redis is effectively a database key/value, but because of stupendous performance, it has ended up being adopted as a caching tool.
The Redis documentation is very good and easy to understand; even a simple concept is equipped with many features such as pub/sub and queues.
Because of its convenience, flexibility, and internal working model, Redis has practically relegated all other caching systems to the condition of the legacy project.
Control of the Redis memory usage is very powerful. Most cache systems are very efficient to write and read data from memory, but not to purge the data and return memory to use. Redis again stands out in this respect, having good performance to return memory for use after purging data.
Unlike Memcached, Redis has native and extremely configurable persistence. Redis has two types of storage form, which are RDB and AOF.
The RDB model makes data persistent by using snapshots. This means that, within a configurable period of time, the information in memory is persisted on disk. The following is an example of a Redis configuration file using the RDB model of persistence:
save 60 1000 stop-writes-on-bgsave-error no rdbcompression yes dbfilename dump.rdb
The settings are simple and intuitive. First, we have to save the configuration itself:
save 60 1000
The preceding line indicates that Redis should do the snapshot to persist the data home for 60 seconds, if at least 1,000 keys are changed. Changing the line to something like:
save 900 1
Is the same as saying to Redis persist a snapshot every 15 minutes, if at least one key is modified.
The second line of our sample configuration is as follows:
stop-writes-on-bgsave-error no
It is telling Redis, even in case of error, to move on with the process and persistence attempts. The default value of this setting is yes, but if the development team decided to monitor the persistence of Redis the best option is no.
Usually, Redis compresses the data to be persisted to save disk usage; this setting is:
rdbcompression yes
But if the performance is critical, with respect to the cache, this value can be modified to no. But the amount of disk consumed by Redis will be much higher.
Finally, we have the filename which will be persisted data by Redis:
dbfilename dump.rdb
This name is the default name in the configuration file but can be modified without major concerns.
The other model is the persistence of AOF. This model is safer with respect to keeping the recorded data. However, there is a higher cost performance for Redis. Under a configuration template for AOF:
appendonly no appendfsync everysec
The first line of this example presents the command appendonly. This command indicates whether the AOF persistence mode must be active or not.
In the second line of the sample configuration we have:
appendfsync everysec
The policy appendfsync active fsync tells the operating system to perform persistence in the fastest possible disk and not to buffer. The appendfsync has three configuration modes—no, everysec, and always, as shown in the following:
- no: Disables appendfsync
- everysec: This indicates that the storage of data should be performed as quickly as possible; usually this process is delayed by one second
- always: This indicates an even faster persistence process, preferably immediately
You may be wondering why we are seeing this part of Redis persistence. The motivation is simple; we must know exactly what power we gain from the persistent cache and how we can apply it.
Some development teams are also using Redis as a message broker. The tool is very fast in this way, but definitely not the most appropriate for this task, due to the fact that there are no transactions in the delivery of messages. With so many, messages between microservices could be lost. The situation where Redis expertly performs its function is as a cache.