Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Enkapsulacja Unicode z redis

Nie jestem pewien, czy jest jakiś problem.

Jeśli usuniesz wszystkie .encode('utf8') wywołania w twoim kodzie, tworzy poprawny plik, tj. plik jest taki sam, jak ten utworzony przez twój bieżący kod.

>>> r_server = redis.Redis('localhost')
>>> r_server.keys()
[]
>>> r_server.sadd(u'Hauptstädte', u'東京', u'Godthåb',u'Москва')
3
>>> r_server.keys()
['Hauptst\xc3\xa4dte']
>>> r_server.smembers(u'Hauptstädte')
set(['Godth\xc3\xa5b', '\xd0\x9c\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0', '\xe6\x9d\xb1\xe4\xba\xac'])

To pokazuje, że klucze i wartości są zakodowane w UTF8, dlatego .encode('utf8') nie jest wymagany. Domyślne kodowanie dla redis moduł to UTF8. Można to zmienić, przekazując kodowanie podczas tworzenia klienta, np. redis.Redis('localhost', encoding='iso-8859-1') , ale nie ma powodu.

Jeśli włączysz dekodowanie odpowiedzi za pomocą decode_responses=True wtedy odpowiedzi zostaną przekonwertowane na Unicode przy użyciu kodowania połączenia klienta. Oznacza to po prostu, że nie musisz jawnie dekodować zwróconych danych, redis zrobi to za Ciebie i zwróci ciąg znaków Unicode:

>>> r_server = redis.Redis('localhost', decode_responses=True)
>>> r_server.keys()
[u'Hauptst\xe4dte']
>>> r_server.smembers(u'Hauptstädte')
set([u'Godth\xe5b', u'\u041c\u043e\u0441\u043a\u0432\u0430', u'\u6771\u4eac'])

Tak więc w drugim przykładzie, w którym zapisujesz dane pobrane z redis do pliku, jeśli włączysz dekodowanie odpowiedzi, musisz otworzyć plik wyjściowy z żądanym kodowaniem. Jeśli jest to domyślne kodowanie, możesz po prostu użyć open() . W przeciwnym razie możesz użyć codecs.open() lub ręcznie zakoduj dane przed zapisaniem do pliku.

import codecs

cities_tag = u'Hauptstädte'
with codecs.open('capitals.txt', 'w', encoding='utf8') as f:
    while r_server.scard(cities_tag) != 0:
        city = r_server.srandmember(cities_tag)
        f.write(city + '\n')
        r_server.srem(cities_tag, city)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis:Jak przeanalizować wynik listy

  2. ServiceStack.Redis:nie można połączyć:sPort:50071

  3. Pierwsze kroki z Redis

  4. Dokładność polecenia redis dbsize

  5. Wyszukiwanie w wartościach redis db