面试后的疑问!
来源:5-10 Redis数据结构:列表list
慕妹5443444
2018-01-15
老师,你好,最近在面试的时候,遇到这样的问题(订单信息是存在数据库里面吗),一开始我没有反应过来,回答的也不好,后来觉得面试官的意思是在数据库和访问层之间应该加缓存,
那么假如我使用redis做缓存的话(把它改造成类似于Ehcache的二级缓存),但是它只是在查询的时候才会起到作用,只是起到的分流查询的压力,那我在(update,delete,add)的时候,缓存没有起到作用,
有没有现在已经使用的方式,可以实现缓存的数据库之间的实时同步,那样我直接操作缓存,缓存同步数据库,数据库压力大大降低,还有就是,如果数据库要做集群的话,有没有成熟的方式,麻烦老师推荐下,
面试的时候,这方面的问题还是蛮多的啊 !!!感谢!
2回答
-
你好,同学,加缓存是OK的,但是我认为订单数据还是必须持久化到数据库的哟。这个东西是要看,到底哪些数据做缓存,哪些数据不做缓存。28法则,80%的查询会落在20%的数据上,到底怎么找到需要缓存的数据是一个非常好的知识点。这块需要对业务非常熟悉。
另外缓存和数据库实时同步,很简单,如果update delete add成功之后,直接set到cache里即可。把对应的数据做一份缓存。
同时select的时候,如果是穿透性的,如果miss cache ,那就从db 找到,set到cache里。下一次就不会miss了。
如果这里感觉同步压力大的话,还可以用消息队列,操作db之后发送消息出去,如果并发特别高。
然后消费者来消费消息,更新cache即可。
40 -
高27
2018-01-16
我觉得订单信息一定要放在数据库里,而且是关系型数据库,因为订单信息涉及到交易金额比较重要的信息,购物车可以存放到cookie或者redis中,下单之后把缓存清掉,再redis中,update,delete,add也是可以操作的呀,就是把已经缓存的数据重新设置下,更新缓存
012018-01-16
相似问题