import pickle import config def get_new_key(key: bytes): str_key = key.decode() return config.NAMESPACE_TO+f":{str_key[str_key.find('/')+1:]}" def get_or_update_remained_ttl(ttl: int): """ Args: ttl: seconds of key lifetime left """ return ttl if ttl <= config.REMAIN_TTL else config.REMAIN_TTL def migrate_data(redis_pipe, redis_client, keys, data): for key, data in zip(keys, data): redis_pipe.set( name=get_new_key(key), value=pickle.dumps(data), ex=redis_client.ttl(key), nx=True ) return redis_pipe.execute() def update_ttl(redis_pipe, redis_client, keys, data): for key, data in zip(keys, data): new_ttl = get_or_update_remained_ttl(redis_client.ttl(key)) redis_pipe.set( name=key.decode(), value=data, ex=new_ttl, xx=True ) return redis_pipe.execute()