网站公司 北京,淄博便宜网站设,wordpress收不到邮箱验证码,qifeiye做的网站如何一个工作了 5 年的粉丝私信我。 他说自己准备了半年时间#xff0c;想如蚂蚁金服#xff0c;结果第一面就挂了#xff0c;非常难过。 问题是#xff1a; “Redis 存在线程安全问题吗#xff1f;” 一、问题解析 关于这个问题#xff0c;我从两个方面来回答。 第一个想如蚂蚁金服结果第一面就挂了非常难过。 问题是 “Redis 存在线程安全问题吗” 一、问题解析 关于这个问题我从两个方面来回答。 第一个从 Redis 服务端层面。 Redis Server 本身是一个线程安全的 K-V 数据库也就是说在 Redis Server 上执行的指令不需要任何同步机制不会存在线程安全问题。如图虽然 Redis 6.0 里面增加了多线程的模型但是增加的多线程只是用来处理网络 IO 事件对于指令的执行过程仍然是由主线程来处理所以不会存在多个线程通知执行操作指令的情况。 为什么 Redis 没有采用多线程来执行指令我认为有几个方面的原因。 Redis Server 本身可能出现的性能瓶颈点无非就是网络 IO、CPU、内存。但是 CPU不是 Redis 的瓶颈点所以没必要使用多线程来执行指令。 如果采用多线程意味着对于 redis 的所有指令操作都必须要考虑到线程安全问题也就是说需要加锁来解决这种方式带来的性能影响反而更大。 第二个从 Redis 客户端层面。 如图虽然 Redis Server 中的指令执行是原子的但是如果有多个 Redis 客户端同时执行多个指令的时候就无法保证原子性。假设两个 redis client 同时获取 Redis Server 上的 key1 同时进行修改和写入因为多线程环境下的原子性无法被保障以及多进程情况下的共享资源访问的竞争问题使得数据的安全性无法得到保障。 当然对于客户端层面的线程安全性问题解决方法有很多比如尽可能的使用 Redis里面的原子指令或者对多个客户端的资源访问加锁或者通过 Lua 脚本来实现多个指令的操作等等。 以上就是我对这个问题的理解。 二、面试总结 关于线程安全性问题是一个非常重要非常重要的知识。 虽然我们在实际开发中很少去主动使用线程但是在项目中线程无处不在比如Tomcat就是用多线程来处理请求的如果对线程安全不了解那么很容已出现各种生产事故和莫名其妙的问题。 这也是为什么大厂一定会问多线程并发的原因。 好的本期的高手面试系列的文章就到这里结束了。 我是 浮生一个工作了 14 年的 Java 程序员咱们下期再见。 三、粉丝福利 最近很多同学问我有没有java学习资料我根据我从小白到架构师多年的学习经验整理出来了一份50W字面试解析文档、简历模板、学习路线图、java必看学习书籍 、 需要的小伙伴 可以关注我公众号“ 灰灰聊架构 ” 回复暗号“ 321 ”即可获取