def set(self, key, value, expires_in):
        # This method's name was chosen so that it matches its cousin __setitem__(),
        # and it also complements the counterpart get().
        # The downside is such a name shadows the built-in type set in this file,
        # but you can overcome that by defining a global alias for set.
        """It sets the key-value pair into this mapping, with its per-item expires_in.

        It will take O(logN) time, because it will run some maintenance.
        This worse-than-constant time is acceptable, because in a cache scenario,
        __setitem__() would only be called during a cache miss,
        which would already incur an expensive target function call anyway.

        By the way, most other methods of this mapping still have O(1) constant time.
        """
        with self._lock:
            self._set(key, value, expires_in)
It sets the key-value pair into this mapping, with its per-item expires_in.

        It will take O(logN) time, because it will run some maintenance.
        This worse-than-constant time is acceptable, because in a cache scenario,
        __setitem__() would only be called during a cache miss,
        which would already incur an expensive target function call anyway.

        By the way, most other methods of this mapping still have O(1) constant time.
        
Solutions/CyberArkAudit/Data Connectors/.python_packages/lib/site-packages/msal/individual_cache.py