def hkeys(self, key): result = [] if self._db.get(KEY_CODEC.encode_hash(key)) is not None: for db_key, _ in self._get_db_iterator( KEY_CODEC.get_min_hash_field(key)): _, length, field_key = KEY_CODEC.decode_key(db_key) field = field_key[length:] result.append(field) return result
def smembers(self, key): result = set() key_id, length = self._get_set_key_id_and_length(key) if length > 0: for db_key, _ in self._get_db_iterator( KEY_CODEC.get_min_set_member(key_id)): _, length, member_key = KEY_CODEC.decode_key(db_key) member_value = member_key[length:] result.add(member_value) return result
def hgetall(self, key): result = [] key_id, hash_length = self._get_hash_key_id_and_length(key) if hash_length > 0: for db_key, db_value in self._get_db_iterator( KEY_CODEC.get_min_hash_field(key_id)): _, length, field_key = KEY_CODEC.decode_key(db_key) field = field_key[length:] result.append(field) result.append(db_value) return result
def _collect(self, db): deleted = 0 with db.write_batch() as batch: for deleted_db_key, _ in db.iterator( prefix=KEY_CODEC.MIN_DELETED_VALUE): _, _, deleted_key_value = KEY_CODEC.decode_key(deleted_db_key) for db_key, _ in db.iterator(prefix=deleted_key_value): deleted += 1 batch.delete(db_key) if deleted == self._batch_size: return batch.delete(deleted_db_key)
def _convert_key(batch, db_key, db_value): type_id, _, key = KEY_CODEC.decode_key(db_key) if len(db_value) < UUID_LENGTH_IN_BYTES: # older schema before uuid key_id = key length = db_value else: # new schema with uuid key_id = db_value[:UUID_LENGTH_IN_BYTES] length = db_value[UUID_LENGTH_IN_BYTES:] print('batch.put({!r}, {!r})'.format(KEY_CODEC.get_key(key_id, type_id), length)) batch.put(KEY_CODEC.get_key(key_id, type_id), length) if key != key_id: batch.delete(db_key) print('batch.delete({!r})'.format(db_key)) print('[TO RUN] RENAME {} {}'.format(_rediscli_str(key_id), _rediscli_str(key)))
def get_key_value_pair(db_key, db_value): _, length, field_key = KEY_CODEC.decode_key(db_key) field = field_key[length:] return field, db_value