Memcached-MemcacheIllegalInputError - Значения данных должны быть бинарными: кодек 'ascii' не может кодировать символы в позиции 2-5: ordinal not in range(128

Я провожу некоторые тесты с memcached в моем проекте django, чтобы понять, могу ли я получить от него пользу. Но я застрял на кэшировании символов юникода. Я прочитал много статей об этом, но так и не смог понять, как мне заставить его работать. Вот мой блок кода:

def cache(request):
client = Client("127.0.0.1:11211")
cache_key = '123' # needs to be unique
cache_time = 86400 # time in seconds for cache to be valid

data = client.get(cache_key) # returns None if no key-value pair
if not data:
    print("setting cache")
    
    #data contains unicode characters - Throws an error
    datafromdb = Subject.objects.all()
    #unicode characters - Throws an error
    unicodestr="abçüıö"
    #encoded unicode characters - Working fine
    encodedunicodestr=str.encode("abçüıö")

    client.set(cache_key,unicodestr , cache_time)
else:
    print("getting from cache")
return HttpResponse(data)

Если я использую str.encode для текстовых значений, то все работает нормально и данные можно кэшировать.

Но если я получаю данные из базы данных (postgres) и эти данные содержат юникод, memcached выкидывает ошибку.

Мне интересно, есть ли способ использовать str.unicode в моих наборах/списках и т.д., которые возвращаются из базы данных, или что-то еще, может быть.

Вернуться на верх