首先这一周,主要进行的几个事情。
1.在星期一~星期二图书报账的相关事情处理已经完毕,记录了现在图书报账的相关流程,比以前的流程有不少改变,已经写了word记录了流程,给下一任图书管理员做参考。
2.进行了项目的中期答辩,总结了项目中的一些问题,还有对于业务逻辑的处理。
主要出现的问题:
1.购物车模块没有使用缓存机制,会让这里产生大量的数据库Io操作来拖慢项目的整体性能,也可以通过这个攻击数据库。
2.需要有订单未支付状态,这一块也是比较重要的业务逻辑,需要进行补全。
3.ES搜索引擎需要进行数据同步的的方式更改。
还没有完成的功能,评价模块,客服模块,后台管理模块。
星期五~星期六 我查找了关于redis进行缓存的一些操作方法,然后也是选择了异步回写方法。
所有写请求都先在缓存中处理。可以定时将缓存写入到内存中,
我选择了在用户进行了购物车数据改变操作后,开启一个定时线程,在两分钟后对于数据库和redis现在所存储的数据进行一个比对,然后进行同步操作。这样操作的缺点就是可能会丢失数据,如果在这个等待数据同步的数据服务器或者redis挂掉了,这个时间用户操作的数据就会丢失。优点就是可以减少大量的数据库请求,减少数据库压力。
然后对于redis缓存,还有比较常见的三个问题
1.缓存雪崩
如我刚才的操作,虽然用户在我设置的等待同步时间无法请求数据库,但是如果开始同步的时候,
数据库和redis存储的数据差异特别多,就仍然会产生大量的数据库请求,我的解决方法就是在同步操作发送请求时在每一个请求进行的时候都会进行1秒钟的阻塞来防止大量请求一下子进入数据库。
就是redis挂掉了,这个解决方法是使用Redis 的高可用集群,都是还没有学习分布式,所以暂时不知道怎么操作。
这个主要是我也没有设置什么热点 key,项目中使用的缓存也就只有购物车这一块。
这个问题网络上的方法是对于热点 key的持久化。
这个的解决办法主要是写入一个空值,或者写一个过滤器对请求进行过滤。
我使用的是写入空值。
星期天~星期一,主要是完成了评论模块的编辑功能
主要写的就是用户上传的图片问题,我是设置了一个hashmap来储存用户在编辑过程中上传的图片,这个主要是为了方便用户取消编辑后,删除那些无效图片,来回收用户编辑时产生的垃圾。
前面时间的学习主要是写项目,完成业务逻辑,主要的有一段时间是学习了ES引擎,主要是因为在学习索引的时候发现数据库对于模糊搜索是效率特别低的,无法使用索引,而且搜索出来的数据很乱。
然后对于ES我也没有深入学习,因为这个技术好像能明白基本api的使用就行了,也了解ES主要是使用了倒排索引来搜索数据,它的数据存储形式是把数据根据它的词典分割成一个个词语在进行搜索的时候与这些词语进行得分比较,然后通过得分展示出搜索结果,对于后端业务主要是要处理ES引擎和数据库的同步问题,还有就是ES和redis一样都是非sql,ES的性能也要比数据库的性能高不少。我之前使用的数据同步方法,是同步操作,这其实没有利用到ES的性能,反而降低了整体性能,我后面查了一下,主要的异步同步方法有两种形式,一是通过mq来进行请求管理,做到延时处理请求,但是这样就会有mq出现故障导致请求丢失的问题,二就是设置定时器,定时轮询处理请求,但这样也会有增大服务器压力的问题。
这个问题我现在还没有好好思考,等后面准备处理这个问题的时候再去找一下优化方案