A teammate introduced me to Redis at a prior job, and ever since, I’ve impressed with it. For those not familiar with it, it’s a NoSQL, in-memory database which stores a variety of data types from simple strings all the way to sorted lists and hashes, which nevertheless has a solid replication and back-up story.
In any case, as you walk through the tutorial, you notice the convention is for keys to be separated by colons, for example: foo:bar:baz
. You also see that nearly every command expects to be given a key to work with. If you want to set and then retrieve a value, you might use:
> SET foo:bar:baz "some value to store"
OK
> GET foo:bar:baz
"some value to store"
Great. At this point, you might want to fetch or delete all of the values pertaining to the whole “bar” sub-tree. Perhaps, you’d expect it to work something like this:
> GET foo:bar:*
> DEL foo:bar:*
Well… too bad; it doesn’t work like that. The only command which accepts a wildcard is the KEYS
command, and it only returns the keys which match the given pattern: not the data. Without getting into too much detail, there are legitimate performance reasons not to, but it was something of a surprise to me to find out.
However, all is not lost. Redis does support a Hash data structure which allows accessing some or all properties related to a specific key. Along with this data structure are commands both to manipulate individual properties along with the entire set.