I'm using it from C++ via hiredis - it seems to be the officially blessed C interface. It's a bit primitive compared to e.g. the Lua bindings that I also played around with, but it works and is simple enough to use.
As for data being 100% data persistent... The redis docs mention something about an append-only file mechanism that can help here, but that's about as much as I know about that.
Originally, I was also going to mention Berkeley DB, but decided against it, since I had never used it for anything - I believe that it doesn't require a separate process, but I might be wrong. Also, a quick Google showed that it's now an Oracle-product (which I don't remember it being previously).
Anyway, perhaps somebody here knows of a semi-competent, simple-to-use persistent in-process key-value store with a C/C++ API... I might be interested in that, too. :-)