面试后的疑问!

来源:5-10 Redis数据结构:列表list

慕妹5443444

2018-01-15

老师,你好,最近在面试的时候,遇到这样的问题(订单信息是存在数据库里面吗),一开始我没有反应过来,回答的也不好,后来觉得面试官的意思是在数据库和访问层之间应该加缓存,
那么假如我使用redis做缓存的话(把它改造成类似于Ehcache的二级缓存),但是它只是在查询的时候才会起到作用,只是起到的分流查询的压力,那我在(update,delete,add)的时候,缓存没有起到作用,
有没有现在已经使用的方式,可以实现缓存的数据库之间的实时同步,那样我直接操作缓存,缓存同步数据库,数据库压力大大降低,还有就是,如果数据库要做集群的话,有没有成熟的方式,麻烦老师推荐下,
面试的时候,这方面的问题还是蛮多的啊 !!!感谢!

写回答

2回答

Geely

2018-01-16

你好,同学,加缓存是OK的,但是我认为订单数据还是必须持久化到数据库的哟。这个东西是要看,到底哪些数据做缓存,哪些数据不做缓存。28法则,80%的查询会落在20%的数据上,到底怎么找到需要缓存的数据是一个非常好的知识点。这块需要对业务非常熟悉。

另外缓存和数据库实时同步,很简单,如果update delete add成功之后,直接set到cache里即可。把对应的数据做一份缓存。

同时select的时候,如果是穿透性的,如果miss cache ,那就从db 找到,set到cache里。下一次就不会miss了。


如果这里感觉同步压力大的话,还可以用消息队列,操作db之后发送消息出去,如果并发特别高。

然后消费者来消费消息,更新cache即可。


4
0

高27

2018-01-16

我觉得订单信息一定要放在数据库里,而且是关系型数据库,因为订单信息涉及到交易金额比较重要的信息,购物车可以存放到cookie或者redis中,下单之后把缓存清掉,再redis中,update,delete,add也是可以操作的呀,就是把已经缓存的数据重新设置下,更新缓存

0
1
慕妹5443444
那我每次做update,delete,add的时候返回的对象,手动写到缓存中吗?
2018-01-16
共1条回复

Java企业级电商项目架构 Tomcat集群与Redis分布式

Tomcat集群+Redis分布式+代码重构+源码原理解析

2685 学习 · 947 问题

查看课程