NHibernate MemCached с Protobuf-net.Enyim - это действительно работает?
Я использовал следующие сборки для соединения кэширования NHibernate 2-го уровня с Enyim Memcached с помощью двоичного сериализатора Protobuf-net:
- NHibernate
- NHibernate.Caches.EnyimMemcached
- Enyim.Caching
- Protobuf-сеть
- Protobuf-net.Enyim
Недавно мне стало известно, что, несмотря на подключение protobuf-net к EnyimMemcached, я, вероятно, на самом деле не использую этот сериализатор, так как все мои объекты были помечены просто [Serializable]
и ни [DataContract]
или же [ProtoContract]
с соответствующими заказанными Data/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 для кэширования NHibernate 2-го уровня?
1 ответ
Так как никто не ответил на ваш вопрос, я мог бы также дать свои две части здесь. Я мало что знаю о Memcached как о кеше 2-го уровня, но существуют мощные решения для кеширования, которые требуют минимальных изменений кода, чтобы начать использовать его как кэш-память 2-го уровня, а сериализация обрабатывается кешем. Вы можете использовать NCache как кэш 2-го уровня для NHibernate