今天的应用程序需要扩展和处理极端级别的事务负载。 但是,数据库无法扩展,因此成为瓶颈。 为了解决这个问题,很多人都在求助 内存分布式缓存 因为它可以线性扩展并消除数据库瓶颈。
分布式缓存通常包含两种类型的数据,事务数据和引用数据。 事务数据变化非常频繁,因此被缓存的时间很短。 但是,缓存仍然极大地提高了性能和可扩展性。
另一方面,参考数据不会经常变化。 它可能是静态数据或动态数据,可能每小时、每天等都会发生变化。有时,这些数据可能很大(以千兆字节为单位)。 如果可以在缓存启动时将此参考数据预加载到分布式缓存中,那就太好了,因为这样您的应用程序就不需要在运行时加载它。 加载参考数据 在运行时会降低您的应用程序性能,尤其是在数据量很大的情况下。
NCache 更多信息 NCache 配套文档 缓存加载器和刷新器文档
应该如何将参考数据预加载到分布式缓存中?
一种方法是以这样一种方式设计您的应用程序,即在应用程序启动期间,它从数据库中获取所有需要的参考数据并将其放入分布式缓存中。
然而,这种方法引发了一些其他问题。 首先,它会减慢您的应用程序启动速度,因为您的应用程序现在涉及预加载缓存。 其次,如果您有多个应用程序共享一个分布式缓存,那么您要么在每个应用程序中都有代码重复,要么您的所有应用程序都依赖于一个预加载分布式缓存的应用程序。 最后,在您的应用程序中嵌入缓存预加载代码会破坏您的应用程序设计,因为您正在添加不属于您的应用程序的代码。 当然,这两种情况都不是非常可取的。
如果我们给这个怎么办 预载责任 到分布式缓存本身? 在这种情况下,预加载可能是缓存启动过程的一部分,因此根本不涉及您的应用程序。 您可以将缓存配置为在启动时预加载所有必需的数据,以便所有应用程序从一开始就可以使用它。 这简化了您的应用程序,因为它不再需要担心预加载逻辑。
NCache 更多信息 NCache 配套文档 缓存加载器和刷新器文档
在缓存中预加载参考数据
NCache 为在启动时预加载缓存提供了一个非常强大和灵活的功能。 您可以为缓存加载器编写自定义代码并将其注册到 NCache. 一旦完成, NCache 在缓存启动时调用缓存加载器(使用您的自定义代码)。 在继续实施之前,让我们先了解一下基本的组件 NCache 缓存启动加载器。
- 装载机服务: 对于集群拓扑,专用 装载机服务 在每个节点上运行,根据 asshttps://www 加载数据。alachisoft.com/resources/docs/ncache/prog-guide/cache-startup-loader-overview.html#loader-serviceigned 数据集。 这通过减少缓存进程的负担来提高加载性能。
- 数据集: 要加载的数据分为 逻辑数据集 由用户使用循环算法分发到节点。 这通过实现并行性来加速加载过程。
深入挖掘 NCache 预加载功能,你可以看到 缓存加载器属性。 除了, NCache 还有助于通过提供刷新加载的缓存数据 缓存刷新器 功能。
实现 ICacheLoader 接口
启用预加载使用 NCache,你需要实现一个简单的接口,命名为 ICacheLoader
. 它被调用来帮助缓存回答“如何加载以及加载哪些数据?”的问题。 以下是您可以如何简单地自定义以下方法的代码 ICacheLoader
界面根据您的业务需求。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
class CacheLoader : ICacheLoader { public void Init(IDictionary<string, string> parameters, string cacheName) { //connect to cache cache = CacheManager.GetCache(cacheName); //Connection string is passed as parameters at the time of configuration // connectionString = parameters.ContainsKey("ConnectionString") ? parameters["ConnectionString"] : null; if (connectionString != null) { //Let's connect to the database connection = new SqlConnection(connectionString); } } public object LoadDatasetOnStartup(string dataSet) { // Create a list of datasets to load at cache startup IList<object> datasetToLoad; if (dataSet != null) { switch (dataSet.ToLower()) { // If dataset is "products", fetch products from data source to load in cache case "products": datasetToLoad = FetchProductsFromDataSource(); // Insert fetched product in the cache // You can also use NCache bulk API to insert data into cache foreach (var product in datasetToLoad) { string key = $"ProductID:{product.Id}"; cache.Insert(key, product); } break; // You can add more cases for different datasets as per requirement and fetch them from the data source default: // Invalid dataset throw new Exception($"Unknown dataset is configured. Dataset {dataSet}"); break; } } return null; } } |
在启动加载程序处理期间发生的任何异常都会被记录下来,而不会为您的应用程序造成任何问题。 简单有效!
配置启动加载器
一旦你实现了缓存启动加载器,你可以为你的缓存配置它,使用 NCache 网络管理器。 您可以从详细配置页面中的缓存启用缓存加载器 NCache 网络管理器。 详细步骤可以参考如何配置缓存启动加载器使用 NCache 网络管理员.
您还可以使用配置的缓存加载器将数据集添加和删除到缓存中 Add-StartupLoader
和 Remove-StartupLoader
PowerShell cmdlet,分别。 您可以查看相关示例 添加加载器数据集 和 删除启动加载器 以便更好地理解。
结论!
正如你可以看到, NCache 为您提供了一种强大的机制来预加载分布式缓存并始终保持应用程序的高性能。 除了, NCache 还有助于通过提供刷新加载的缓存数据 缓存刷新器 特征。 所以,下载 NCache 现在就准备好使用它的众多功能吧!
实际上,这是一条很好且有用的信息。 我很满意您与我们分享了这些有用的信息。
请留下我们知情这样。 谢谢你的分享。
您好,我通过以下方式找到了您的网站
谷歌在搜索类似的主题时,你的网站到了这里
起来,好像还不错。 我已经在我的谷歌书签中添加了书签。
您好,只是通过 Google 对您的博客保持警惕,并发现它确实提供了丰富的信息。
我会留意布鲁塞尔。 如果您继续执行此操作,我将不胜感激
在未来。 很多人可能会受益
从你的写作。 干杯!