Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Enkapsulasi Unicode dari redis

Saya tidak yakin ada masalah.

Jika Anda menghapus semua .encode('utf8') panggilan dalam kode Anda itu menghasilkan file yang benar, yaitu file tersebut sama dengan yang dihasilkan oleh kode Anda saat ini.

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

Ini menunjukkan bahwa kunci dan nilai dikodekan UTF8, oleh karena itu .encode('utf8') tidak diperlukan. Encoding default untuk redis modul adalah UTF8. Ini dapat diubah dengan meneruskan penyandian saat membuat klien, mis. redis.Redis('localhost', encoding='iso-8859-1') , tapi tidak ada alasan untuk itu.

Jika Anda mengaktifkan decoding respons dengan decode_responses=True kemudian tanggapan akan dikonversi ke unicode menggunakan pengkodean koneksi klien. Ini hanya berarti bahwa Anda tidak perlu secara eksplisit mendekode data yang dikembalikan, redis akan melakukannya untuk Anda dan mengembalikan string 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'])

Jadi, dalam contoh kedua Anda di mana Anda menulis data yang diambil dari redis ke file, jika Anda mengaktifkan decoding respons maka Anda perlu membuka file output dengan pengkodean yang diinginkan. Jika ini adalah penyandian default maka Anda bisa menggunakan open() . Jika tidak, Anda dapat menggunakan codecs.open() atau menyandikan data secara manual sebelum menulis ke file.

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. Apakah mungkin untuk memiliki cache VFS Linux dengan sistem file FUSE?

  2. Apakah ada nilai COUNT yang direkomendasikan untuk perintah SCAN / HSCAN di REDIS?

  3. RQ - Kosongkan &Hapus Antrian

  4. Node Js:Pekerjaan redis tidak selesai setelah menyelesaikan tugasnya

  5. Bagaimana cara menonaktifkan kegigihan dengan redis?