Redis is often referred to as a data structures server. Redis provides access to mutable data structures via a set of commands, which are sent using a server-client model with TCP sockets and a simple protocol. So different processes can query and modify the same data structures in a shared way.
Data structures implemented into Redis have a few special properties:
- Redis cares to store them on disk, even if they are always served and modified into the server memory. This means that it is fast, but that is also non-volatile.
- Implementation of data structures stress on memory efficiency, so data structures inside it will likely use less memory compared to the same data structure modelled using a high-level programming language.
- It offers a number of features that are natural to find in a database, like replication, tunable levels of durability, cluster, high availability.
Another good example is to think of Redis as a more complex version of Memcached, where the operations are not just SETs and GETs, but operations to work with complex data types like Lists, Sets, ordered data structures, and so forth.
- Redis no longer panics when you send data to a replica-mode connection that is in MONITOR or SYNC mode.
- Fixes to certain sorted set edge cases. You are unlikely to ever notice those issues, but now it is more correct.
- Certain BSD variants now are better supported: build & register logging on crash.
- The networking core now recovers if an IPv6 address is listed in bind but is actually not able to work because there is no such protocol in the system.
- redis-cli cluster mode improved in many ways. Especially the fix subcommand work was enhanced to cover other edge cases that were still not covered after the work done for Redis 5.
- MEMORY USAGE is now more accurate.
- DEBUG DIGEST-VALUE added in case you want to make sure a given set of keys (and not the whole DB) are excatly the same between two instances.
- Fix a potential crash in the networking code related to recent changes to the way the reply is consumed.
- Reject EXEC containing write commands against an instance that changed role from master to replica during our transaction.
- Fix a crash in KEYS and other commands using pattern matching, in an edge case where the pattern contains a zero byte.
- Fix eviction during AOF loading due to maxmemory triggered by commands executed in loading state.
- asyncCloseClientOnOutputBufferLimitReached(): don’t free fake clients.
- Don’t call sdscmp() with shared.maxstring or shared.minstring
- Fix stringmatchlen() read past buffer bug.
- Merge pull request #5569 from maximebedard/backport-4497
- add linkClient(): adds the client and caches the list node.
- networking: optimize unlinkClient() in freeClient()
- When replica kills a pending RDB save during SYNC, log it.
- Move child termination to readSyncBulkPayload
- Prevent RDB autosave from overwriting full resync results
- aof.c: improve indentation and change warning message.
- AOF: discard if we lost EXEC when loading aof
- Fix AOF comment to report the current behavior.