package edu.vandy.common;

/**
 * Define a common interface for all timedout cache implementations.
 */
public interface TimeoutCache<K, V> {
    /**
     * Gets the @a value from the cache at the designated @a key.
     * 
     * @param key
     * @return value
     */
    V get(K key);

    /**
     * Put the @a value into the cache at the designated @a key with a
     * timeout after which the data will expire.
     * 
     * @param key
     * @param value
     * @param timeout in seconds
     */
    void put(K key, V obj, int timeout);

    /**
     * Removes the value associated with a key.
     * 
     * @param key
     * @param expirationTime
     */
    void remove(K key,
                long expirationTime);

    /**
     * Get the size of the cache.
     * 
     * @return size
     */
    int size();
}
