调整大小和存储图像,但要锁定,以确保它只做一次
本文关键字:一次 确保 锁定 存储 图像 调整 | 更新日期: 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
,生成并插入一个新的Key
到Dictionary
,返回Key
。如果你只想在整个农场中使用一个图像实例,那么你需要一个分布式缓存服务,并以某种方式将对图像的所有请求定向到正确的服务器——对我来说,这似乎破坏了农场/负载平衡的意义