Упакуйте данные в класс, реализуйте IEqualityComparer, который затем можно сохранить в словаре. Реализуя IEqualityComparer, вы будете управлять генерацией хэша и выполнением сравнения данных, чтобы идентифицировать уникальные данные при возникновении коллизий.

я есть базовая структура репозитория, которая в конечном итоге выполняет запрос и отображает результаты обратно в объект:

Например:

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

Если это похоже на Dapper, то это потому, что под капотом GetItem упаковывает Dapper.

Я хотел бы добавить автоматическое кэширование в GetItem, у меня есть два аргумента:

Строка, содержащая запрос.анонимный словарь, содержащий любые параметры.

Я обеспокоен тем, что простое простое хэширование этих параметров может привести к коллизиям ключей кэша, а когда вы извлекаете данные из кеша, коллизия может быть очень и очень плохой (т.е. утечка конфиденциальной информации).

Итак, какие у меня есть методы, которые позволили бы генерировать ключ кэша разумного размера, гарантируя при этом уникальность, основанную на вводе запроса и параметров?

 Sam Saffron31 мая 2011 г., 04:56
Для меня это выглядит так, как будто вы описываете какую-то карту идентичности. В этом случае ваш ключ может быть просто дескриптором в сочетании с идентификатором. Что касается карт идентичности, то вы хотите убедиться, что они связаны с каким-то контекстом, глобальную карту идентичности невероятно трудно аннулировать.

Ответы на вопрос(0)

Ваш ответ на вопрос