Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用MemoryCache内置计时器来触发一个方法?

如何使用MemoryCache内置计时器来触发一个方法?
EN

Stack Overflow用户
提问于 2015-12-15 01:25:51
回答 1查看 1.6K关注 0票数 3

下面的方法通过等待已经运行的操作的结果来处理并发请求。

对数据的请求可以以相同/不同的凭据同时发出。对于每个唯一的凭证集,最多可以有一个GetCurrentInternal调用正在进行中,当它准备就绪时,该调用的结果返回给所有排队的等待者。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private readonly ConcurrentDictionary<Credentials, Lazy<Data>> _dataToCredentialMap =
        new ConcurrentDictionary<Credentials, Lazy<Data>>();

public virtual Data GetCurrent(Credentials credentials)
{
    if (credentials == null) { return GetCurrentInternal(null); }

    // It will only allow a single call to GetCurrentInternal, even if multiple threads query its Value property simultaneously.
    var lazyData = new Lazy<Data>(() => GetCurrentInternal(credentials));

    var data = _dataToCredentialMap.GetOrAdd(credentials, lazyData);
    return data.Value;
}

我在这个类的构造函数中添加了timer。这是一种基于时间的失效策略,其中缓存项在一定时间内自动失效。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
_dataUpdateTimer = new Timer(UpdateData, null, TimeSpan.Zero, _dataUpdateInterval); // 1 min

更新数据的方法如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void UpdateData(object notUsed)
{
    try
    {
        foreach (var credential in _dataToCredentialMap.Keys)
        {
            var data = new Lazy<Data>(() => GetCurrent(credential));
            _dataToCredentialMap.AddOrUpdate(credential, data, (k, v) => data);
        }
     }
     catch (Exception ex)
     {
          _logger.WarnException(ex, "Failed to update agent metadata");
     }
}

我想在我的.Net和Timer中使用MemoryCache类,来更新我的Credential and Data --我认为它会更高效。

我知道如何使用MemoryCache而不是ConcurrentDictionary,但在构造函数中,如何在没有Timer的情况下每分钟调用UpdateData

你能帮我怎么做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-15 02:26:41

您可以在没有计时器的情况下使用MemoryCache完成此操作。只需将CacheItemPolicy设置为AbsoluteExpiration:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MemoryCache memCache = MemoryCache.Default;
memCache.Add(<mykey>, <myvalue>,
          new CacheItemPolicy()
          {
            AbsoluteExpiration = DateTimeOffset.Now.Add(TimeSpan.FromMinutes(_expireminutes)),
            SlidingExpiration = new TimeSpan(0, 0, 0)
          }
          );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34285365

复制
相关文章
js内置对象---计时器对象
js内置对象---计时器对象 一、计时器对象简介 二、一次性计时器 1. 一次性计时器的写法 2. 清除计时器 三、循环计时器 1. 一次性计时器的写法 2. 清除计时器 四、帧计时器 1. 设置兼容性 2. 移除计时器 五、把一次性计时器写成循环计时器 1. 写法 2. 移除计时器 六、三个计时器的区别 一、计时器对象简介 计时器对象分类 计时器对象分为一次性计时器,循环计时器,帧计时器(跟电脑的刷新频率有关) 二、一次性计时器 计时器的参数有string||function delay ms ms—延迟
IT工作者
2022/03/29
2.4K0
使用计时器-方法1
Windows将WM_TIMER消息发送到应用程序的窗口过程。相应SetTimer的调用方法: SetTimer(hwnd,1,uiMsecInterval,NULL); 在任何时刻停止WM_TIMER消息,方法如下: KillTimer(hwnd,1); 当窗口收到WM_TIMER消息时,wParam等于计时器的ID,所以可以用如下方式: #define TIMER_SEC 1 #define TIMER_MIN 2 SetTimer(hwnd,TIMER_SEC,1000,NULL); Set
用户1154259
2018/01/17
6480
使用计时器-方法1
MemoryCache 如何清除全部缓存?
最近有个需求需要定时清理服务器上所有的缓存。本来以为很简单的调用一下 MemoryCache.Clear 方法就完事了。谁知道 MemoryCache 类以及 IMemoryCache 扩展方法都没有 Clear 方法。这可给难住了,于是想找到所有的 Keys 来一个个 Remove ,谁知道居然也没有获取所有 Key 的方法。于是研究了一下 ,找到一些方法,下面介绍两个方法:
MJ.Zhou
2021/12/21
2.5K0
使用计时器-方法2
第一种方法 是把WM_TIMER消息发送给正常的窗口过程。 第二种方法 是 自己让 windows把计时器消息发送给程序中的另一个窗口过程 回调函数: VOID CALLBACK TimerProc(HWND hwnd,UINT message,UINT iTimerID,DWORD dwTimer) { .... } 第一种方式调用的SetTImer函数,第四个参数一般直接为NULL SetTimer(hwnd,iTimerID,iMsecInterval,NULL); 第二种方式调用的Set
用户1154259
2018/01/17
6150
分析一个错误使用MemoryCache导致的BUG
这个Bug是我在项目中发现的,原因是MemoryCache使用不当造成了一个不小的Bug,虽说这个Bug很大部分人都知道,但是我觉得还是分享出来,记录一下。废话不多说,我们来看一下出错的代码(代码已经经过脱敏处理)
喵叔
2021/11/24
4060
分析一个错误使用MemoryCache导致的BUG
[BlogCore操作文档4] MemoryCache:内存缓存
采用最新的前后端完全分离技术【 ASP.NET Core Api 6.0 + Vue 2.x 】,并结合 IdentityServer4 ,可快速解决多客户端和多资源服务的统一认证与鉴权的问题,以及整合较为完善的数据权限控制。
老张的哲学
2023/08/23
2970
[BlogCore操作文档4] MemoryCache:内存缓存
使用延迟的FileSystemWatcher来避免重复触发事件
  程序里需要监视某个目录下的文件变化情况: 一旦目录中出现新文件或者旧的文件被覆盖,程序需要读取文件内容并进行处理;但在实际处理中发现当一个文件产生变化时,Change事件被反复触发了好几次。这样可能的结果是造成同一文件的重复处理。 解决方法:
跟着阿笨一起玩NET
2018/09/19
2K0
内存缓存MemoryCache
内存缓存MemoryCache实现了ICache接口,Redis同样实现了ICache接口,两者在缓存操作上达到了高度抽象统一。应用设计时一律使用ICache接口,开发环境装配为MemoryCache,生产环境根据分布式需要可以装配为Redis。如果应用系统没有分布式需求,继续使用MemoryCache更好。
JusterZhu
2022/12/07
8080
内存缓存MemoryCache
Spring计时器StopWatch使用
 StopWatch是位于org.springframework.util包下的一个工具类,通过它可方便的对程序部分代码进行计时(ms级别),适用于同步单线程代码块。  正常情况下,我们如果需要看某段代码的执行耗时,会通过如下的方式进行查看:
全栈程序员站长
2022/09/10
1.6K0
【说站】python系统内置方法如何获取
在实际开发中,我们很难记住一个物体的所有方法。在橡皮擦中编写代码时,我们也应该使用手册。我们不能记住太多的方法。我们经常记住它。我们如何查询物体的所有方法?我们使用内置函数dir。
很酷的站长
2022/11/23
1960
【说站】python系统内置方法如何获取
列表内置方法
sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
GH
2022/05/09
3130
python内置方法
1.abs取绝对值 >>> abs(9.8) 9.8 >>> abs(-9.8) 9.8 2.dic()变为字典类型 >>> dict({"key":"value"}) {'key': 'value'} 3.help()显示帮助信息 >>> help(map) Help on class map in module builtins: class map(object) | map(func, *iterables) --> map object | | Make an iterator tha
py3study
2020/01/06
1.6K0
Python 内置方法
迭代相关 iter(): 将一个序列转换成迭代器 next(): 自动调用对象的__next__()方法来迭代对象 map(): 将一个序列值作为参数,依次调用一个函数,在python2中直接返回列表,但在python3中返回迭代器 # map经常配合lambdas来使用 items = [1, 2, 3, 4, 5] squared = list(map(lambda x: x**2, items)) # 用于循环调用一列表的函数 def multiply(x): return (x*x
py3study
2020/01/19
4540
使用 JavaScript 创建一个兔年春节倒数计时器
我们可以通过多种方式构建 JavaScript 倒数计时,我在本教程中展示的这个兔年春节倒数计时器 是由 HTML CSS 和 JavaScript 创建的。
海拥
2023/01/07
2K0
使用 JavaScript 创建一个兔年春节倒数计时器
使用系统内置script和scriptreplay命令来记录操作记录
想要记录整个操作流程,需要使用到两个工具,script和scriptreplay,实验环境是CentOS6.6,默认都是安装的! script命令用来记录整个历史操作流程,但是必须得使用相应的参数和固定的格式。 [root@wy-xxb ~]# script -t 2> test.time -a test.out                                        指定一个时间戳文件和命令输出文件(-a表示追加) Script started, file is test.out
BGBiao
2018/02/26
1.1K0
[Python]使用Python内置包来获取Windows的分辨率
RT 这个需求是我在用Python 写GUI的时候想到的,有好多种解决方案,包括了使用win32api(可用pip install pypiwin32 安装,不过这个出问题,感觉没法用),以及wxPython(另一个Python的Windows GUI包),但是这些都不及Python内置的包好,代码如下:
用户2353021
2020/05/11
7210
【说站】mysql触发器如何使用
以上就是mysql触发器的使用,希望对大家有所帮助。更多mysql学习指路:MySQL
很酷的站长
2022/11/23
8390
【说站】mysql触发器如何使用
如何使用SQL语句创建触发器
触发器 是一种特殊类型的存储过程,它不同于我们前面介绍过的存储过程。存储过程可以通过语句直接调用,而 触发器主要是通过事件进行触发而被执行的. 例如当对某一表进行诸如UPDATE(修改)、INSERT(插入)、DELETE(删除)这些操作时,SQL Server 就会自动执行触发器所定义的SQL语句,从而确保对数据之间的相互关系,实时更新.
初阶牛
2023/10/14
3640
如何使用SQL语句创建触发器
如何使用GitLab CI/CD 触发多项目管道
持续集成(CI)是在将代码合并到master分支之前自动进行代码构建和测试的实践。这使开发人员可以及早的发现错误和频繁地合并代码,同时降低了将新错误引入主源代码存储库的风险。
DevOps云学堂
2020/07/23
7.3K0
如何使用GitLab CI/CD 触发多项目管道
Python内置函数——__import__ 的使用方法
__import__(name[, globals[, locals[, fromlist[, level]]]])
用户7886150
2020/12/19
7040

相似问题

如何按预期使用MemoryCache触发旧缓存值的删除

11

如何在RStudio中设置内置计时器来执行代码片段?

01

.NET MemoryCache.Default:我需要设置多少配置文件来设置<memoryCache>?

13

如何清除MemoryCache?

112

RxJS --在使用RxJS时,如何通过单击按钮来触发计时器?

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文