首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ASP.NET缓存问题

ASP.NET缓存问题
EN

Stack Overflow用户
提问于 2014-06-09 23:14:13
回答 1查看 178关注 0票数 0

我缓存MyData以避免不必要的对web服务的调用,但似乎存在一些问题。缓存工作正常是可能的,但我没有弄清楚是什么导致了问题。我就是这样缓存数据的。我使用静态缓存助手。你可以谷歌“缓存助手c#”,如果你需要这段代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     private static object locker = new object();
    private static List<SomeDataDto> myData;
    private static List<SomeDataDto> MyData{
        get{
            if (CacheHelper.Exists("MyData") == false){
                lock (locker){

                    if (CacheHelper.Exists("MyData") == true){
                        myData=(List<SomeDataDto>)CacheHelper.GetCacheObject("MyData");
                    }
                    else
                    if (CacheHelper.Exists("MyData") == false){
                        var myData = GetSomethingFromDatabase("en", true);
                    CacheHelper.Add(myData, "MyData", 360);
                }
            }
            }
            return (List<SomeDataDto>)CacheHelper.GetCacheObject("MyData");
        }
    }

我在我的页面上调用这个方法,这个方法会抛出错误(有时!)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  public SomeObjectToReturn GetOneItem(string language, string id)
    {

        return MyData.Where(x => x.Language == language.ToUpper()).SelectMany(x => x.Something).SelectMany(x => x.SomethingElse).Where(x => x.ID == id).FirstOrDefault();
    }

对于15个不同的id,我将此方法调用15次,但它适用于10项或8项或类似的内容。如果我编辑配置以删除缓存,其他一些id就无法工作。所以:

  1. 第一次使用id=6
  2. 第二次它不起作用了id=6

它被损坏了吗?Web服务不返回列表中的所有元素?(他们太多了吗?)

EN

回答 1

Stack Overflow用户

发布于 2014-06-10 00:03:53

您必须将返回(列表)CacheHelper.GetCacheObject(“MyData”)包含在锁中,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    get{
        lock (locker){
           if (CacheHelper.Exists("MyData") == false){

                if (CacheHelper.Exists("MyData") == true){
                    myData=(List<SomeDataDto>)CacheHelper.GetCacheObject("MyData");
                }
                else
                if (CacheHelper.Exists("MyData") == false){
                    var myData = GetSomethingFromDatabase("en", true);
                CacheHelper.Add(myData, "MyData", 360);
            }
          }
         return (List<SomeDataDto>)CacheHelper.GetCacheObject("MyData");
       }
    }

如果您在编写或删除时阅读,则行为可能会与您预期的不同。List对象不是线程安全的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24135000

复制
相关文章
ASP.NET 缓存(3)
有2种方式来实现缓存部分页。 片段缓存:这种情况下,你把确定要缓存的内容,包裹在一个专用的用户控件里,然后只需要对这个控件做输出缓存就行。 post-cache substitution 缓存后替换。在这种情况下,你对动态变化的内容不进行缓存,只需要用Substitution控件替换这个动态内容就行。
py3study
2020/01/14
7650
ASP.Net Cache(缓存)
实验目的: 把数据放到Cache中,在指定的时间内,可以直接从Cache中获取,避免对数据库等的压力。 案例:人员列表的缓存 (*)页面缓存、数据库源缓存。。。 (*)memcached 代码 Cache.html <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Cache.aspx.cs" Inherits="wj.Cache" %> <!DOCTYPE html> <html xmlns="http://w
静心物语313
2020/03/24
8630
ASP.Net Cache(缓存)
ASP.NET 缓存 Cache
ASP.NET 提供一个功能完整的缓存引擎,页面可使用该引擎通过 HTTP 请求存储和检索任意对象. 缓存的生存期与应用程序的生存期相同,也就是说,当应用程序重新启动时,将重新创建缓存。 将数据添加到缓存中 1。通过指定其键和值将项添加到缓存中 Cache["txt"] = "a"; 2.通过使用 Insert(重载Insert方法)方法将项添加到缓存中 Cache.Insert("txt", "a"); 下列代码显示如何设置相对过期策略。它插入一个项,该项自上次访问后 10 分钟过期。注意 Date
磊哥
2018/04/26
1.3K0
ASP.NET MVC编程——缓存
Web缓存分为服务端缓存和客户端缓存。 1 服务端缓存 1.1请求域内的缓存:HttpContext.Items 类型: HttpContext.Items的类型为IDictionary,且键和值都是object类型 访问性: 只存在于当前请求范围内。 例: HttpContext.Items["key"] ="value"; var value = HttpContext.Items["key"]; 1.2用户域内的缓存:HttpContext.Session 类型: HttpContext.Sessio
甜橙很酸
2018/03/30
1.9K0
ASP.NET cache缓存的用法
本文导读:在.NET运用中经常用到缓存(Cache)对象。有HttpContext.Current.Cache以及HttpRuntime.Cache,HttpRuntime.Cache是应用程序级别的,而HttpContext.Current.Cache是针对当前WEB上下文定义的。HttpRuntime下的除了WEB中可以使用外,非WEB程序也可以使用。
跟着阿笨一起玩NET
2018/09/19
1.2K0
ASP.NET 2.0 缓存翻译草稿
ASP.NET 2.0 缓存翻译草稿 命名空间: System.Web.Caching ,这个空间是ASP.NET的基础结构中的重要部分,比如:session就是存储在cache中的。 Cache
田春峰-JCJC错别字检测
2022/05/07
1K0
Asp.Net Cache缓存技术学习
本文参考自Fish Li的细说 ASP.NET Cache 及其高级用法 一、前言,相信大多数做网站开发的都知道缓存技术对于网站的重要性,它对于网站的性能优化起着至关重要的作用. 关于缓存的技术大致
郑小超.
2018/01/24
1.4K0
Asp.Net Cache缓存技术学习
缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题!
前面一节说到了《为什么说Redis是单线程的?》,今天给大家整理一篇关于Redis经常被问到的问题:缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等概念的入门及简单解决方案。
Java后端技术
2018/08/09
3.8K0
缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题!
Mybatis 缓存问题
当我们连续通过Mybatis 查询同一条Sql的时候两次,在短时间内,只会在第一次查询时会走SQL,第二次查询,就不会出现连接数据库(Opening JDBC Connection)查询的问题了!第二次使用的是 一级缓存!
收心
2022/01/19
4180
Redis 缓存问题
在默认情况下,用户请求数据时,会先在缓存(Redis)中查找,若没找到即缓存未命中,再在数据库中进行查找,数量少可能问题不大,可是一旦大量的请求数据(例如秒杀场景)缓存都没有命中的话,就会全部转移到数据库上,造成数据库极大的压力,就有可能导致数据库崩溃。网络安全中也有人恶意使用这种手段进行攻击被称为洪水攻击。
用户9615083
2022/12/25
1.2K0
Redis 缓存问题
缓存设计问题
很多使用场景,查询的缓存数据都是由定时任务取刷新,然后缓存查不到从 DB 查了在更新缓存。如果这些 key 在同一时间失效, 那么失效的时候,大量的请求过来。就会直接打到 DB 上, 这个时候 DB 很可能被打垮,即使马上重启也会被新的流量打垮。
leobhao
2022/06/28
3540
Redis 缓存问题
缓存穿透缓存穿透指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库如果有恶意用户使用无数的线程并发访问不存在数据,这些请求都会到达数据库,很有可能会将数据库击垮解决方案缓存空对象思路:用户请求某一个 id 时,redis 和数据库中都不存在,我们直接将 id 对应空值缓存到 redis,这样下次用户重复请求这一 id 时,redis 中就可以命中(命中 null),就不会去请求数据库优点:实现简单,维护方便缺点:- 额外的内存消耗(可以通过添加 TTL 解决)图片-
ruochen
2022/09/07
1.7K0
Redis 热键问题,缓存击穿,缓存穿透,缓存雪崩
描述:热键被大量客户端访问,导致大量网络流量集中在一台Redis服务器上,服务器宕机。
执生
2020/10/14
1.1K0
Redis缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题
由于原有缓存失效,新缓存未到期间,比如我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期,所有原本应该访 问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。
joshua317
2021/11/10
2.2K0
[转]ASP.NET 缓存:方法和最佳实践
  原文链接:http://msdn.microsoft.com/zh-cn/library/aa478965.aspx
拓荒者IT
2019/09/26
1.6K0
ASP.NET Core ResponseCache进行缓存操作
本章将介绍客户端缓存将介绍浏览器缓存和服务端缓存,使用浏览器缓存将减少对web服务器的请求次数,同时可以提升性能,避免重复的运算浪费。
HueiFeng
2020/02/27
3K0
ASP.NET Core ResponseCache进行缓存操作
ASP.NET集群内容缓存工具NWebCache
Alachisoft 发布的NWebCache,这是一个ASP.NET集群内容缓存工具。NWebCache缓存动态页面和根据数据库依赖,当数据库修改时保持同步。NWebCache同时提供基于session的缓存,允许多个session共享缓存内容,也允许不同session分别缓存页面内容。 NWebCache几乎可以缓存所有类型的响应,包括ASP.NET输出,视图状态,HTML 页面,图片,脚本文件,PDF文件等。任何HTTP/HTTPS请求,只要需要与web服务器通讯都会通过NWebCache提供集群缓
张善友
2018/01/30
1.6K0
ASP.NET集群内容缓存工具NWebCache
Redis 入门与 ASP.NET Core 缓存
如果你还没有 redis 集群,可以参考笔者的另一篇文章:搭建分布式 Redis Cluster 集群与 Redis 入门
痴者工良
2021/04/26
2.1K0
Redis缓存穿透、缓存雪崩问题分析
把redis作为缓存使用已经是司空见惯,当redis中的数据量起来了以后你就得考虑以下几个问题:
全栈程序员站长
2022/09/07
3740
ASP.NET Core中的缓存[1]:如何在一个ASP.NET Core应用中使用缓存
.NET Core针对缓存提供了很好的支持 ,我们不仅可以选择将数据缓存在应用进程自身的内存中,还可以采用分布式的形式将缓存数据存储在一个“中心数据库”中。对于分布式缓存,.NET Core提供了针对Redis和SQL Server的原生支持。除了这个独立的缓存系统之外,ASP.NET Core还借助一个中间件实现了“响应缓存”,它会按照HTTP缓存规范对整个响应实施缓存。不过按照惯例,在对缓存进行系统介绍之前,我们还是先通过一些简单的实例演示感知一下如果在一个ASP.NET Core应用中如何使用缓存。
蒋金楠
2018/02/08
2.6K0
ASP.NET Core中的缓存[1]:如何在一个ASP.NET Core应用中使用缓存

相似问题

ASP.NET缓存问题

12

缓存asp.net的问题

10

asp.net中的缓存问题

12

asp.net和IIS缓存问题

21

asp.net中的缓存问题

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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