问题标签 [memorycache]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
222 浏览

c# - 使用 MemoryCache 缓存在 ASP.NET WEBI 委托处理程序中不起作用

我需要在每个请求上读取一个几乎静态的 JSON 文件。我正在使用面向 .NET 4.5 的 ASP.NET Web API 2。我曾打算使用 System.Runtime.Caching.Memory 缓存。我在委托消息处理程序中使用这个缓存。令我惊讶的是,缓存根本不起作用。每次请求到来时,缓存键似乎都不存在,它只是不断地加载文件。为了测试相同,我使用了 IIS Express 8.0 并使用了断点 n VS 2012。

我的代码如下

在 GetFromCache 函数中,当我在 if 段中放置断点时,我看到内容总是从文件中加载,而不是在任何情况下从缓存中加载。如果我遗漏了什么,你能告诉我吗?

0 投票
2 回答
1378 浏览

web-services - 使用 RabbitMQ 使本地内存缓存失效的陷阱

我有一个 java web 服务器,目前正在使用 Guava 库来处理我大量使用的内存缓存。我现在需要扩展到多台服务器(2+)以进行故障转移和负载平衡。在此过程中,我改为从进程内缓存切换到 Memcache(外部服务)。但是,我对结果印象并不深刻,因为现在几乎每次调用,我都必须对另一台服务器进行外部调用,这比内存缓存慢得多。

我在想,与其从 Memcache 获取数据,不如继续在每台服务器上使用本地缓存,并在需要更新缓存时使用 RabbitMQ 通知其他服务器。因此,如果一个服务器对底层数据进行了更改,它也会向所有其他服务器广播一条消息,告诉他们他们的缓存现在无效。每个服务器都在广播和侦听缓存失效消息。

有谁知道这种方法的任何潜在缺陷?我有点紧张,因为我找不到其他人在生产中这样做。我看到的唯一问题是每个服务器都需要更多内存(内存缓存),并且任何给定的服务器可能需要更长的时间才能获取更新的数据。还要别的吗?

0 投票
10 回答
112009 浏览

c# - 正确使用 .NET MemoryCache 的锁定模式

我假设这段代码有并发问题:

并发问题的原因是多个线程可以获取一个空键,然后尝试将数据插入缓存。

使此代码并发证明的最短和最干净的方法是什么?我喜欢在我的缓存相关代码中遵循一个好的模式。一个在线文章的链接将是一个很大的帮助。

更新:

我根据@Scott Chamberlain 的回答想出了这段代码。任何人都可以找到任何性能或并发问题吗?如果这可行,它将节省许多代码行和错误。

0 投票
1 回答
457 浏览

c# - 重新启动服务是否会清除 MemoryCache?

在C#中,如果我的项目的输出是一个窗口服务并且它使用了MemoryCache,那么在服务重新启动时,MemoryCache 会被清除吗?

0 投票
2 回答
504 浏览

c# - 如何计算c#中缓存键存储时消耗的内存空间?

如何计算c#中缓存键存储时消耗的内存空间

0 投票
1 回答
3876 浏览

.net - System.Runtime.Caching 中的 MemoryCache:项目不会过期

我目前尝试将项目插入 MemoryCache.Default 实例,该实例有效。但物品不会过期!轮询间隔默认设置为 2 分钟,没有对 MemoryCache 进行特定设置。

添加项目例程是这样的:

但是,这些项目在缓存中永不过期!我等了 10 多分钟,它们还在缓存中。主要目的是通过尝试每隔几秒钟处理一次查询来防止它们用查询淹没数据库。它们每隔几秒钟检查一次,但没有 SlidingExpiration。大约 3 分钟、5 分钟后应再次检查它们,因为最大延迟仍然是可以容忍的。

我不想在 XML 等代码之外进行任何配置。如果不可能,是否有一个很好的替代 MemoryCache 的方法?也许通过参数和属性使用数字/对象键和配置?

0 投票
1 回答
3378 浏览

c# - .Net MemoryCache 不工作!每次调用时,缓存都会失效并重新填充

我不确定这种行为是否是由于应用程序(控制台应用程序)的性质造成的。我的最终目标是使用System.Runtime.Caching.MemoryCache将在 ASP.Net MVC 应用程序中使用的类库中的类。目标是从 MemoryCache 返回数据,每次网络文件夹上的 XML 文件(数据源)更改时都会填充该数据。

所以为了实现我的实现,我编写了一个简单的控制台应用程序,其中包含一个List<>将被缓存的对象。这是代码。

然后我构建了项目并打开了 2 个单独的命令窗口,然后一个接一个地运行。我期望(ed)在 DebugView 控制台输出上看到的是,只有 1 次缓存将被填充,并且第二次 .exe 调用将在缓存中找到数据,并从那里返回. 但事实并非如此。请参阅下面来自控制台和调试视图的屏幕截图。

在此处输入图像描述

并在调试视图中...

在此处输入图像描述

我究竟做错了什么?这是因为我使用的是控制台应用程序吗?如何让缓存跨类库中的方法调用工作?如果在 Web 应用程序中使用相同的库(IIS 7.5 上的 ASP.Net MVC),我还需要注意哪些注意事项。

谢谢!

0 投票
1 回答
6650 浏览

c# - MemoryCache - AbsoluteExpiration - 项目不会过期*更新后*

下面是缓存用户进行的无效登录尝试的代码。正在使用“绝对过期”缓存策略将项目添加到缓存中。

如果我只添加一项 - 它会在 2 分钟内按预期过期。但是,如果我更新该缓存项目(没有明确指定缓存策略) - 该项目的保留时间远远超过 2 分钟。这是代码片段:

似乎问题与我在 //Add invalid login to cache 下更新缓存项有关

关于我在这里缺少什么以及如何解决此问题的任何想法?

0 投票
1 回答
960 浏览

c# - how to add multiple different data into MemoryCache

Even though I looked through a lot of documents about this concept, I couldn't make any progress on this problem. I have a wcf service which makes some queries to Sql Server database. When I cache only one query it works as I expect, but when I try to cache two queries, the second one throws the exception The method has already been invoked. I am new to this cache things, so let me know if there is a minor or major approach problems to my cachce concept. Below is the code snippet for what I'm trying to do:

I tried to use cache.Set method too, still same exception.

0 投票
1 回答
9819 浏览

c# - .net MemoryCache - 通知删除的项目

我正在使用带有 .NET 4.0 和 c# 的 .net 内存缓存,我希望在删除项目时通知我的应用程序(因此我可以将其写入日志文件或通知 UI,该项目已移除)。

有没有办法做到这一点。

我正在使用 System.Runtime.Caching.MemoryCache 而不是 System.Web.Caching