Você tem basicamente duas estratégias:
-
você pode serializar seus objetos complexos e armazená-los como strings. Sugerimos json ou msgpack para o formato de serialização. Isso é fácil de manipular na maioria das linguagens do lado do cliente. Se o acesso do lado do servidor for necessário, um script Lua do lado do servidor pode codificar/decodificar facilmente esses objetos, pois o Redis é compilado com suporte a msgpack e json para Lua.
-
você pode dividir seus objetos em chaves diferentes. Ao invés de armazenar user:id e uma estrutura de dados complexa para este id, você pode armazenar várias chaves como user:id, user:id:address_list, user:id:document_lists, etc... Se precisar de atomicidade, pipelining MULTI/ Blocos EXEC podem ser usados para garantir a consistência dos dados e agregar as viagens de ida e volta.
Veja um exemplo simples nesta resposta:
O comando LPUSH funcionará em um registro que foi inicializado de JSON?
Por fim, o Redis não é um banco de dados orientado a documentos. Se você realmente tem muitos documentos complexos, talvez possa ser melhor atendido por soluções como MongoDB, ArangoDB, CouchDB, Couchbase, etc...