Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢?
个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有
一个线程。客户端访问之间存在竞争,请问是这样的吗? 谢谢了。

0

3个回答

你说的对,因为存在多客户端并发,所以必须保证操作的原子性。比如银行卡扣款问题,获取余额,判断,扣款,写回就必须构成事务,否则就可能出错。

1

那是redis里面只有单个命令是执行的。比如set,get。但如果你的命令希望把一组命令执行的结果作为整体。要么全部成功,要么失败。你就需要multi来执行事务

1
weixin_44440268
It’my life redis中的事务不是原子性的
2 个月之前 回复

大白话来说,因为客户端多线程操作,可能服务器的处理的顺序就会乱掉,并不是你想要的那种结果,所以需要锁。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
为什么Redis是单线程?为什么能处理大并发量?
一、Redis为什么是单线程 注意:redis 单线程指的是网络请求模块使用了一个线程,即一个线程处理所有网络请求,其他模块仍用了多个线程。 因为CPU不是Redis的瓶颈。Redis的瓶颈最有可能是机器内存或者网络带宽,既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。关于redis的性能,官方网站也有,普通笔记本轻松处理每秒几十万的请求 二、Redis为什么这...
单进程单线程的Redis如何能够高并发,redis是个单线程的程序,为什么会这么快呢?
弄清楚 Redis 为什么是单线程单进程,为什么单线程能保证这么快的速度
既然redis是单线程模型,,怎么会出现并发访问操作同一份数据呢?
说 “数据一致性问题 Memcached提供了cas命令,可以保证多个并发访问操作同一份数据的一致性问题。 Redis没有提供cas 命令,并不能保证这点,不过Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断。” 既然redis是单线程模型,怎么会出现并发访问操作同一份数据呢? 王海龙 发帖于 3年前 3回/7130阅
redis单线程为什么效率很高
转自:https://blog.csdn.net/u010870518/article/details/79470556 一、前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”、什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题,这些看似不常见的概念,都与我们的缓存服务器相关,一般常用的缓存服务器有Redis、...
Redis为什么使用单进程单线程方式也这么快
Redis采用的是基于内存的采用的是单进程单线程模型的KV数据库,由C语言编写。官方提供的数据是可以达到100000+的qps。这个数据不比采用单进程多线程的同样基于内存的KV数据库Memcached差。 Redis快的主要原因是: 完全基于内存数据结构简单,对数据操作也简单使用多路 I/O 复用模型 第一、二点不细讲,主要围绕第三点采用多路 I/O 复用技术来展开。 多路 I/O 复
Redis为什么是单线程?为什么有如此高的性能?
一、Redis为什么是单线程 注意:redis 单线程指的是网络请求模块使用了一个线程,即一个线程处理所有网络请求,其他模块仍用了多个线程。 因为CPU不是Redis的瓶颈。Redis的瓶颈最有可能是机器内存或者网络带宽,既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。关于redis的性能,官方网站也有,普通笔记本轻松处理每秒几十万的请求 二、Redis为什么这...
Redis为什么是单线程的?
转自:https://www.zhihu.com/question/23162208 https://www.zhihu.com/question/55818031Redis为什么是单线程的?因为CPU不是Redis的瓶颈。Redis的瓶颈最有可能是机器内存或者网络带宽。(以上主要来自官方FAQ)既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。关于redis的性能,官...
单进程单线程的Redis如何能够高并发
参考文档: (1)http://yaocoder.blog.51cto.com/2668309/888374 (2)http://www.cnblogs.com/syyong/p/6231326.html1、基本原理 采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗) (1)为什么不采用多进程或多线程处理? 多
redis并发问题 && 分布式锁
redis中的并发问题 使用redis作为缓存已经很久了,redis是以单进程的形式运行的,命令是一个接着一个执行的,一直以为不会存在并发的问题,直到今天看到相关的资料,才恍然大悟~~ 具体问题实例 有个键,假设名称为myNum,里面保存的是阿拉伯数字,假设现在值为1,存在多个连接对myNum进行操作的情况,这个时候就会有并发的问题。假设有两个连接linkA和linkB,这两个连
Redis 高并发问题,及解决方案!
(一)redis技术的使用: redis真的是一个很好的技术,它可以很好的在一定程度上解决网站一瞬间的并发量,例如商品抢购秒杀等活动。。。 redis之所以能解决高并发的原因是它可以直接访问内存,而以往我们用的是数据库(硬盘),提高了访问效率,解决了数据库服务器压力。 为什么redis的地位越来越高,我们为何不选择memcache,这是因为memcache只能存储字符串,而redis存储类型...
redis为什么是单线程
原因一:redis本身就是基于内存操作的,所以每个操作执行速度都很快。 如果使用多线程,就需要解决多线程同步的问题,就会涉及到线程的频繁切换而消耗CPU。单线程的使用避免了不必要的上下文切换和竞争条件,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗。 原因二:redis中的数据结构比较简单,对数据的操作也就比较快。 原因三:使用多路复用IO,即非阻塞IO。...
redis并发问题
众所周知redis只有一个线程,那么在多并发情况下: 有多个相同的set请求,redis内部的处理流程是怎样的?我只知道命令会等待,这里的等待是所有命令都等待么?比如此时的其他set和任何get都会阻塞么?redis内部是将命令作为一个队列来处理么?或者是其他方式?当第一个set处理完后,其他的相同的set会覆盖掉么,也就是说依然会占用cpu来工作么?希望能具体说说。 面对同一时间高并
redis为什么快?为什么是单线程的?
https://blog.csdn.net/xlgen157387/article/details/79470556
利用Redis锁解决并发问题
用redis处理高并发是个很常见的方式,因为redis的访问效率很高(直接访问内存),一般我们会用来处理网站一瞬间的并发量。 那如果要使用redis来进行高并发问题的解决的话,应注意以下几点: 1、首先我们要先知道,我们在存储时,应使用redis的setnx方法,不应该使用set方法,因为setnx拥有原子操作命令(正确点说法应该是使用setnx,根据其属性可以保证共享资源的原子性操作),当资源锁...
PHP(结合redis,事物和锁)解决高并发下抢购
<?php/** 抢购模块*/class seckill extends common { private $_orderModel = null; private $_goodsModel = null; private $_redis = null; protected $_error = ''; public function __construct() { if($...
高并发架构系列:Redis并发竞争key的解决方案详解
需求由来 1.Redis高并发的问题 Redis缓存的高性能有目共睹,应用的场景也是非常广泛,但是在高并发的场景下,也会出现问题:缓存击穿、缓存雪崩、缓存和数据一致性,以及今天要谈到的缓存并发竞争。 这里的并发指的是多个redis的client同时set key引起的并发问题。 2.出现并发设置Key的原因 Redis是一种单线程机制的nosql数据库,基于key-value,数据可持久化落盘。由...
Redis单线程为何速度如此之快
Redis之所以执行速度很快,主要依赖于以下几个原因: (一)纯内存操作,避免大量访问数据库,减少直接读取磁盘数据,redis 将数据储存在内存里面,读写数据的时候都不会受到硬盘 I/O 速度的限制,所以速度快; (二)单线程操作,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能...
redis多个线程操作单个key场景的并发问题
redis是单线程的, 出并发问题只可能是逻辑上有漏洞, 比如先取再写 , 可以采用某种方式规避 比如multi /exec 事务    比如     Redis 事务 Redis Exec 命令用于执行所有事务块内的命令。 语法 redis Exec 命令基本语法如下: redis 127.0.0.1:6379> Exec127.0.0.1:6379> Ex...
为什么说Redis单线程效率高
Redis效率高的主要原因有下面几个: 基于内存操作,速度非常快 采用单线程,避免了上下文的切换导致消耗CPU 采用单线程,不用去考虑各种加锁释放锁的问题 使用IO多路复用模型,非阻塞IO Redis采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由C语言编写,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。 这个数据不比采用单进程多线程的同样基于内存的 K...
Redis 并发原子性原理
Redis原子性原理 摘要: 1、Redis是单进程单线程的网络模型,用的是epoll,poll,select网络模型,这些网络模型都是单线程处理网络请求 2、Redis的单线程处理所有的客户端连接请求,命令读写请求。(有些任务比如rdb和aof等操作是fork子进程处理的,不会影响redis主线程处理客户端的命令) 3、Redis提供的所有API操作,相对于服务端方面都是one by o...
redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发?
面试题 redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发? 面试官心理分析 这个是问 redis 的时候,最基本的问题吧,redis 最基本的一个内部原理和特点,就是 redis 实际上是个单线程工作模型,你要是这个都不知道,那后面玩儿 redis 的时候,出了问题岂不是什么都不知道? 还有可能面试官会问问你 redis...
Redis到底是多线程还是单线程?线程安全吗
转自:https://blog.csdn.net/bird73/article/details/79792548 总结: redis是单线程,线程安全 redis可以能够快速执行的原因: (1) 绝大部分请求是纯粹的内存操作(非常快速) (2) 采用单线程,避免了不必要的上下文切换和竞争条件 (3) 非阻塞IO - IO多路复用(IO 多路复用是什么意思?) IO多路复用中有三种方式:s...
15 聊聊redis的线程模型吧?为啥单线程还能有很高的效率?
目录 1、面试题 2、面试官心里分析 3、额外的友情提示 4、面试题剖析 (1)redis和memcached有啥区别 (2)redis的线程模型 (3)为啥redis单线程模型也能效率这么高? 1、面试题 redis和memcached有什么区别?redis的线程模型是什么?为什么单线程的redis比多线程的memcached效率要高得多(为什么redis是单线程的但是还可以支...
为什么redis是单线程仍这么快!
一、前言    近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”、什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题,这些看似不常见的概念,都与我们的缓存服务器相关,一般常用的缓存服务器有Redis、Memcached等。    二、Redis简介    Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据...
如何解决Redis的并发竞争key问题
第一种方案:分布式锁 1.整体技术方案 这种情况,主要是准备一个分布式锁,大家去抢锁,抢到锁就做set操作。 2.为什么是分布式锁 因为传统的加锁的做法(如java的synchronized和Lock)这里没用,只适合单点。因为这是分布式环境,需要的是分布式锁。 当然,分布式锁可以基于很多种方式实现,比如zookeeper、redis等,不管哪种方式实现,基本原理是不变的:用一个状态值表...
为什么redis 是单线程的?
以前一直有个误区,以为:高性能服务器 一定是 多线程来实现的 原因很简单因为误区二导致的: 多线程 一定比 单线程 效率高。其实不然。在说这个事前希望大家都能对 CPU 、 内存 、 硬盘的速度都有了解了,这样可能理解得更深刻一点,不了解的朋友点:CPU到底比内存跟硬盘快多少redis 核心就是 如果我的数据全都在内存里,我单线程的去操作 就是效率最高的,为什么呢,因为多线程的本质就是 CP...
redis单线程与分布式锁
Redis网络基础架构 网络编程离不开Socket,网络I/O模型最常用的无非是同步阻塞、同步非阻塞、异步阻塞、异步非阻塞,高性能网络服务器最常见的线程模型也就是基于EventLoop模式的单线程模型。我们看看Redis的网络架构是怎么样的: Redis基础组建结构 这里解释下上图涉及的组件,Redis网络层基础组件主要包括四个部分:     EventLoop事件轮训器,
单线程的redis为什么这么快
单线程的redis为什么这么快分析:这个问题其实是对redis内部机制的一个考察。其实根据博主的面试经验,很多人其实都不知道redis是单线程工作模型。所以,这个问题还是应该要复习一下的。回答:主要是以下三点(一)纯内存操作(二)单线程操作,避免了频繁的上下文切换(三)采用了非阻塞I/O多路复用机制题外话:我们现在要仔细的说一说I/O多路复用机制,因为这个说法实在是太通俗了,通俗到一般人都不懂是什...
redis是单线程的,为什么存取很快
-
Redis为什么是单线程
转自:https://www.zhihu.com/question/23162208 https://www.zhihu.com/question/55818031 Redis为什么是单线程的? 因为CPU不是Redis的瓶颈。Redis的瓶颈最有可能是机器内存或者网络带宽。(以上主要来自官方FAQ)既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。关于redis的
Redis并发问题
http://www.blogjava.net/caojianhua/archive/2013/01/28/394847.html
redis为什么是单线程设计,以及Redis为什么快
1 redis快的原因 https://zhuanlan.zhihu.com/p/34438275 1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1); 2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的; 3、采用单线程,避免了不必要的上下文切换和竞争条件,也不...
为什么说Redis是单线程的以及Redis为什么这么块
一、前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”、什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题,这些看似不常见的概念,都与我们的缓存服务器相关,一般常用的缓存服务器有Redis、Memcached等,而笔者目前最常用的也只有Redis这一种。 如果你在以前面试的时候还没有遇到过面试官问你《为什么说R...
Redis 为什么是单线程的?为什么单线程还那么快?
可能对于redis的是单线程的都知道,但是如果被问到为什么是单线程?为什么单线程还那么快?可能会突然的一脸懵逼。本片博客主要整理一下这两个问题。 Redis问什么是单线程? redis官网有关于redis常见问题的回答,从这个问题我们可以了解到一下重点: 1.CPU不是redis的瓶颈 2.redis的瓶颈主要在内存大小和网络的快慢 3.redis的tps能达到百万级(这已经够快了)...
Redis同时实现缓存和处理并发问题
前面两篇博客一篇是实现了redis做缓存,原理是在启动类中开启@EnableCaching注解,之后在需要缓存的地方使用@Cacheable和@CacheEvict注解;另一篇是实现了redis处理并发操作,原理是使用jedis的setnx命令操作。现在希望同时实现这两个功能,即可以在查询时使用缓存,也可以在更新时处理并发,这里综合前两篇博客即可: 一、项目: 结构: 1、pom: ...
redis解决高并发问题,如商品秒杀
做梦人 2017-08-04 10:56 http://www.toutiao.com/a6450243964058140941/?tt_from=weixin&utm_campaign=client_share&app=news_article&utm_source=weixin&iid=12675044243&utm_medium=toutiao_android&wxshare_coun
单线程实现并发
####**单线程下支持并发(服务端):** ``` from gevent import spawn,monkey;monkey.patch_all() from socket import * def server(ip,port): server = socket(AF_INET, SOCK_STREAM) server.bind((ip,port)) server
Redis之单线程模型
Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返回结果三个过程。其中执行命令阶段,由于Redis是单线程来处理命令的,所有每一条到达服务端的命令不会立刻执行,所有的命令都会进入一个队列中,然后逐个被执行。并且多个客户端发送的命令的执行顺序是不确定的。但是可以确定的是不会有两条命令被同时执行,不会产生并发问题,这就是Redis的单线程基本模型。 redis的多路复用选择器 在IO...
redis单线程模型分析
摘要 redis原理 底层实现 多线程 redis原理 底层实现 多线程 目录[-] redis原理  关于线程安全问题 redis原理 redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大。 不过,因为一般的内存操作都是简单存取操作,线程占用时间相对较短,主要问题在io上,因此,redis这种模型是
Redis到底是多线程还是单线程?
网上很多人认为Redis是单线程,但是根据其这么高的效率,然后用windows运行时查看任务管理器发现好像不止一个线程,所以求大神指点确认回答一下。 关注者 8 被浏览 3841 关注问题写回答 ​添加评论 ​分享 ​邀请回答 ​
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java 为何要学习反射 redis学习java