Generando una clave de caché única basada en argumentos de método

Tengo un marco de repositorio básico que eventualmente ejecuta una consulta y asigna los resultados nuevamente en un objeto:

Por ejemplo

    public SomeEntity Get(id)
    {
        return base.GetItem<SomeEntity>
                   ("select * from SomeEntities where id = @idParam",
                    new { idParam = id}); 
    }

Si esto se parece a Dapper, es porque debajo del capó GetItem está envolviendo a Dapper.

Me gustaría agregar el almacenamiento en caché automático a GetItem, tengo dos argumentos:

Una cadena que contiene la consulta.un diccionario anónimo que contiene cualquier parámetro.

Me preocupa que hacer un simple hash principal en estos parámetros pueda causar colisiones de claves de caché, y cuando extrae datos de un caché, una colisión puede ser muy grave (es decir, filtrar información confidencial).

Entonces, ¿qué técnicas tengo para generar una clave de caché de tamaño razonable, al tiempo que garantiza la unicidad basada en la entrada de una consulta y parámetros?

Respuestas a la pregunta(2)

Su respuesta a la pregunta