private void scheduleExpiration(final Object key, long p_expTime, final Cache cache) {
    long expTime = p_expTime;
    assert expTime > 0;
    if (p_expTime > secsIn30Days) {
      expTime = p_expTime - System.currentTimeMillis();
      if (expTime < 0) {
        getLogger().info("Invalid expiration time passed, key:" + key + " will not expire");
        return;
      }
    }
    ScheduledFuture f =
        expiryExecutor.schedule(new ExpiryTask(cache, key), expTime, TimeUnit.SECONDS);
    expiryFutures.put(key, f);
  }
Schedules the entry to expire based on the following: the expiration time sent may either be
Unix time (number of seconds since January 1, 1970, as a 32-bit value), or a number of seconds
starting from current time. In the latter case, this number of seconds may not exceed
60*60*24*30 (number of seconds in 30 days); if the number sent by a client is larger than that,
the server will consider it to be real Unix time value rather than an offset from current time.
geode-memcached/src/main/java/org/apache/geode/internal/memcached/commands/StorageCommand.java