Магазин объектов Python с Redis - PullRequest
0 голосов
/ 20 января 2019

Только начал изучать Redis.Исходя из опыта EhCache, в Redis меня мало что смущает.Это то, чего я хочу добиться:

import redis


class User:

    def __init__(self, idd, name):
        self.id = idd
        self.name = name


cache = redis.Redis(host='localhost', port=6379, db=0)
#cache = redis.StrictRedis(host="localhost", port=6379, charset="utf-8", decode_responses=True)

user1 = User(1, 'john')
user2 = User(2, 'jack')

users_dict = {}
users_dict['1'] = user1
users_dict['2'] = user2

print(users_dict)

if not cache.exists('users'):
    cache.set('users', users_dict)

users_dict_retrieved = cache.get('users')
print(users_dict_retrieved)

print(users_dict_retrieved.get('1').name)

. В качестве вывода нужно просто напечатать john.Вот вывод, который я получаю:

{'1': <__main__.User object at 0x103a71710>, '2': <__main__.User object at 0x103a71780>}
b"{'1': <__main__.User object at 0x103a71710>, '2': <__main__.User object at 0x103a71780>}"
Traceback (most recent call last):
  File "/Users/rishi/code/test.py", line 34, in <module>
    print(users_dict_retrieved.get('1').name)
AttributeError: 'bytes' object has no attribute 'get'

Но я получаю AttributeError: 'bytes' object has no attribute 'get'.Я понимаю, что это потому, что когда объект извлекается, он находится в байтовой форме.Вместо этого я попытался использовать cache = redis.StrictRedis(host="localhost", port=6379, charset="utf-8", decode_responses=True), но затем преобразовал представление объектов в строку.Я также провел некоторые эксперименты с hset и hget, но это тоже пошло не так.Любой простой способ решить это?Или я должен записать объект в строку для хранения и затем использовать строку для объекта после того, как я получу?

1 Ответ

0 голосов
/ 22 января 2019

Вы должны передать в ваш список объект dict вместо объекта User.Пример:

class User:

    def __init__(self, idd, name):
        self.id = idd
        self.name = name

    def to_dict(self):
        return self.__dict__
""" rest of code """

users_dict = {}
users_dict['1'] = user1.to_dict()
users_dict['2'] = user2.to_dict()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...