sql >> Database teknologi >  >> NoSQL >> Redis

Indkapsling af Unicode fra redis

Jeg er ikke sikker på, at der er et problem.

Hvis du fjerner alle .encode('utf8') kalder din kode ind, producerer den en korrekt fil, dvs. filen er den samme som den, der er produceret af din nuværende kode.

>>> 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'])

Dette viser, at nøgler og værdier er UTF8-kodede, derfor .encode('utf8') er ikke påkrævet. Standardkodningen for redis modulet er UTF8. Dette kan ændres ved at sende en kodning ved oprettelse af klienten, f.eks. redis.Redis('localhost', encoding='iso-8859-1') , men det er der ingen grund til.

Hvis du aktiverer svarafkodning med decode_responses=True derefter vil svarene blive konverteret til unicode ved hjælp af klientforbindelsens kodning. Dette betyder blot, at du ikke eksplicit behøver at afkode de returnerede data, redis vil gøre det for dig og give dig en unicode-streng tilbage:

>>> 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'])

Så i dit andet eksempel, hvor du skriver data hentet fra redis til en fil, hvis du aktiverer svarafkodning, skal du åbne outputfilen med den ønskede kodning. Hvis dette er standardkodningen, kan du bare bruge open() . Ellers kan du bruge codecs.open() eller indkode dataene manuelt, før du skriver til filen.

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. MongoDb sum forespørgsel

  2. Hurtigere måde at iterere alle nøgler og værdier i redis db

  3. Kan ikke forbinde Redis Cluster i Elasticache til PHP ved hjælp af phpredis-biblioteket

  4. Slaget om NoSQL-databaserne - Sammenligning af MongoDB og Firebase