Sam serwer Redis przechowuje wszystkie dane jako obiekty binarne, więc nie jest zależny od kodowania. Serwer będzie po prostu przechowywać to, co jest wysyłane przez klienta (w tym znaki UTF-8).
Oto kilka eksperymentów:
$ echo téléphone | hexdump -C
00000000 74 c3 a9 6c c3 a9 70 68 6f 6e 65 0a |t..l..phone.|
c3a9 jest reprezentacją znaku 'é'.
$ redis-cli
> set t téléphone
OK
> get t
"t\xc3\xa9l\xc3\xa9phone"
W rzeczywistości dane są poprawnie przechowywane na serwerze Redis. Jednak po uruchomieniu w terminalu klient Redis interpretuje dane wyjściowe i stosuje funkcję sdscatrepr do przekształcania znaków niedrukowalnych (których definicja zależy od ustawień regionalnych i może zostać zerwana dla znaków wielobajtowych).
Prostym obejściem tego problemu jest uruchomienie redis-cli z opcją „surowe”:
$ redis-cli --raw
> get t
téléphone
Twoja własna aplikacja prawdopodobnie użyje jednej z bibliotek klienckich, a nie redis-cli, więc w praktyce nie powinno to stanowić problemu.