code: def unlock(self, key):
          
          check_not_none(key, "key can't be None")
  
          key_data = self._to_data(key)
  
          return self._encode_invoke_on_key(map_unlock_codec, key_data, key=key_data, thread_id=thread_id(),
                                            reference_id=self.reference_id_generator.get_and_increment())
docs: Releases the lock for the specified key. It never blocks and returns immediately. If the current thread is the
          holder of this lock, then the hold count is decremented. If the hold count is zero, then the lock is released.
  
          :param key: (object), the key to lock.