首页 > 其他分享 >lock 锁的使用场景

lock 锁的使用场景

时间:2024-11-01 22:20:44浏览次数:1  
标签:Product 场景 Name memoryCache lock products 使用 new public

  public class ProductService : IProductService
  {
      private readonly object _locker = new object();
      private readonly IMemoryCache _memoryCache;
      public ProductService(IMemoryCache memoryCache)
      {
          _memoryCache = memoryCache;
      }
      public IEnumerable<Product> GetProducts()
      {
          List<Product> products;
          if (!_memoryCache.TryGetValue("Products", out products))
          {
              if (!_memoryCache.TryGetValue("Products", out products))
              {//当内存中不存在是,则从数据库中获取数据
                  lock (_locker)
                  {//当创建缓存时,需要加锁,防止多个线程同时创建缓存
                      products = new List<Product>
                      {
                          new Product { Id = 1, Name = "Product 1" },
                          new Product { Id = 2, Name = "Product 2" },
                          new Product { Id = 3, Name = "Product 3" }
                      };
                      _memoryCache.Set("Products", products, new MemoryCacheEntryOptions
                      {
                          AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
                      });
                  }
              }
          }
          return products;
      }
  }

  public interface IProductService
  {
      IEnumerable<Product> GetProducts();
  }

  public class Product
  {
      public int Id { get; set; }
      public string Name { get; set; }
  }

  

标签:Product,场景,Name,memoryCache,lock,products,使用,new,public
From: https://www.cnblogs.com/friend/p/18521383

相关文章

  • 如何使用GitHub上传文件
    使用GitHub上传文件的方法:1.创建GitHub仓库;2.使用GitHubDesktop上传文件;3.使用命令行上传文件;4.检查GitHub仓库。在开始之前,您需要一个GitHub账号。如果还没有账号,您可以在GitHub官方网站上注册一个。1.创建GitHub仓库在开始之前,您需要一个GitHub账号。如果还没有账号,您可以......
  • 三周精通FastAPI:27 使用使用SQLModel操作SQL (关系型) 数据库
    官网文档:https://fastapi.tiangolo.com/zh/tutorial/sql-databases/SQL(关系型)数据库¶FastAPI不需要你使用SQL(关系型)数据库。但是您可以使用任何您想要的关系型数据库。这里我们将看到一个使用SQLModel的示例。SQLModel是在SQLAlchemy和Pydantic的基础上构建的。它......
  • 使用批处理,切换电源计划,切换自动休眠时间
    1、打开命令提示符:按Win+R,输入cmd,然后按Enter。2、列出电源计划的GUIDpowercfg/list获取输出结果取下:C:\Users\Administrator>powercfg/list现有电源使用方案(*Active)-----------------------------------电源方案GUID:381b4222-f694-41f0-****-ff5bb260df......
  • 使用 AutoTrain 进行图像分类
    使用AutoTrain进行图像分类https://huggingface.co/blog/autotrain-image-classification2022年9月28日发布GitHub上的更新尼玛·博斯卡里诺尼玛·博斯卡里诺所以,您已经听说了机器学习领域正在发生的所有酷事,并且想要加入其中。只有一个......
  • JWT在SpringBoot项目中的使用方法与优劣性
    JWT介绍JWT(JSONWebToken)是一种用于在网络应用环境中安全地传递信息的开放标准(RFC7519)。它是一种基于JSON的令牌格式,广泛用于身份验证和信息交换。JWT的结构JWT通常由三部分组成:头部(Header)、有效载荷(Payload)和签名(Signature)。这三部分通过.字符连接在一起,形成一......
  • C语言中的数组初始化和使用技巧
    在编程语言C中,数组初始化和有效使用是至关重要的。数组是一种存储固定大小顺序集合的变量,通常用于存储相同类型的元素。数组的初始化涉及为数组元素赋予初始值、辨识数组边界,以及选择合适的数组类型等。例如,初始化一个整型数组可以使用intarr[10]={0};这会创建一个有10个整......
  • PHP使用RabbitMQ
    文档官网:https://www.rabbitmq.com/tutorials/tutorial-one-phpRabbitMQ关系说明:交换机:一个交换机可以有多个路由(routeKey),一个路由(routeKey)可以绑定多个队列。在发布消息的时候指定交换机对应的路由(routeKey),即可对应到该路由(routeKey)对应的队列。队列:常驻内存监听进......
  • ARKit:ARKit场景构建与物体添加_2024-07-25_16-48-31.Tex
    ARKit:ARKit场景构建与物体添加ARKit基础介绍ARKit框架概述ARKit是苹果公司为iOS设备提供的增强现实开发框架,它允许开发者在iOS应用中创建沉浸式的AR体验。ARKit通过设备的摄像头、传感器和处理器,能够实时地检测和跟踪真实世界中的平面、光照、运动和环境特征,从而在这些平......
  • 电路板和芯片的使用有什么区别
    电路板和芯片在电子设备中扮演着关键角色,它们是现代电子技术不可或缺的组成部分。尽管二者在电子系统中常常共同工作,但它们的功能、设计原理、应用场景和技术要求有着本质的区别。本文旨在探讨电路板和芯片在使用上的主要区别,包括:1.基本功能和构造差异;2.设计和制造过程;3.应用领域......
  • 【Java Web】使用JDBC操作数据库(含代码示例)
    文章目录JDBC主要组成部分访问数据库步骤数据库交互StatementPreparedStatementSQL注入攻击演示示例单查询多查询返回记录数JDBC(JavaDatabaseConnectivity)是Java中用于执行SQL语句的标准API,它提供了一种统一的方式来访问各种关系型数据库。JDBC使得开发者能够以......