我也来谈谈缓存

最近在做项目的时候,一直都在讨论如何把缓存、日志、权限以AOP的形式横切进系统中。 缓存是我们经常需要用到的。但是缓存是什么?为什么要用缓存呢?

一、缓存是什么?

缓存是计算机领域非常通用的概念,说白了缓存就是对数据的一个拷贝,即将存储在硬盘上的数据拷贝到内存中一份。当我们做IO操作的时候,就不需要直接从数据库进行读写,从而提高应用的运行性能。我们要知道缓存存在的地方,必然是数据交换频繁的地方。

二、为什么要使用缓存?

计算机存储设备的存储介质是不一样的,所以设备的性能个不相同,读取速率也不一样。 读取速率:CPU缓存 > 内存 > 硬盘。而缓存把频繁访问的数据保存到内存中,不用直接读取数据库,内存读取的速率高于硬盘读取。 缓存的基本思想就是把数据从一个地点拷贝到另一个地点,使之检索起来更快。

三、缓存需要注意的问题:脏数据

什么是脏数据?脏数据就是当数据库里的数据被修改,但是缓存里的数据依然未改变,那么此时缓存里的数据就可以称为脏数据。

假如上图的缓存里数据被应用A修改了,那么缓存数据的数据已经与数据文件中的数据不一致,那么数据1这时候就称为了脏数据。那么此时应用B就不能再去读出脏数据1了,因为它已经跟数据库里的不一致了,否则就形成了脏读。

缓存是如何避免脏数据这个问题的呢?

每次当我们执行对书库更改操作时,都应该先去清理缓存,将缓存里的数据清空。等到应用进来读取时,会先去查找缓存,如果缓存里有数据则直接返回,如果没有则到数据库中去查找,并将其放入到缓存中去,以便再次查找,这样就确保了数据同步性。

时间: 2024-10-01 07:10:16

我也来谈谈缓存的相关文章

谈谈 缓存和数据库一致性的问题

通常来说,在我们的系统中会把数据永久保存在DB中,并且冗余一份数据在缓存中.读请求优先从缓存读取数据,没有再从DB读取,如下图: 这样做的好处是可以减小DB的压力,提高请求的响应速度. 但这种架构在提升系统读请求处理能力的同时,给系统写请求的处理带来了不少的麻烦.因为数据在DB跟缓存中各自保存了一份,如何保证它们之间的数据一致就是需要注意的问题了. 当处理写请求时有两种方式: 一.先写缓存再写DB 如果第一步写缓存失败,直接返回,无影响. 如果缓存写成功,DB写失败,此时如果不清除缓存中已写入的

web开发中对缓存的使用

很久没有发表随笔了,最近工作不是太忙,抽点时间 给大家谈谈缓存吧 ; 在我从事web开发的几年实践中  接触了缓存技术 也是比较多的,在最初的 项目当中 我们用到 hibernate 的 一二级缓存,在到后期的 nosql产品  redis,memcache,还有互联网中常用的  页面缓存 oscache 缓存使用场景介绍 一级缓存是对方法层面的缓存 只是类级别的 缓存用处不大  只是在配置当中进行开启 二级缓存在SqlFactory  层次的缓存   这样的缓存配置 网上还是很多的  http

分布式系统之缓存的微观应用经验谈(一) 【基础细节篇】

分布式系统之缓存的微观应用经验谈(一) [基础细节篇] 前言 近几个月一直在忙些琐事,几乎年后都没怎么闲过.忙忙碌碌中就进入了2018年的秋天了,不得不感叹时间总是如白驹过隙,也不知道收获了什么和失去了什么.最近稍微休息,买了两本与技术无关的书,其一是Yann Martel 写的<The High Mountains of Portugal>(葡萄牙的高山),发现阅读此书是需要一些耐心的,对人生暗喻很深,也有足够的留白,有兴趣的朋友可以细品下.好了,下面回归正题,尝试写写工作中缓存技术相关的一

[原创]分布式系统之缓存的微观应用经验谈(四) 【交互场景篇】

分布式系统之缓存的微观应用经验谈(四) [交互场景篇] 前言 近几个月一直在忙些琐事,几乎年后都没怎么闲过.忙忙碌碌中就进入了2018年的秋天了,不得不感叹时间总是如白驹过隙,也不知道收获了什么和失去了什么.最近稍微休息,买了两本与技术无关的书,其一是 Yann Martel 写的<The High Mountains of Portugal>(葡萄牙的高山),发现阅读此书是需要一些耐心的,对人生暗喻很深,也有足够的留白,有兴趣的朋友可以细品下.好了,下面回归正题,尝试写写工作中缓存技术相关的

redis缓存介绍以及常见问题浅析

# 没缓存的日子: 对于web来说,是用户量和访问量支持项目技术的更迭和前进.随着服务用户提升.可能会出现一下的一些状况: 页面并发量和访问量并不多,mysql足以支撑自己逻辑业务的发展.那么其实可以不加缓存.最多对静态页面进行缓存即可. 页面的并发量显著增多,数据库有些压力,并且有些数据更新频率较低反复被查询或者查询速度较慢.那么就可以考虑使用缓存技术优化.对高命中的对象存到key-value形式的redis中,那么,如果数据被命中,那么可以省经效率很低的db.从高效的redis中查找到数据.

我也要谈谈大型网站架构之系列(3)——死了都要说的缓存

说到缓存,我想大家跟我一样都很兴奋,当我们遭遇网站性能瓶颈的时候,缓存是一剂强心针,也是一粒紧急妈富隆,从而在优化网站 性能方面冠上了第一定律的帽子,我们前年在做淘应用的时候,就遭遇了性能瓶颈,短时间内采用缓存紧急优化,给我们大优化之前争取了 宝贵的时间. 一:缓存的种类 要说缓存有多少种,太多了,比如浏览器缓存,文件缓存,片段缓存,数据库缓存等等,合理利用这些缓存则能大幅度的提高系统性能, 利用不好反而会偷鸡不成蚀把米,给服务器造成巨大的压力,所以这里就存在一个缓存的使用原则的问题. 二:合理

谈谈MVC项目中的缓存功能设计的相关问题

本文收集一些关于项目中为什么需要使用缓存功能,以及怎么使用等,在实际开发中对缓存的设计的考虑 为什么需要讨论缓存呢? 缓存是一个中大型系统所必须考虑的问题.为了避免每次请求都去访问后台的资源(例如数据库),我们一般会考虑将一些更新不是很频繁的,可以重用的数据,通过一定的方式临时地保存起来,后续的请求根据情况可以直接访问这些保存起来的数据.这种机制就是所谓的缓存机制. 根据缓存的位置不同,可以区分为: 1.客户端缓存(缓存在用户的客户端,例如浏览器) 2.服务器断货(缓存在服务器中,可以缓存在内存

上网搜关于缓存的内容,谈谈你对缓存的理解看法。并回答在网站开发中使用缓存有哪些好处?

缓存的英文是cache,一般是用于RAM存储器,用于存储临时数据,断电后存储的内容会消失.缓存是临时文件交换区,电脑把最常用的文件从存储器里提出来临时放在缓存里,就像把工具和材料搬上工作台一样,这样会比用时现去仓库取更方便.因为缓存往往使用的是RAM(断电即掉的非永久储存),所以在忙完后还是会把文件送到硬盘等存储器里永久存储.电脑里最大的缓存就是内存条了,最快的是CPU上镶的L1和L2缓存,显卡的显存是给GPU用的缓存,硬盘上也有16M或者32M的缓存.千万不能把缓存理解成一个东西,它是一种处理

基于.NET CORE微服务框架 -谈谈Cache中间件和缓存降级

1.前言 surging受到不少.net同学的青睐,也提了不少问题,提的最多的是什么时候集成API 网关,在这里回答大家最近已经开始着手研发,应该在1,2个月内会有个初版API网关,其它像Token身份验证,限流降级等功能完成时间会往后推 最近也更新了surging新的版本 更新内容: 1. Cache中间件基于Redis 所依赖的第三方库已将servicestack.redis转成stackexchange 2. 增加缓存降级3. 增加拦截缓存降级的例子 开源地址:https://github