首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
在线笔面试、雇主品牌宣传
登录
/
注册
Lyh0
获赞
32
粉丝
5
关注
8
看过 TA
18
男
厦门大学
2020
Java
IP属地:未知
暂未填写个人简介
私信
关注
拉黑
举报
举报
确定要拉黑Lyh0吗?
发布(5)
评论
刷题
收藏
Lyh0
关注TA,不错过内容更新
关注
2019-09-07 17:11
已编辑
厦门大学 Java
关于数据库和缓存一致性问题
关于数据库和缓存一致性问题,网上的说法大都是先更新数据库,再删除缓存。可是如果是 : 1.线程A更新数据库 2.线程B查询从缓存中得到旧数据 3.线程A让缓存失效。 这样线程B不就是得到脏数据吗??请问有大佬帮忙解答一下吗?
安静的小白:
老哥,我的理解:你的第3步错了,应该是让缓存失效。你说的那种情况是有可能发生的,A更新成功,B过来读缓存成功,获取老数据,之后A再让缓存失效;从此以后,后面的查询读的都是新数据了,因为缓存已经失效了,需要读数据库,然后把新的值设置到缓存里。。。所以你说的这种情况,只会影响那一次查询,只有一次,一次的概率很低很低,相对于先删缓存,在更新数据库造成的脏数据好太多了。 我的理解:1.先更新数据库,再删缓存最大的问题在于更新成功,没办法确保删缓存成功,因为没办法采用单机事务去保证这两个操作的原子性,所以可以采用一种不断重试的ACK机制,你可以自己写个重试机制,也可以使用市面上经常用的mq来保证,因为mq为了保证容错性,也实现了ack机制,步骤是可以用一个工具将mysql的binlog日志抓取出来,然后采用mq去确保删缓存一定会成功; 2.先更新数据库,再删缓存还有个弊端是:(1)A读数据,缓存失效,需要读数据库,(2)B更新数据库,更新成功,(3)B是缓存失效,(4)A将读出来的数据设置到缓存里,此种情况是会产生数据不一致的,但是这是极限状态更新数据库需要锁表,读数据库不需要,写的时间大于读的时间,所以此种情况很难发生,基于以上讨论,所以先更新数据库,再删缓存,相对于其他方法是比较理想的(或许未来会有更好的方法,但是目前这种方法所带来的的影响相对于其他的是较小的) 以上仅供参考,个人见解
0
点赞
评论
收藏
分享
2019-09-04 13:29
已编辑
厦门大学 Java
网宿一面
JVM 会的全部说一下 Juc 会的全部说一下 设计模式 会的全部说一下 HashMap 会的全部说一下 TCP 会的全部说一下 HTTP 会的全部说一下 Spring 会的全部说一。 token和cookie区别 NIO会的全说一下,说一下粘包 OS资源调度 乐观锁、悲观锁 Zookeeper说一下,如何保证高可用 反射说一下 如何查看jvm内存区
cyxY:
总结–会的全说一下
投递网宿科技等公司6个岗位 >
0
点赞
评论
收藏
分享
2019-08-25 10:37
已编辑
厦门大学 Java
睡不着,发一下昨天有赞面试
一面问了双亲委派,gc算法,full gc,数据库事务,隔离离别,三范式,索引,hashmap数组初始大小,进程通信,TCP三次握手四次挥手,http状态码,http请求方法,get和post区别,linux查看进程命令。 二面问了mq怎么保证事务,redis访问量太大怎么办,如何判定哪些数据放在redis中,如何查看索引是否生效。二面还有一些问题记不清了。
投递有赞等公司6个岗位 >
0
点赞
评论
收藏
分享
2019-08-22 15:53
已编辑
厦门大学 Java
MVCC解决幻读
请求各位大佬,MVCC为什么不能避免幻读呢?根据版本号,每次SELECT出来的数据的创建版本号不是都小于当前事务版本号,那怎么还有幻读呢?
球球Offer了:
你得看看快照读和当前读
0
点赞
评论
收藏
分享
2019-08-15 23:11
厦门大学 Java
Dubbo的随机权重负载均衡和轮询负载均衡的区别?
如题,哪位大佬能提点一下,CSDN和博客园上都找不到能看懂的答案。
GithubOverFlow:
个人根据名字猜测,不知道对不对哈。有两台机器,A权重5,B权重1。随机权重负载均衡,转发到B的请求可以是6次中的任意一次。但轮询就是严格按照顺序依次请求,5次请求到A一定是连续的,5次请求之后,第六次一定会到B,然后接着继续5A1B一直循环下去。
投递北京创新乐知信息技术有限公司等公司6个岗位 >
0
点赞
评论
收藏
分享
1
创作者周榜
更多
关注他的用户也关注了:
牛客网
牛客企业服务