Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Đóng gói Unicode từ redis

Tôi không chắc rằng có sự cố.

Nếu bạn xóa tất cả .encode('utf8') lệnh gọi trong mã của bạn, nó tạo ra một tệp chính xác, tức là tệp giống với tệp được tạo bởi mã hiện tại của bạn.

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

Điều này cho thấy rằng các khóa và giá trị được mã hóa UTF8, do đó .encode('utf8') không được yêu cầu. Mã hóa mặc định cho redis mô-đun là UTF8. Điều này có thể được thay đổi bằng cách chuyển một mã hóa khi tạo ứng dụng khách, ví dụ:redis.Redis('localhost', encoding='iso-8859-1') , nhưng không có lý do gì để.

Nếu bạn bật giải mã phản hồi với decode_responses=True sau đó các phản hồi sẽ được chuyển đổi thành unicode bằng cách sử dụng mã hóa của kết nối máy khách. Điều này chỉ có nghĩa là bạn không cần phải giải mã dữ liệu trả về một cách rõ ràng, redis sẽ làm điều đó cho bạn và trả lại cho bạn một chuỗi 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'])

Vì vậy, trong ví dụ thứ hai, nơi bạn ghi dữ liệu được truy xuất từ ​​redis vào một tệp, nếu bạn bật giải mã phản hồi thì bạn cần mở tệp đầu ra với mã hóa mong muốn. Nếu đây là mã hóa mặc định thì bạn chỉ có thể sử dụng open() . Nếu không, bạn có thể sử dụng codecs.open() hoặc mã hóa dữ liệu theo cách thủ công trước khi ghi vào tệp.

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. Làm cách nào để dừng redis-server?

  2. Cấu hình sao chép Redis

  3. Redis Cross Slot lỗi

  4. Lỗi trạng thái phiên Azure Redis Hết thời gian chờ thực hiện EVAL, inst:1, queue:2

  5. Số lần quét trên Redis:Làm thế nào để buộc SCAN trả lại tất cả các phím khớp với một mẫu?