def mset_nonatomic(self, mapping): """ Sets key/values based on a mapping. Mapping is a dictionary of key/value pairs. Both keys and values should be strings or types that can be cast to a string via str(). Splits the keys into different slots and then calls MSET for the keys of every slot. This operation will not be atomic if keys belong to more than one slot. """ # Partition the keys by slot slots_to_pairs = {} for pair in mapping.items(): # encode the key k = self.encoder.encode(pair[0]) slot = key_slot(k) slots_to_pairs.setdefault(slot, []).extend(pair) # Call MSET for every slot and concatenate # the results (one result per slot) res = [] for pairs in slots_to_pairs.values(): res.append(self.execute_command("MSET", *pairs)) return res
async def mset_nonatomic( self, mapping: Mapping[AnyKeyT, EncodableT]) -> List[bool]: """ Sets key/values based on a mapping. Mapping is a dictionary of key/value pairs. Both keys and values should be strings or types that can be cast to a string via str(). Splits the keys into different slots and then calls MSET for the keys of every slot. This operation will not be atomic if keys belong to more than one slot. For more information see https://redis.io/commands/mset """ # Partition the keys by slot slots_to_pairs = {} for pair in mapping.items(): # encode the key k = self.encoder.encode(pair[0]) slot = key_slot(k) slots_to_pairs.setdefault(slot, []).extend(pair) # Call MSET for every slot and concatenate # the results (one result per slot) return await asyncio.gather( *(asyncio.ensure_future(self.execute_command("MSET", *pairs)) for pairs in slots_to_pairs.values()))
def _partition_keys_by_slot(self, keys: Iterable[KeyT]) -> Dict[int, List[KeyT]]: """Split keys into a dictionary that maps a slot to a list of keys.""" slots_to_keys = {} for key in keys: slot = key_slot(self.encoder.encode(key)) slots_to_keys.setdefault(slot, []).append(key) return slots_to_keys
def _partition_pairs_by_slot( self, mapping: Mapping[AnyKeyT, EncodableT] ) -> Dict[int, List[EncodableT]]: """Split pairs into a dictionary that maps a slot to a list of pairs.""" slots_to_pairs = {} for pair in mapping.items(): slot = key_slot(self.encoder.encode(pair[0])) slots_to_pairs.setdefault(slot, []).extend(pair) return slots_to_pairs
def _partition_keys_by_slot(self, keys): """ Split keys into a dictionary that maps a slot to a list of keys. """ slots_to_keys = {} for key in keys: k = self.encoder.encode(key) slot = key_slot(k) slots_to_keys.setdefault(slot, []).append(key) return slots_to_keys