当前位置: 首页 > news >正文

Redis 存在线程安全问题吗?为什么?

一个工作了 5 年的粉丝私信我。
他说自己准备了半年时间,想如蚂蚁金服,结果第一面就挂了,非常难过。
问题是: “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 ”即可获取

 

http://www.lryc.cn/news/284485.html

相关文章:

  • 无人机测绘助力实现高效、安全的城市规划
  • 实验七 RMAN恢复管理器
  • 未来 AI 可能给哪些产业带来哪些进步与帮助?
  • Java医院信息管理系统
  • QT+OSG/osgEarth编译之八十:ive+Qt编译(一套代码、一套框架,跨平台编译,版本:OSG-3.6.5插件库osgdb_ive)
  • Webpack5入门到原理3:基本配置
  • 全开源多城市同城信息小程序源码(Laravel 框架),同城分类信息发布便民小程序系统【非DZ】
  • PHP学习笔记1
  • C语言从入门到实战——文件操作
  • 数据结构中的一棵树
  • C++中的static(静态)
  • 常见框架漏洞
  • Python文件自动化处理
  • js变量提升
  • C++ 设计模式之策略模式
  • (202401)深度强化学习基础2:策略梯度
  • bgp大AS小AS选路-联邦ebgp选路
  • beego API 自动化文档
  • 百度搜索Push个性化:新的突破
  • 【Oracle】ORA-32017和ORA-00384错误处理
  • MySQL三大日志
  • 力扣每日一练(24-1-20)
  • Pytest系列(2) - assert断言详细使用
  • CodeWave智能开发平台--03--目标:应用创建--10初级采购管理系统总结
  • 外包干了4个月,技术退步明显.......
  • 图片批量建码怎么用?每张图片快速生成二维码
  • 时间复杂度的排序
  • js控制浏览器前进、后退、页面跳转
  • 【长文阅读】MAMBA作者博士论文<MODELING SEQUENCES WITH STRUCTURED STATE SPACES>-Chapter1
  • Unity3D学习之UI系统——GUI