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

news2024/11/27 12:52:57
一个工作了 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.coloradmin.cn/o/1399573.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高效调试!利用IDEA远程Debug服务器微服务Jar,快速定位和解决代码问题!

开两个端口端口8081、8085 解释8081 服务端口 8085 远程debug监听端口 服务启动jar命令: java -agentlib:jdwptransportdt_socket,servery,suspendn,address48081 -jar test-server.jar &或者nohup nohup java -agentlib:jdwptransportdt_socket,servery,susp…

c++函数重载(同名函数)功能,区别于c语言

c可以使用同名函数,实现功能类似的多个功能 规则: ①函数名相同,但是函数的参数(形参)绝不相同 ②参数个数不同 ③参数个数相同,参数类型不同 只有返回值类型不同,不可以;只有形…

初识计算机图形学

初识计算机图形学 笔记来源:【老奇】阴差阳错 撼动世界的游戏引擎 1.MVP Transformation 详见本人博客: 1.Transformation 2.梳理从MVP变换到光栅化的过程 MVP变换将空间中3D物体投影到2D屏幕 2.Rasterization 详见本人博客: 1.Rasteri…

索引的概述和性能分析

索引index,是一种有序的数据结构,可以高效的获取数据,在数据库中维护着满足查找特定算法的数据结构,就是索引 无索引的情况,查询数据时会全表扫描,效率极低 索引结构 (1)二叉树&…

Django(八)

1. 管理员操作 1.1 添加 from django.shortcuts import render, redirectfrom app01 import models from app01.utils.pagination import Paginationfrom django import forms from django.core.exceptions import ValidationError from app01.utils.bootstrap import BootStr…

使用 crypto-js 进行 AES 加解密操作

在前端开发中,数据的加密和解密是为了保障用户隐私和数据的安全性而常见的任务。AES(Advanced Encryption Standard)是一种对称密钥加密算法,被广泛用于保护敏感信息的传输和存储。本文将介绍 AES 加解密的基本原理,并…

区块链游戏概览:回顾 2023,展望 2024

作者:lesleyfootprint.network 数据来源:区块链游戏年报 关键要点 今年,比特币(BTC)市值从上年的低谷中强劲回升,相较之下,区块链游戏市场的增长虽然较为平淡,但年末也迎来了显著的…

【长文阅读】MAMBA作者博士论文<MODELING SEQUENCES WITH STRUCTURED STATE SPACES>-Chapter2

Gu A. Modeling Sequences with Structured State Spaces[D]. Stanford University, 2023. 本文是MAMBA作者的博士毕业论文,为了理清楚MAMBA专门花时间拜读这篇长达330页的博士论文,由于知识水平有限,只能尽自己所能概述记录,并适…

在微信公众号中加入ChatGPT聊天的方法

1 介绍 开源项目 "chatgpt-on-wechat" 支持通过微信公众号进行调用,这意味着用户可以在与公众号的交互中体验 ChatGPT。由于服务是部署在远端服务器上的,因此用户只需拥有一部手机,就可以在任何环境下与 ChatGPT 进行交流。例如&am…

回归预测 | Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据…

forEach如何跳出或中断循环

文章目录 概要使用try...catch抛出错误设置数组长度为0使用splice删除数组的元素 概要 在Javascript中,我们使用forEach遍历循环的时候,往往会面临跳出循环和中断循环,我们可以采取以下几种方式: 使用try…catch抛出错误 const …

IGBT工作原理

IGBT(绝缘栅双极型晶体管) 在实际应用中最流行和最常见的电子元器件是双极结型晶体管 BJT 和 MOS管。 IGBT实物图电路符号图 你可以把 IGBT 看作 BJT 和 MOS 管的融合体,IGBT具有 BJT 的输入特性和 MOS 管的输出特性。 与 BJT 或 MOS管相比,…

手把手教你学会接口自动化系列二十三-引入allure优化我们的代码结构生成报告

优化之后的代码如下: # !/usr/bin/env python# -*- coding: utf-8 -*-# Time : 2024/01# Author : Laopiimport jsonimport loggingimport allurefrom testcase.conftest import *baseUrl GetYamlData(ConfigHandler.config_path).get_yaml_data()root_path os.p…

六、Netty核心模块组件

目录 6.1 BootStrap,ServerBootStrap6.2 Future,ChannelFuture6.3 Channel6.4 Selector6.5 ChannelHandler 以及其实现类6.6 Pipeline 和 ChannelPipeline6.7 ChannelHandlerContext6.8 ChannelOption6.9 EventLoopGroup和其实现类 NioEventLoopGroup6.1…

Forward(转发)和Redirect(重定向)的异同

Forward(转发)和Redirect(重定向)是两种不同的服务器端跳转机制,它们在Servlet中用于控制页面的跳转和处理请求的方式。 Forward(转发): 特点: 转发是在服务器内部进行的…

对接苹果CMS芒果影视APPV1.0(附安装教程+源码支持多端)内置采集脚本

目录 概述1. 演示效果1.1 视频演示1.2 图文演示1.2.1 首页1.2.2 专题页1.2.3 搜索1.2.4 观影 2. 支持功能3. 插件和框架4. 部署方法4.1 后端4.1.1 准备工具4.1.2创建站点4.1.3 上传后端代码到服务器4.1.4 导入数据库4.1.5 配置数据库信息4.1.6访问后台管理系统 4.2 前端4.2.1 准…

Modern C++ 一个例子学习条件变量

目录 问题程序 施魔法让BUG浮出水面 条件变量注意事项 修改程序 问题程序 今天无意中看到一篇帖子,关于条件变量的,不过仔细看看发现它并达不到原本的目的。 程序如下,读者可以先想想他的本意,以及有没有问题: #…

基于python旅游推荐系统 协同过滤算法 爬虫 Echarts可视化 Django框架(源码)✅

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏) 毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总 🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题&#xff…

无忧秘书智脑:轻松玩转“AI彩超宝宝”功能,预见宝宝未来模样

作为准爸准妈,对肚子里的宝宝充满了好奇和期待。想象着宝宝的模样,是每个家庭都有的小确幸。如今,随着科技的发展,我们有了更先进的方式去一探究竟——那就是无忧秘书智脑的“AI彩超宝宝”功能。(功能;ai6a…

【JavaEE】网络原理:网络中的一些基本概念

目录 1. 网络通信基础 1.1 IP地址 1.2 端口号 1.3 认识协议 1.4 五元组 1.5 协议分层 什么是协议分层 分层的作用 OSI七层模型 TCP/IP五层(或四层)模型 网络设备所在分层 网络分层对应 封装和分用 1. 网络通信基础 1.1 IP地址 概念:IP地址…