Cache Generalizado com Prioridade e Tempo de Vida
C#
Hard
generics
Tarefa «Cache Generalizado com Prioridade e Tempo de Vida»
Implemente uma classe genérica Cache<TKey, TValue>, que armazena itens com um determinado tempo de vida (TimeToLive) e prioridade (int). Ao adicionar um item, se o cache exceder o tamanho máximo, o item com a menor prioridade é removido e, em caso de prioridade igual, o mais antigo. Após o TimeToLive, o item é considerado expirado e não é retornado na consulta. Métodos: Add(TKey key, TValue value, int priority) — adiciona ou atualiza um item; TryGet(TKey key, out TValue value) — retorna true se a chave existir e não estiver expirada, caso contrário false; RemoveExpired() — remove todos os itens expirados. Implemente segurança de threads usando locks.
Formato de Entrada
Primeira linha: tamanho máximo do cache (int) e tempo de vida em segundos (int). Segunda linha: número de comandos N (int). Em seguida, N linhas, cada comando: 'add chave valor prioridade' ou 'get chave' ou 'remove_expired'.
Formato de Saída
Para cada comando 'get', imprima o valor se a chave for encontrada e não estiver expirada, caso contrário 'null'. Para 'remove_expired', imprima o número de itens removidos. Para 'add', não imprima nada.
Exemplos
Exemplo 1
ENTRADA
3 5
8
add a 10 1
add b 20 2
get a
add c 30 3
add d 40 1
get b
get d
remove_expired
SAÍDA
10
null
40
1
Exemplo 2
ENTRADA
2 10
6
add x 100 5
add y 200 5
get x
add z 300 5
get y
get z
SAÍDA
100
null
300
main.cs