扩展nop commerce的缓存管理器以使用Redis或Memcached

时间:2014-03-13 15:49:15

标签: nopcommerce

我想问你是否有办法扩展缓存管理器以使用Redis或Memcached。

我注意到Nop.Core中的所有缓存管理器都实现了ICacheManager接口。 有没有办法编写我自己的缓存管理器(例如使用Memcached)实现ICacheManager 接口,如果是这样,如何使用我自己的memcached管理器初始化nop商业引擎?

2 个答案:

答案 0 :(得分:2)

我会将我的研究结果发布给其他人使用。

因此,要使用自己的缓存管理器,您必须编写自己的缓存管理器类来实现ICachaManager接口。

其他nopcommerce缓存管理器位于Nop.Core.Caching,因此将自己的经理放在那里也是明智的。

然后,您应该在第121行下面添加以下行,其中其他nopcommerce缓存管理器在Nop.Web.Framework项目中的DependencyRegistrar.cs文件中注册。

builder.RegisterType<MyOwnAwesomeCacheManager>().As<ICacheManager>().Named<ICacheManager>("my_own_awesome_cachemanager").InstancePerHttpRequest();

然后在ModelCacheEventConsumer.cs文件的Nop.Web.Infrastructure.Cache中,将类构造函数中的代码替换为&#34; tell&#34; nop commerce使用你自己的缓存管理器。

 this._cacheManager = EngineContext.Current.ContainerManager.Resolve<ICacheManager>("my_own_awesome_cachemanager");

希望我没有遗漏任何东西。

这适用于nopcommerce 3.20。

答案 1 :(得分:1)

无法序列化NopCommerce域模型对象。尚不支持。由于循环引用属性,您将获得stackoverflow异常。

虽然无法进行序列化,但您无法将已实施的ICacheManager替换为Redis或Memecached等分布式ICacheManager。

如果您设法序列化域对象,反序列化也会阻止您的方式。反序列化后,您需要将对象附加到ObjectContext以保持基于实体框架的查询。

NopCommerce团队已经开始为Azure做一些实施。希望他们很快也能支持分布式缓存。