Упакуйте данные в класс, реализуйте IEqualityComparer, который затем можно сохранить в словаре. Реализуя IEqualityComparer, вы будете управлять генерацией хэша и выполнением сравнения данных, чтобы идентифицировать уникальные данные при возникновении коллизий.
я есть базовая структура репозитория, которая в конечном итоге выполняет запрос и отображает результаты обратно в объект:
Например:
public SomeEntity Get(id)
{
return base.GetItem<SomeEntity>
("select * from SomeEntities where id = @idParam",
new { idParam = id});
}
Если это похоже на Dapper, то это потому, что под капотом GetItem упаковывает Dapper.
Я хотел бы добавить автоматическое кэширование в GetItem, у меня есть два аргумента:
Строка, содержащая запрос.анонимный словарь, содержащий любые параметры.Я обеспокоен тем, что простое простое хэширование этих параметров может привести к коллизиям ключей кэша, а когда вы извлекаете данные из кеша, коллизия может быть очень и очень плохой (т.е. утечка конфиденциальной информации).
Итак, какие у меня есть методы, которые позволили бы генерировать ключ кэша разумного размера, гарантируя при этом уникальность, основанную на вводе запроса и параметров?