The problem is: when you are mutating the structures as part of the script, and you are accessing the
results of those mutations, you can't just "apply them at the successful termination of the script". The successful termination
requires that the mutations be visible - aka the mutations already applied.
In a relational database this isn't normally a big deal, because the structures themselves (rows and indexes) are already versioned, and most rows are of a relatively-small size. So rows typically work well for intent/write-ahead logs, old/new version logs, etc. But with Redis, operations aren't just on a "row", it's on a structure, and that structure can be gigabytes in size (I had a 30 gigabyte ZSET about 4 1/2 years ago, that was no fun during snapshotting, let me tell you).