How to store a byte array to StackExchange.Redis?

Tadej picture Tadej · Jun 6, 2018 · Viewed 7k times · Source

I want to use the MessagePack, ZeroFormatter or protobuf-net to serialize/deserialize a generic list and store it in Redis using the stackexchange.redis client.

Now I'm storing a JSON string with the StringSetAsync() method. But I can't find any documentation on how to store a byte[] in Redis.

Answer

Tomasz Poradowski picture Tomasz Poradowski · Jun 6, 2018

StackExchange.Redis uses RedisValue to represent different types of values stored in Redis and so it provides implicit conversion operators (for byte[] among others). Please read StackExchange.Redis / Basic Usage / Values carefully as in the third sentence of that chapter you can find

However, in addition to text and binary contents, ...

which basically means that you can use IDatabase.StringSet() to store a basic value (which Redis generally thinks of as a "string" as there are other types like sets, hashes, and so on) - be it string or an array of bytes.

        using (var multiplexer = ConnectionMultiplexer.Connect("localhost:6379"))
        {
            byte[] byteArray = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
            var db = multiplexer.GetDatabase();
            db.StringSet("bytearray", byteArray);
        }