tengo un marco repositorio básico que finalmente ejecuta una consulta y los mapas de los resultados de nuevo en un objeto:Generación de una clave de caché único basado en los argumentos del método
Por ejemplo:
public SomeEntity Get(id)
{
return base.GetItem<SomeEntity>
("select * from SomeEntities where id = @idParam",
new { idParam = id});
}
Si esto parece Dapper, es porque debajo del capó GetItem está envolviendo a Dapper.
me gustaría añadir almacenamiento en caché automático para GetItem, que tienen dos argumentos que vienen en:
- Una cadena que contiene la consulta.
- un diccionario anónimo que contiene los parámetros.
Me preocupa que haciendo una simple almohadilla de primera en estos parámetros podría provocar colisiones clave de caché, y cuando usted está tirando de datos de una memoria caché, una colisión puede ser muy muy malo (POR EJEMPLO fugas sensible información).
Entonces, ¿qué técnicas tengo que generen una clave de memoria caché de tamaño razonable, al tiempo que garantiza la exclusividad en función de la entrada de una consulta y los parámetros?
A mí parece que se está describiendo un mapa de la identidad de las clases. En este caso, la clave puede ser simplemente la manecilla de tiro combinada con la identificación. Lo que pasa con los mapas de identidad es que quieres asegurarte de que están ligados a algún tipo de contexto, un mapa de identidad global es increíblemente difícil de invalidar –