code: def put_if_absent(self, key, value, ttl=-1):
          
          check_not_none(key, "key can't be None")
          check_not_none(value, "value can't be None")
  
          key_data = self._to_data(key)
          value_data = self._to_data(value)
          return self._put_if_absent_internal(key_data, value_data, ttl)
docs: Associates the specified key with the given value if it is not already associated. If ttl is provided, entry
          will expire and get evicted after the ttl.
  
          This is equivalent to:
              >>> if not map.contains_key(key):
              >>>     return map.put(key,value)
              >>> else:
              >>>     return map.get(key)
          except that the action is performed atomically.
  
          **Warning:
          This method returns a clone of the previous value, not the original (identically equal) value previously put
          into the map.**
  
          **Warning 2: This method uses __hash__ and __eq__ methods of binary form of the key, not the actual implementations
          of __hash__ and __eq__ defined in key's class.**
  
          :param key: (object), key of the entry.
          :param value: (object), value of the entry.
          :param ttl:  (int), maximum time in seconds for this entry to stay in the map, if not provided, the value
              configured on server side configuration will be used (optional).
          :return: (object), old value of the entry.