调整大小和存储图像,但要锁定,以确保它只做一次

本文关键字:一次 确保 锁定 存储 图像 调整 | 更新日期: 2023-09-27 18:11:34

我们有一些代码,允许一个图像在不同的大小请求,如果它不存在,它创建它在该大小并存储它。我们遇到的问题是,当图像不存在并且第一次尝试创建它时,会有多个请求。

虽然我们目前没有在web farm或分布在多台机器上,但这正是我们想要达到的,所以我们需要一种方法来锁定该部分,而只有一个线程/进程创建了重新大小的图像,然后允许任何线程继续返回图像。

在ASP中最好的方法是什么?. NET c#可以跨多个线程/机器进行锁定(在web farm场景中)。我想唯一真正的选择是使用某种DB表,我们可以在图像文件名/id上存储锁,但其他线程是否必须不断调用DB来查看锁是否已被释放?

如果有人对这种情况有任何经验,我将不胜感激。我们使用的是ASP。. NET MVC 4 + c# 4.5 + SQL Server 2008

调整大小和存储图像,但要锁定,以确保它只做一次

您打算在web farm的每个服务器上生成相同的图像吗?如果可以,那么您可以使用Dictionary<FileName, Key>,并让任何想要创建图像的人首先请求Key,然后将此Key呈现给创建图像的方法。此方法将检查Key,如果合适的话生成图像,然后删除Key。当Key被请求时,检查Dictionary是否有Key,是否有指定的FileName,如果已经存在,拒绝请求,否则锁定Dictionary(它将需要静态),重新检查任何现有的Key,生成并插入一个新的KeyDictionary,返回Key。如果你只想在整个农场中使用一个图像实例,那么你需要一个分布式缓存服务,并以某种方式将对图像的所有请求定向到正确的服务器——对我来说,这似乎破坏了农场/负载平衡的意义