首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏NetCore 从壹开始

    【BlogBook书】4、Cache:缓存

    框架已经将缓存集成到了官方的IDistributedCache分布式缓存接口,可以直接使用内存缓存和分布式缓存。 默认使用内存缓存,开启Redis开关以后,使用分布式缓存。 一、相关的依赖注入配置 builder.Services.AddCacheSetup(); 相关参数设置 "Redis": { "Enable": false,//是否开启redis缓存 "ConnectionString": "127.0.0.1:6379",//可以配置密码 "InstanceName": "" //前缀 }, 两种缓存机制统一封装,并二次封装到了ICache ///

    /// 统一注册缓存 /// /// <param name="services"></param> public static void AddCacheSetup caching; public CacheManageController(ICaching caching) { _caching = caching; } /// /// 获取全部缓存

    42310编辑于 2024-01-15
  • 来自专栏漫漫架构路

    MyBatis设计思想(4)——缓存模块

    MyBatis设计思想(4)——缓存模块 一. 缓存概述 相信大家对于缓存都不陌生,MyBatis也提供了缓存的功能,在执行查询语句时首先尝试从缓存获取,避免频繁与数据库交互,大大提升了查询效率。 MyBatis有所谓的一级缓存和二级缓存,这个会在后面的核心流程中详细阐述,这里仅讨论缓存的内部实现。 void clear(); //获取缓存大小 int getSize(); } 我们知道,缓存的本质其实就是一个Map,MyBatis的缓存最基础的实现PerpetualCache,也是使用了一个 512,淘汰策略是LRU,每60s清空,且缓存为空时通过阻塞式从DB中查询数据,避免大量缓存击穿。 CacheKey的设计 既然说到了缓存,就不得不提缓存Key的设计问题。

    81020发布于 2020-09-03
  • 来自专栏张善友的专栏

    Enterprise Library 4 缓存快速入门

    this.primitivesCache = CacheFactory.GetCacheManager(); 4. 创建要添加到缓存中的条目。下列代码创建了一个 Product 类型的条目。 主动加载缓存 可以主动缓存数据以获取应用程序和进程所需要的所有状态,通常在应用程序或者进程启动时,可以在应用程序或者进程的整个生命周期内缓存数据。  主动加载缓存 1. cache = CacheFactory.GetCacheManager("Loading Scenario Cache Manager"); 4. 从 XML 文件中加载完整的数据集到缓存中。 cache = CacheFactory.GetCacheManager("Loading Scenario Cache Manager"); 4. 如果在主数据修改之前条目已经在缓存中,并在修改后从缓存中获取它,从缓存中获取的数据将与主数据源中的数据不匹配。

    1.4K90发布于 2018-01-19
  • 来自专栏IMWeb前端团队

    Webpack 4 如何优雅打包缓存文件

    本文作者:IMWeb 结一 原文出处:IMWeb社区 未经同意,禁止转载 一般来说,对于静态资源,我们都希望浏览器能够进行缓存,那样以后进入页面就可以直接使用缓存资源,页面直接直逼火箭速度打开 当然浏览器缓存方法有很多种,这里只简单讨论下 webpack 利用 hash 方式修改文件名,以达到缓存目的。 实战 hash 基础的配置文件如下(基于webpack 4,入口文件分别为 index 和 detail,其中每个文件中引入了一个图片): module.exports = { mode: 'none 为了解决这个不稳定的因素,webpack 4 提供了一个配置可以直接把 boilerplate 给单独抽离出来,配置如下: optimization: { runtimeChunk: 'single 于是我们也需要把数字改掉就好,webpack 4 在 optimization 新增了一个 namedChunks 配置,该配置开发环境为 true,生产环境为 false,所以在生产环境的时候我们为了构建稳定的

    1.3K10发布于 2019-12-03
  • 来自专栏用户9379088的专栏

    如果不知道这4缓存模式,敢说懂缓存吗?

    概述在系统架构中,缓存可谓提供系统性能的最简单方法之一,稍微有点开发经验的同学必然会与缓存打过交道,最起码也实践过。如果使用得当,缓存可以减少响应时间、减少数据库负载以及节省成本。 在这里,为大家系统地讲解4缓存模式以及它们的使用场景、流程以及优缺点。缓存策略的选择本质上来讲,缓存策略取决于数据和数据访问模式。换句话说,数据是如何写和读的。例如:系统是写多读少的吗? Write Behind Pattern:又叫Write Back,异步缓存写入模式上述缓存策略的划分是基于对数据的读写流程来区分的,有的缓存策略下是应用程序仅和缓存交互,有的缓存策略下应用程序同时与缓存和数据库进行交互 也就是说,当应用从缓存中查询某条数据时,如果数据不存在则由缓存来完成数据的加载,最后再由缓存返回数据结果给应用程序。 甚至有效的缓存数据被无效的缓存数据给清除掉。Write-BehindWrite-Behind和Write-Through在”程序只和缓存交互且只能通过缓存写数据“这方面很相似。

    1.7K20编辑于 2023-04-25
  • 来自专栏丑胖侠

    如果不知道这4缓存模式,敢说懂缓存吗?

    在这里,为大家系统地讲解4缓存模式以及它们的使用场景、流程以及优缺点。 缓存策略的选择 本质上来讲,缓存策略取决于数据和数据访问模式。换句话说,数据是如何写和读的。 例如: 系统是写多读少的吗? ,有的缓存策略下应用程序同时与缓存和数据库进行交互。 而缓存中的数据从哪里来是由缓存决定的。 Cache Aside是由调用方负责把数据加载入缓存,而Read Through则用缓存服务自己来加载,从而对应用方是透明的。 也就是说,当应用从缓存中查询某条数据时,如果数据不存在则由缓存来完成数据的加载,最后再由缓存返回数据结果给应用程序。 甚至有效的缓存数据被无效的缓存数据给清除掉。 Write-Behind Write-Behind和Write-Through在”程序只和缓存交互且只能通过缓存写数据“这方面很相似。

    93820编辑于 2022-07-29
  • 来自专栏用户9378866的专栏

    如果不知道这4缓存模式,敢说懂缓存吗?

    概述在系统架构中,缓存可谓提供系统性能的最简单方法之一,稍微有点开发经验的同学必然会与缓存打过交道,最起码也实践过。如果使用得当,缓存可以减少响应时间、减少数据库负载以及节省成本。 在这里,为大家系统地讲解4缓存模式以及它们的使用场景、流程以及优缺点。缓存策略的选择本质上来讲,缓存策略取决于数据和数据访问模式。换句话说,数据是如何写和读的。例如:系统是写多读少的吗? Write Behind Pattern:又叫Write Back,异步缓存写入模式上述缓存策略的划分是基于对数据的读写流程来区分的,有的缓存策略下是应用程序仅和缓存交互,有的缓存策略下应用程序同时与缓存和数据库进行交互 也就是说,当应用从缓存中查询某条数据时,如果数据不存在则由缓存来完成数据的加载,最后再由缓存返回数据结果给应用程序。 甚至有效的缓存数据被无效的缓存数据给清除掉。Write-BehindWrite-Behind和Write-Through在”程序只和缓存交互且只能通过缓存写数据“这方面很相似。

    44710编辑于 2023-05-24
  • 来自专栏Postgresql源码分析

    innodb与ext4缓存交互分析

    innodb与ext4缓存交互分析 一般来说对一个文件的写入操作包括两部分,对数据本身的写入操作,以及对文件属性(metadata元数据)的写入操作(这里的文件属性包括目录,inode等)。 (可通过设置磁盘控制器参数绕过) 这里我们使用术语“缓冲”(一般为buffer)来表示对数据写的暂存,使用术语“缓存”(一般为cache)来表示对数据读的暂存。 缓存主要是在内存中暂“存”从磁盘读到的数据,以便接下来对这些数据的访问不用再次访问慢速的底层存储设备。 cache能加快写入速度,当然是极好的东西,但磁盘一般会对cache内缓存数据排序使之最优刷新到磁盘,这样就可能导致要刷新的实际数据和journal顺序错乱。 data=ordered ext4 支持根据用户需求采用多种模式的日志记录。

    1.5K40编辑于 2022-05-12
  • 来自专栏跟牛老师一起学WEBGIS

    Openlayers4+servlet实现切片的本地缓存

    概述 本文实现的是结合Openlayers4和java servlet实现公网资源切片的本地缓存。 优点 相比较其他下载利器,本实例具有以下优点: 1. 实现简单,操作简单; 2. 结合web,看到哪下到哪,主动保存未缓存的切片; 4. 可通过修改URL和代码缓存多种地图切片。 缺点 鉴于web的实现,该切片缓存的方式具有以下缺点: 1. 被动式缓存,需要用户浏览需要下载的区域; 2. 无法批量缓存。 3. 主要是针对开发人员的,非开发人员使用有困难; 实现效果 ? ? ? 实现思路 ? VERSION': '1.1.1', STYLES: '', LAYERS: 'bj_grid:bou2_4p "/tile"}) public class TileServiceServlet extends HttpServlet { private String url = "https://s4.

    97330发布于 2018-10-23
  • 来自专栏张善友的专栏

    ASP.NET 4 AppFabric 输出缓存提供程序

    显式缓存使用方式让你能通过AppFabric提供的缓存API,用编程的方式添加、删除并管理缓存中的数据项。 这是一个非常强大的工具来帮助你定制应用程序数据的缓存策略及使用模式,不过你需要对数据缓存的原则有一定的理解。隐式缓存使用方式利用了默认的缓存策略,能在常用的场景中发挥作用。 隐式缓存使用的两个例子包括ASP.NET会话状态和HTML页面缓存(即输出缓存)。 关于ASP.NET 4.0的Output Cache的使用,请参考ScottGU的VS 2010 和 .NET 4.0 系列之《ASP.NET 4中的可扩展输出缓存》篇。 ASP.NET开发团队在codeplex上发布了ASP.NET 4 Providers for AppFabric Caching,里面有两个提供者ASP.NET会话状态和HTML页面缓存(即输出缓存

    2.6K90发布于 2018-01-19
  • 来自专栏爱笑的架构师

    【玩转Redis面试第4讲】Redis缓存雪崩、缓存穿透、缓存击穿对比看这一篇就够了

    在实际生产环境中有时会遇到缓存穿透、缓存击穿、缓存雪崩等异常场景,为了避免异常带来巨大损失,我们需要了解每种异常发生的原因以及解决方案,帮助提升系统可靠性和高可用。 缓存穿透 什么是缓存穿透? 缓存击穿 什么是缓存击穿? (2)加互斥锁 跟缓存击穿解决思路一致,同一时间只让一个线程构建缓存,其他线程阻塞排队。 (3)缓存永不过期 跟缓存击穿解决思路一致,缓存在物理上永远不过期,用一个异步的线程更新缓存。 (4)双层缓存策略 使用主备两层缓存: 主缓存:有效期按照经验值设置,设置为主读取的缓存,主缓存失效后从数据库加载最新值。 备份缓存:有效期长,获取锁失败时读取的缓存,主缓存更新时需要同步更新备份缓存缓存预热 什么是缓存预热?

    1.1K21发布于 2020-09-24
  • 来自专栏全栈程序员必看

    ue4在c盘的缓存_怎么清除ps在C盘的缓存

    大家好,可能很多新手使用UE4的时候会发现C盘越来越小了,那是因为UE4引擎的缓存文件默认保存在C盘的缘故。 下面来告诉大家怎么解决这个问题。 概述 一、 出现的问题:UE4缓存文件会导致C盘膨胀! 二、 解决的方式:请严格按照下列步骤来执行 1. 更改UE4缓存路径 2. 删除UE4在C盘的缓存 3. 删除各个引擎版本SwarmAgent(联机构建)的缓存文件 执行 一、 更改UE4缓存路径 这一步是为了将UE4缓存路径从C盘转换到你项目当前的文件下。这样做是为了: 1. 好了,这样子修改好之后重新打开你的项目缓存路径将会生成在你的项目文件夹内,如图: 二、 删除UE4在C盘的缓存 在做这一步操作的时候请确定已经完成了第一步 然后请显示隐藏文件功能打开 ) 因为当初使用的时候可能有很多人没有更改过缓存路径,甚至有的也在C盘里面,那么我们可以找到并删掉。

    1.8K20编辑于 2022-11-10
  • 来自专栏Android知识点总结

    4-SII--☆Android缓存文件(带有效时长)封装

    零、前言 [1]把我的缓存文件工具改写成了策略模式,感觉还不错。 [2]以前静态方法调用,很方便,但看着就是不爽,代码真的太冗余了。 [4]如果不了解SharedPreferences,可以先看这篇:1-SII--SharedPreferences完美封装 缓存策略类图 ? 缓存策略.png 一、使用: //新建缓存对象 CacheWorker innerCache = new CacheWorker(new InnerFileStrategy (this)); //设置缓存 innerCache.setCache("toly", "hehe", 10); //获取缓存 String value = innerCache.getCache("toly"); //SD卡缓存 CacheWorker sdCache = new CacheWorker(

    55220发布于 2018-09-26
  • 来自专栏seth-shi的专栏

    Slim4 中使用中间件缓存请求

    通常一个请求过来,我们从数据库中查询出来,然后数据转换处理完成之后返回 但是有一些页面,比如首页或者某个接口数据不是经常改动的,请求多了,会造成影响 所以,我们可以第一次请求处理完成输出之前,把内容缓存到 如果缓存过期,那么重复 [3, 4] 以下是Slim4框架中的实现 <? $cacheKey = base64_encode($requestPath . json_encode($requestParameters)); // 这里,你可以从缓存中获取 ,因为我们需要响应头等信息, // 还缓存了 body,这里最为重要,slim4 的 body 使用 php_temp 流, // 而 PHP 中说到,流是不能序列化的。 所以我们也缓存一个内容 file_put_contents($cacheKey, serialize([$response, (string)$response->getBody()])

    41810编辑于 2023-12-18
  • 来自专栏张善友的专栏

    Enterprise Library 4 缓存应用程序块的设计

    保存内存缓存的状态与后端存储保持同步。 设计亮点 图 1 说明了缓存应用程序块中关键类的相互关系。 ? 然后应用程序就可以向 CacheManager 对象发出请求以获取缓存的数据、添加数据到缓存以及从缓存中移除数据。 每个名称只能用于一个缓存,要创建多个缓存的实例,就得使用多个名称。要注意的是,不同的缓存,也就是不同名称的缓存,不能共享同样的后端存储。每个 CacheManager 对象也只有一个后端存储。 使用配置控制台,缓存存储可以配置为使用命名的对象加密算法提供程序。命名的提供程序也可以在用条目数据组装缓存之前从缓存存储中读取数据,解密数据时使用。 它定义了缓存的条目的有效性基于一个特定的文件。如果文件被修改,缓存的条目就不再有效并从缓存中移除。 Add 方法有二个重载。

    1.3K60发布于 2018-01-19
  • 来自专栏coding for love

    4-10 webpack 与浏览器缓存(caching)

    1.简介 浏览器在加载资源时,为了提高效率,会使用一定的缓存策略,比如强缓存,与协商缓存,那么如何保证在资源发布以后浏览器能拿到最新的资源而不是缓存呢? 这是由于 webstorm 服务器自动开启了协商缓存功能,但是我们的服务器没有开启。 那么对于没有开启协商缓存功能的服务器,如何更新资源呢? 4. contenthash contenthash 占位符,是根据内容生成的 hash,内容不变,hash 就不变,如下: output: { path: path.resolve 小结 实际开发中,devserver 已经默认开启协商缓存,开发时其实不大必要设置 contenthash,但是在生产环境中还是应该使用该占位符来标识资源。 参考 浏览器的协商缓存与强缓存 https://webpack.js.org/configuration/output/#outputfilename https://webpack.js.org/

    83730发布于 2020-03-20
  • 来自专栏Leetcode名企之路

    缓存缓存穿透、缓存雪崩、缓存击穿

    原文:https://www.cnblogs.com/raichen/p/7750165.htm 缓存穿透 概念 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存 缓存雪崩 概念 大量的key设置了相同的过期时间,导致在缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。 解决办法 从业务层面。 可以给缓存设置过期时间时加上一个随机值时间,使得每个key的过期时间分布开来,不会集中在同一时刻失效。 缓存击穿(并发) 概念 高并发系统,如果一个缓存失效,存在多进程同时查询DB,同时更新缓存。 这对缓存和DB都是比较大的挑战。 解决办法 使用互斥锁(mutex key): 这种解决方案思路比较简单,就是只让一个线程构建缓存,其他线程等待构建缓存的线程执行完,重新从缓存获取数据就可以了(如下图) ?

    3K20发布于 2018-10-25
  • 来自专栏鳄鱼儿的技术分享

    Redis缓存缓存穿透、缓存击穿、缓存雪崩

    ☘️解决思路 思路一:由于缓存穿透是因为缓存没有生效,是否可以针对DB不存在的数据设置缓存空值,让请求到缓存就OK。缓存的有效时间可以设置短点,如30s,避免误伤正常业务。 缓存击穿 缓存击穿是指数据库有,缓存没有的数据,大量请求访问这个缓存不存在的数据,最后请求打到DB可能导致DB宕机。 思路三:保证热点数据在缓存中,可以设置热点缓存数据永不过期;或者采用定时任务去定时刷新缓存数据与过期时间,保证缓存数据存在。 缓存雪崩 缓存雪崩是指数据库有,缓存没有的数据,大量请求访问这些缓存不存在的数据,最后请求打到DB可能导致DB宕机。 缓存一致性 缓存一致性指的是缓存与DB之间的数据一致性,我们需要通过各种手段来防止缓存与DB不一致,我们要保证缓存与DB的数据一致或者数据最终一致。 ☘️解决思路 思路一:先删除缓存再更新数据。

    1.2K10编辑于 2024-05-22
  • 来自专栏架构师之路

    你以为优化就要用缓存4缓存常见误用,你中招了吗?(第78讲)

    有架构师说“缓存是万金油,哪里有问题,加个缓存,就能优化”,缓存的滥用,可能会导致一些错误用法。 4缓存常见误用,你中招了吗? 误用一:把缓存作为服务与服务之间传递数据的媒介。 如上图: 1. 多个服务关联同一个缓存实例,会导致服务耦合; 误用二:使用缓存未考虑雪崩。 常规的缓存玩法,如上图: 2. 缓存不命中,再读数据库; 什么时候会产生雪崩? 方案一:高可用缓存 如上图:使用高可用缓存集群,一个缓存实例挂掉后,能够自动做故障转移。 方案二:缓存水平切分 如上图:使用缓存水平切分,一个缓存实例挂掉后,不至于所有的流量都压到数据库上。 总结 缓存使用小技巧: 1. 服务与服务之间不要通过缓存传递数据; 2. 如果缓存挂掉,可能导致雪崩,此时要做高可用缓存,或者水平切分; 3. 调用方不宜再单独使用缓存存储服务底层的数据,容易出现数据不一致,以及反向依赖; 4. 不同服务,缓存实例要做垂直拆分; 这些坑,你踩过吗? 知其然,知其所以然。 思路比结论更重要。

    8.5K12编辑于 2025-07-16
  • 来自专栏老铁丁D

    缓存穿透,缓存雪崩,缓存击穿

    缓存穿透 缓存穿透是指查询一个一定不存在的数据,即缓存和数据库中都没有的数据。 由于缓存不命中,并且出于容错考虑,如果从数据库查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,失去了缓存的意义。 缓存击穿 缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力 如何解决缓存击穿 一 缓存雪崩后果 1、redis集群彻底崩溃 2、缓存服务大量对redis的请求hang住,占用资源 3、缓存服务大量的请求打到源头服务去查询mysql,直接打死mysql 4、源头服务因为mysql被打死也崩溃 ,但是缓存过期后,没有数据提供 如何解决缓存雪崩 分成事前,事中,事后三步骤 事前 一:错开设置过期时间(比如电商缓存商品可以对商品过期时间加一个随机因子,错开缓存过期时间) 发生缓存雪崩之前,事情之前

    2.1K30编辑于 2022-08-12
领券