我手头有个复杂的字典,需要保存在 redis 中,例如:
appinfo = {
'a': {'172.25.53.12': {'olversion': u'111', 'rb1': u'222', 'rb2': u'333'}},
'c': {'172.25.53.14': {'olversion': u'111', 'rb1': u'222', 'rb2': u'333'}},
'b': {'172.25.53.11': {'olversion': u'111', 'rb1': u'222', 'rb2': u'333'}},
'd': {'172.25.53.13': {'olversion': u'111', 'rb1': u'222', 'rb2': u'333'}}}
保存方法如下:
class operate_redis:
def __init__(self):
self.r=redis.Redis(host='localhost', port=6379, db=0)
def write2redis(self, key, **kwargs):
self.r.set(key, pickle.dumps(kwargs))
def read_from_redis(self, key):
pickled_value = self.r.get(key)
if pickled_value is None:
return None
return pickle.loads(pickled_value)
def del_from_redis(self, key):
return self.r.delete(key)
def set_app_expire(self, key):
self.r.expire(key, 36000)
问题出现在我每次通过 read_from_redis 读取后,想在 key 为 a 的添加个参数
appinfo['a']['172.25.53.12']['work'] = 'gofuckyourself'
这个操作后, key 为'b', 'c', 'd'的同样会增加上面那个 key value
同理 修改 appinfo['a']['172.25.53.12']这个里面的参数 b c d 也会一样被修改
如果不经过 redis 存储 读取这个流程 单纯定义 appinfo 这个字典,上述修改只只对单个 key 生效。
请问这个情况有大大们碰到过么? 改如果处理呢?