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

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脚本来实现多个指令的操作等等。

线程安全性确实是开发中非常重要的一个知识点,所以面试的频率会特别高,大家可以重点关注一下。好了,今天的分享就到这里,在面试的时候大家还有遇到哪些比较难的问题,欢迎在评论区留言。


http://www.kler.cn/a/554734.html

相关文章:

  • 快速入门——Vue框架快速上手
  • 神经网络八股(1)
  • C++ 课程设计 汇总(含源码)
  • Ubuntu:wvp-GB28181-pro安装、运行
  • 记录一次部署PC端网址全过程
  • Java集合框架中常用类及其底层数据结构的详细分类
  • 使用ESP32与INMP441麦克风模块实现音频传输
  • MySQL执行计划Explain如何分析 SQL语句?
  • Spring Boot项目中实现Excel的导出功能
  • HC32F460_GPIO驱动库
  • 【科研绘图系列】R语言绘制小提琴图、散点图和韦恩图(violin scatter plot Venn)
  • pytorch3d安装记录
  • PDF文档中文本解析
  • Redis文档总结
  • hot100-141、142、148、146、136、169、75、31、287
  • 基于用户分组的活动运营策略与“开源AI智能名片2+1链动模式S2B2C商城小程序”的应用探索
  • vue登陆下拉菜单
  • Unreal5从入门到精通之在编辑器中更新 UserWidgets
  • 用openresty和lua实现壁纸投票功能
  • sql server 从库创建的用户名登录后访问提示数据库无权限