NHibernate MemCached w / Protobuf-net.Enyim действительно ли это работает?

Я использовал следующие сборки для подключения кэширования 2-го уровня NHibernate с Enyim Memcached с использованием двоичного сериализатора Protobuf-net:

  • NHibernate
  • NHibernate.Caches.EnyimMemcached
  • Enyim.Caching
  • protobuf-net
  • protobuf-net.Enyim

Недавно я обратил внимание на то, что, несмотря на подключение protobuf-net к EnyimMemcached, я, скорее всего, на самом деле не использую этот сериализатор, поскольку все мои объекты были отмечены только [Serializable] и ни [DataContract], ни [ProtoContract] с соответствующими упорядоченными данными / ProtoMembers для свойств. Я могу заставить protobuf-net работать с EnyimMemcached, когда я взаимодействую с memcache непосредственно после добавления соответствующих атрибутов (или регистрирую их вручную с помощью класса RuntimeTypeModel.Default для protobuf-net).

Однако, даже если я проведу должную осмотрительность при регистрации моих типов с помощью protobuf-net, я не думаю, что любая запись в кеше, поступающая из NHibernate, на самом деле будет сериализована protobuf-net, потому что NHibernate.Caches.EnyimMemcached хранит записи в кеше внутри DictionaryEntry объектов:

bool returnOk = client.Store(
    StoreMode.Set, KeyAsString(key),
    new DictionaryEntry(GetAlternateKeyHash(key), value),
    TimeSpan.FromSeconds(expiry));

DictionaryEntry не имеет атрибутов [DataContract] и [DataMember(Order = xx)]. Это заставляет меня задуматься ...

Могу ли я даже правильно использовать сериализатор protobuf-net для кэширования 2-го уровня NHibernate?


person kdawg    schedule 11.04.2013    source источник


Ответы (1)


Поскольку никто не ответил на ваш вопрос, я мог бы также дать здесь свои две части. Я мало знаю о Memcached как о кеше 2-го уровня, но существуют мощные решения для кэширования, которые требуют минимальных изменений кода для начала использования в качестве кеш-памяти 2-го уровня, а сериализация обрабатывается кешем. Вы можете использовать NCache в качестве кэша уровня 2 для NHibernate

person Andy H    schedule 21.05.2013