一篇项目关于redis的介绍(自述版)

43 阅读2分钟

文章针对一个在线而是校验平台面试介绍方面做一个阐述,仅针对自己项目提出的问题。

自我介绍+我参与过xxxx物品互换平台,主要针对疫情期间的一个二手交易网站,主要使用了springboot作为构建,mybatis做数据集,使用redis作为缓存。在项目里面我参与了xxxxx阶段(需求分析,数据库设计和商品crud代码的书写,并且使用了redis作为缓存,进行项目的初始优化)。

为什么当时会考虑到使用redis?

因为本项目是一个购物平台,对应大部分用户来说只是对商品进行浏览,只有少部分对商品进行下单操作,处于一个读多写少的环境。在这种情况下,如果每次查询都会对数据库进行访问,在大量访问的情况下,对数据库来说是不友好的。为了减轻这种问题,所以我们选择使用缓存。对商品的查询,优先去redis里面找,找到就返回,没有找到就查询访问数据库,但是在这种情况下面困难出现数据穿透的问题,比如查询一个不存在的数据,因为没有查询到,使用去数据库查询,然后数据库里面没有对应的数据,无法写入缓存,导致每次都需要去数据库里面查询。我们项目里面使用的是缓存空数据解决的,当数据库没有找到的时候,就进行空数据的缓存。(也可以采用布隆过滤器)但是缓存空数据可能会出现数据不一致的问题,比如xxx开始没有找到,后面进行插入后,缓存没有修改,那么再次查询xxx还是为null。

为了解决这个数据不一致的问题,我们采用了如果涉及数据库的增删改,就先删除缓存,然后再修改数据库。(但是这种情况也是不安全的,多线程情况下,假设a删除了缓存,b进入查询,此时没有缓存,查询数据库并写入缓存,还是旧数据,然后a继续修改数据库,这样就会出现缓存和数据库不一致的情况【脏数据】我们需要加入分布式锁【优化可加读写锁】或者使用mq)。

为什么项目采用主从同步:(redis:因为单个redis并发能力是有上限的,为了进一步提高他的能力就需要主从同步,介绍全量同步和增量同步)(mysql读写分离和并发量的考虑)

redis的持久化过程和redis为什么快也是需要准备的。

上面的每一个问题都能拆开再询问,需要对自己项目和redis的结合很熟悉