For example if you have a struct called User with .Name, .Id, and .Email members, then (in libredis) you would call r.HSet(u.Id, "name", u.Name) to set the name. Alternatively there is HMSet where you could pass all members in a single call. Provided your structs aren't very large this would be more efficient.
You would change the second two arguments for each member. You would use r.HgetAll(Id) ( see docs: https://godoc.org/github.com/therealbill/libredis/client#Redis.HGetAll) to get a map[string]string response which you would the use to recreate/set your struct. If your structs are more complicated than that you may have to do some indexing and referencing.
As far as converting to byte arrays, libredis actually expects strings, though not all client libraries do. I'm mulling around adding calls which take []byte arrays but I'll have to validate they offer enough of a performance benefit for the added API bulk to justify them.
Cheers,
Bill