建设银行北京分行网站,大型农村电商平台,舆情服务公司,网站接入网方式redis 单线程模型
redis 只使用一个线程来处理所有的命令请求#xff0c;并不是说一个 redis 服务器进程内部真的就只有一个线程#xff0c;其实也有多个线程#xff0c;多个线程是再处理网络 IO。
那么在多线程中#xff0c;针对类似于这样的场景两个线程尝试同时对一个…redis 单线程模型
redis 只使用一个线程来处理所有的命令请求并不是说一个 redis 服务器进程内部真的就只有一个线程其实也有多个线程多个线程是再处理网络 IO。
那么在多线程中针对类似于这样的场景两个线程尝试同时对一个 变量 进行自增表面上看是自增两次实际上可能只只增了一次。 其中比如下面这种场景下 此时当前这个两个redis客户端也相当于“并发”的发起了上述的请求 此时就意味着是否服务器这边也会存在类似的线程安全问题吗 幸运的是并不会发生这种问题redis 服务器实际上是单线程模型保证了当前收到的这多个请求是串行执行的!!!
redis 虽然是单线程模型为啥效率这么高呢
redis 直接访问内存而如mysql等数据库则是访问硬盘。redis 核心功能比数据库的核心功能更加简单 数据库对于数据的插入删除查询都有更复杂的功能支持这样的功能势必要花费更多的开销。比如针对插入删除数据库中的各种约束都会使数据库做额外的工作。redis 单线程模型避免了一些不必要的线程竞争开销 redis 每个基本操作都是短平快的就是操作内存数据不是什么特别消耗cpu的操作就算搞多线程也提升不大处理网络 IO 的时候使用了 epoll 这样的 IO 多路复用机制~