2016 - 2024

感恩一路有你

redis多线程避免同时访问 redis单线程为什么比多线程快?

浏览量:1835 时间:2021-03-13 22:00:08 作者:admin

redis单线程为什么比多线程快?

通常来讲,单线程处理能力要比多线程差,但是redis为什么就快了,这主要得益于以下几个原因:

1.纯内存访问,redis将所有数据放在内存中,内存的响应时长大约为100纳秒,这是redis达到每秒万级别的访问的重要基础。

2.非阻塞IO,redis使用epoll作为I/O多路复用技术的实现,再加上redis自身的事件处理模型将epoll中的连接、读写、关闭都转为事件,不在网络I/O上浪费过多的时间。

3.单线程避免了线程切换和竞态产生的消耗。

单线程的好处:

1.简化数据结构和算法的实现。

2.避免了线程切换和竞态产生的消耗,对于服务端来说,锁和线程切换通常是性能杀手。

单线程的问题:对于每个命令的执行时间是有要求的。如果某个命令执行过程,会造成其他命令的阻塞,对于redis这种高性能的服务来说是致命的,所以redis是面向快速执行场景的数据库。

redis读多线程会出现脏数据吗?

是的,和我们单线程,跑两个50000,会输出100000。现在是两个并发线程同时跑在由于并发造成的数据结果往往不是我们想要的。那么如何解决这个问题呢,Redis已经为我们准备好了!你可以看到我RedisHelper中有个方法是 public IDisposable Setnx(string key)。 也可以看到他返回的是IDisposable,证明我们需要手动释放资源。方法内部的 AcquireLock正是关键之处,它像redis中索取一把锁头,被锁住的资源,只能被单个线程访问,不会被两个线程同时get或者set,这两个线程一定是交替着进行的,当然这里的交替并不是指你一次我一次,也可能是你多次,我一次,下面看代码。

redis多线程避免同时访问 redis多线程同时读写 redis多线程同时写

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。