Только начал изучать 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
, но это тоже пошло не так.Любой простой способ решить это?Или я должен записать объект в строку для хранения и затем использовать строку для объекта после того, как я получу?