Springboot缓存实战笔记之概念篇

看过好多博客,在介绍Springboot缓存时,直接讲解使用,第一步把冰箱门打开...之类的,并没有对缓存概念做一些常规介绍,任何技术首先要做的就是去了解概念,本篇基于我自身阅读过的一些书籍,自身觉得比较重要的概念,以笔记的形式记录下,方便自己以及后来者,后续陆续会有缓存常见架构+使用的博客,请关注后续;

关于缓存:只要是稍微做过点项目的同学肯定都会听到缓存这么个词汇,缓存并不神秘,缓存主要用来缓存一些不经常改变的数据来提供系统性能,避免直接访问数据库、硬盘等低速的存储设备,目前有些认知说我们的SSD等存储设备存储速度不是已经很快了吗,关于这点请参照之前在头条上看到的一篇文章,让 CPU 告诉你硬盘和网络到底有多慢 会有详细说明,在此不再赘述。毫无疑问,缓存的数据一般存放到访问速度更快的内存或者更低延迟存储的存储设备上;

缓存内容:缓存主要来缓存一些不经常改变的数据,所谓的不经常改变并没有一个完整的规定,比如商家发布一个商品,发布后如果不是碰到什么特殊日期,搞活动等特殊事件,商品数据是不会经常变化的,这个就可以认为是不经常改变,注意不经常改变:不是不变,也不是变化频繁。那么不经常改变的内容有哪些呢?拿电商系统为例,比如伪静态页面,诸如每个网站顶部和底部部的内容,比如京东底部:

还有比如商城商品分类、各种菜单列表、店家信息、商品数据等,这些数据的特点就是访问率高,变化不大,所以我们就可以以这些数据为缓存对象进行缓存,其实具体缓存哪些数据,根据实际项目而定,这块并没有明显的要求!但关键字就是不经常变化!

缓存组件解释:这块需要划重点了,需要重点了解,因为所有涉及缓存的框架基本都围绕以下概念展开!

  • 缓存管理器(CacheManager):用来创建和管理多个缓存(Cache)
  • 缓存(Cache):就是一个Key-Value结构的存储对象,其中的Key为存储数据的标识,Value指的就是具体缓存的数据,我们称之为缓存项;比如我们要缓存商城的商品分类列表,那么我们就可以以goodsCategories为Key,商品分类列表数据为缓存项,大体结构如:{"goodsCategories":[商品分类数据]},可以将缓存想象成Java中的Map来辅助理解;
  • 缓存存储方式:目前主要为内存缓存,当然也有建立在其他存储设备上的缓存;比如SpringBoot就提供了基于ConcurrentMap的缓存,咦,这不就是个Map嘛,对的,缓存简单点认为,就是个特殊用途的Map,其实我们在开发造数据的时候,不想访问数据库的时候,也会弄一个Map来放一些数据;当然也还有好多基于内存的缓存中间件,比如EhCache、Redis等缓存服务器,使用缓存的时候根据使用缓存中间件的不同,而个性化配置即可;
  • 缓存策略:指的是对缓存数据的一些处理,比如数据存多久,最多存多少、常用的数据怎么优化下获取、不常用的数据是留还是不留等;
  • 分布式缓存:通常业务不大,将数据缓存到一个缓存服务器就够用了,但是比如业务庞大或者架构设计等因素的影响,需要按照不同的算法或key存放到不同的缓存服务器上面,这就叫做分布式缓存;
  • 缓存命中/未命中(Cache Hit/Miss):从缓存中取到想要获取的缓存值,这个叫做缓存命中,反之缓存未命中;
  • 缓存清除(Cache Evication):缓存清除操作;
  • 热点数据(Hot Data):指的是被频繁访问的缓存数据,缓存系统通过调整自身算法或内部存储方式使得热点数据以更高效的方式被访问到;
  • 堆内/外(On/Off Heap):JVM将java对象放置到堆内存中,以便获取最快的访问速度,此时如果缓存将大量的对象缓存到堆内存时可能会导致Java的垃圾回收时间过长从而影响效率;反之,如果放到堆外内存时,虽然不会导致上述问题,但由于堆外内存的对象需要被序列化成堆内对象时才可以被使用,也会适当影响效率;所以一般原则不常用对象放到堆外内存中,热点数据放到堆内;

猜你喜欢

转载自blog.csdn.net/yu102655/article/details/88779698