It would help if you could push down filter predicates to run locally inside Redis, but at that point you're already more than a key-value store. I wonder if you could do this using Lua?
But the core idea of pushing predicates to edges seems reasonable. At one point, I built this sql engine that coordinated queries and pushed down queries to the edges. It assumed that each edge store implemented an iterator over all its values, with optional filtering and sorting (if not implemented on the edge store, then the engine/client would filter/sort). It works great, but I haven't yet published it for other reasons.
Common operations like networking, transaction management and even index walks (except the key comparisons) are already compiled to native code, so you don't need to go all in. You just optimize the stuff that needs it.
I'm curious though - databases typically store data in B-Trees which are blocks of equal size which works great for block storage. So isn't "block storage" essentially a key value store, where the key is the block number and the value is the block itself? That I think is the proper way of using a key/value store as the database back-end. (And that's what I did in my SQLite/Redis experiment, BTW)