三级缓存是什么意思?小白也能看懂的详细解释!

2025-01-13 12:11:53 6阅读

今儿个,咱来聊聊我最近捣鼓的一个事儿——三级缓存。这玩意儿,听起来挺玄乎,弄明白,也就那么回事儿。我也被这个名字唬住,心想这得是啥高大上的技术?结果一上手,发现还挺有意思的。

话说我最近在折腾一个项目,需要处理一大堆数据。这些数据,说重要也重要,说不重要也真是可以随时扔掉的那种。但问题是,每次需要的时候都得重新去数据库里捞一遍,这速度,啧啧,简直比蜗牛爬还慢。我就琢磨着,得想个法子,把这些数据给“记住”,下次要用的时候,直接拿出来,岂不美哉?

于是我就开始琢磨这个“三级缓存”。我以为是什么高大上的技术名词,就像一些什么“微服务”、“云原生”这种让人听着就想绕道的词。结果一查资料,发现这三级缓存,就是三种不同的缓存方式,从快到慢,一层一层地往下找数据。简单理解的话,就好像是我自己平时干活,先在自己脑子里找,找不到再去笔记里翻,再找不到就只能去翻书或者上网查。

三级缓存是什么意思?小白也能看懂的详细解释!

第一级缓存,我给它起个外号叫“脑瓜子缓存”。说白,就是把数据直接放在程序的内存里。你想,这内存的速度多快,跟CPU打交道,那叫一个亲密无间。要是数据在这一级就找到,那速度,杠杠的!我用一个简单的HashMap,就把这事儿给办。数据往里一扔,要用的时候,直接通过键名就能拿出来,简直不要太方便。这个过程,我主要使用HashMap的put()方法来存放,get()方法来读取,非常简单粗暴,但是非常高效。

  • 创建HashMap: HashMap<String, Object> localCache = new HashMap<>();
  • 存放数据: *(key, value);
  • 读取数据: Object value = *(key);

三级缓存是什么意思?小白也能看懂的详细解释!

这“脑瓜子缓存”也有它的局限性。你想,人的脑子容量有限,电脑的内存也一样。要是啥数据都往里塞,那还不把内存给撑爆?这一级缓存,我只放那些最常用、最热乎的数据。

要是“脑瓜子”里没找到,那就得去第二级缓存里瞅瞅。我把它叫做“笔记本缓存”。这一级,我用的是Redis。这玩意儿,大家都熟,一个高性能的键值对数据库,数据也是放在内存里的,所以速度也挺快。而且它还能把数据给“持久化”,也就是说,哪怕程序重启,数据也不会丢。这就好比,我的笔记本上记的东西,哪怕我睡一觉起来,它还在那里,不会自己跑掉。

  • 引入Redis客户端库: 例如Jedis
  • 连接到Redis服务器: Jedis jedis = new Jedis("localhost", 6379);
  • 存放数据: *(key, value);
  • 三级缓存是什么意思?小白也能看懂的详细解释!

  • 读取数据: String value = *(key);

我把那些稍微“冷”一点的数据,放在Redis里。这样,既能保证读取速度,又能避免把程序的内存给撑爆。而且Redis还支持各种数据结构,像什么字符串、列表、集合等等,用起来贼方便。在项目中,我主要用到set()方法来保存字符串类型的数据,get()方法来获取,hset()来存hash类型数据,hget()来取,非常灵活。

要是连“笔记本”上都没找到,那就只能去第三级缓存——“书柜”里找。这一级,就是咱们的老朋友——数据库。我用的是MySQL。这数据库,啥都就是速度有点慢。毕竟数据都放在硬盘上,这硬盘跟内存比起来,那速度差得可不是一星半点。我就开始动手,把那些最不常用的数据,放在数据库里。用的时候,就通过JDBC去查。这过程,没啥好说的,就是普通的SELECT语句,大家都懂。

  • 加载数据库驱动: *("*.Driver");
  • 三级缓存是什么意思?小白也能看懂的详细解释!

  • 建立数据库连接: Connection conn = *(url, user, password);
  • 执行查询: Statement stmt = *(); ResultSet rs = *("SELECT FROM table WHERE key = '" + key + "'");
  • 处理结果: 遍历ResultSet获取数据

当然为防止每次都去查数据库,提升效率,查询出来的结果我会把它更新到第一级和第二级缓存中,这样下次再需要这个数据,就可以从更快的缓存中拿到。这里我用到一个叫做synchronized的关键字,就是为防止多个线程同时去查一个数据,导致数据不一致的问题。

这么一套“三级缓存”的机制搞下来,我那项目的性能,蹭蹭蹭地往上涨。以前要等半天的操作,现在几秒钟就搞定。用户体验,那叫一个丝滑!而且我还发现,这套机制不仅提高性能,还降低数据库的压力。以前,啥事儿都找数据库,把数据库累得够呛。大部分请求都在缓存层就解决,数据库也能喘口气。

三级缓存是什么意思?小白也能看懂的详细解释!

这三级缓存,说白,就是把数据按照访问频率,放在不同的地方。常用的放在内存里,不常用的放在硬盘上。用的时候,先从内存里找,找不到再去硬盘上找。就这么简单个事儿。但是,这简单的背后,也有一些需要注意的地方。比如说,缓存数据的更新问题。要是数据在数据库里变,缓存里的数据咋办?这就需要有一个机制,来保证缓存数据和数据库数据的一致性。这里头,门道还挺多,下次有机会再跟大家唠唠。

反正,经过这么一折腾,我对这“三级缓存”算是有点儿自己的理解。啥技术,都得自己上手试试才知道深浅。光看别人的文章,听别人的经验,那都是虚的。自己动手,丰衣足食嘛

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。