Add ``item`` to this queue.

        It will have the specified ``priority`` (highest priority runs
        first).  If it is already in the queue, fail if it is checked
        out or reserved, or change its priority to ``priority``
        otherwise.

def add_item(self, item, priority):
        """Add ``item`` to this queue.

        It will have the specified ``priority`` (highest priority runs
        first).  If it is already in the queue, fail if it is checked
        out or reserved, or change its priority to ``priority``
        otherwise.

        """
        conn = self._conn()
        self._run_expiration(conn)
        script = conn.register_script("""
        if (redis.call("hexists", KEYS[2], ARGV[1]) ~= 0) and
           not(redis.call("zscore", KEYS[1], ARGV[1]))
        then
            return -1
        end
        redis.call("zadd", KEYS[1], ARGV[2], ARGV[1])
        redis.call("hset", KEYS[2], ARGV[1], ARGV[2])
        return 0
        """)
        result = script(keys=[self._key_available(), self._key_priorities()],
                        args=[item, priority])
        if result == -1:
            raise ItemInUseError(item)
        return