redis多线程(redis多线程改变值)

本篇文章给大家谈谈redis多线程,以及redis多线程改变值对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Redis 6.0多线程介绍

Redis作为一个基于内存的缓存系统,一直以高性能著称,

在单线程处理情况下,读速度可达到11万次/s,写速度达到8.1万次/s。

官方曾做过类似问题的回复:使用Redis时,几乎不存在CPU成为瓶颈的情况, Redis主要受限于内存和网络。

但是,单线程的设计也给Redis带来一些问题:

针对上面问题,Redis在4.0版本以及6.0版本分别引入了Lazy Free以及多线程IO,逐步向多线程过渡。

 

Redis服务器是一个事件姿罩驱动程序,服务器需要处理以下两类事件:

Redis服务器通过套接字与客户端前册悔(或者其他Redis服务器)进行连接。

文件事件就是服务器对套接字操作的抽象 。

服务器与客户端的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列网络通信操作。

(eg: 连接accept,read,write,close等)

Redis服务器中的一些操作(eg: serverCron函数)需要在给定的时间点执行。

时间事件就是服务器对这类定时操作的抽象

(eg: 过期键清理,服务状态统计等)

Redis将文件事件和时间事件进行抽象,时间轮询器会监听I/O事件表:

一旦有文件事件就绪,Redis就会优先处理文件事件,

接着处理时间事件。

在上述所有事件处理上,Redis都是以单线程形式处理,所以说Redis是单线程的。

处理过程见下图

Redis基于Reactor模式开发了自己的I/O事件处理器,也就是文件事件处理器。

Redis在I/O事件处理上,采用了I/O多路复用技术,同时监听多个套接字,

并为套接字关联不同的事件处理函数,通过一个线程实现了多客户端并发处理。

处理过程见下图

上述的设计,在数据处理上避免了加锁操作,既使得实现上足够简洁,也保证了其高性能。

当然, Redis单线程只慧正是指其在事件处理上 ,实际上,Redis也并不是单线程的,比如生成RDB文件,就会fork一个子进程来实现。

 

背景:

客户端向Redis发送一条耗时较长的命令,比如删除一个含有上百万对象的Set键,或者执行flushdb,flushall操作,

Redis服务器需要回收大量的内存空间,导致服务器卡住好几秒,对负载较高的缓存系统而言将会是个灾难。

为了解决这个问题,在Redis 4.0版本引入了Lazy Free, 将慢操作异步化 ,这也是在事件处理上向多线程迈进了一步。

将大键的删除操作异步化,采用非阻塞删除(对应命令UNLINK)。

大键的空间回收交由单独线程实现,主线程只做关系解除,可以快速返回,继续处理其他事件,避免服务器长时间阻塞。

意义:

Redis在4.0版本引入了Lazy Free,自此Redis有了一个 Lazy Free线程专门用于大键的回收 。

同时,也去掉了聚合类型的共享对象,这为多线程带来可能。

这为Redis在6.0版本实现了多线程I/O打下了基础。

 

Redis 6.0的多线程并未将事件处理改成多线程,而是在I/O上。

因为,如果把事件处理改成多线程,不但会导致锁竞争,而且会有频繁的上下文切换,

即使用分段锁来减少竞争,对Redis内核也会有较大改动,性能也不一定有明显提升。

流程简述如下:

见下图

 

Redis6.0的多线程默认是禁用的,只使用主线程。

如需开启需要修改redis.conf配置文件:

开启多线程后,还需要设置线程数,否则是不生效的。

同样修改redis.conf配置文件:

[img]

Redis到底是多线程还是单线程

redis本身是单线程的 ,只不过很多时候一台机器上会部署很多redis做集群。

redis实现多个线程同时修改同一个数据,保证数据一致性

memcached在多线程情况下是支持并发操作的,但是如果使用redis的话就发现redis是单线程,所以涉及到了并发的问题.

GET 获得键值后保证该键值不被其他客户端修改,直到函数执行完虚亏成后才允许其他客户端修改该键键值,这样滑正也可以防止竞态条件.

watch可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行。监控一直持续到EXEC命差让神令(事务中的命令是在EXEC之后才执行的,所以在MULTI命令后可以修改WATCH监控的键值)

Redis的IO多路复用——单线程的理解(Redis6.0之后的多线程)

Reactor 设计模式是一种 事件驱动 的设计模式,分发器(Dispatcher)使用多路分配器(Demultiplexer)监听多个客户端请求,当请求事件(Events)发生,分发器(Dispatcher)将一个或者多个客户端请求(Events)分发到不同的处理器(Event Handler)上塌斗,提升事件处理的效率。

下图为Reactor设计模式类图:

基于Reactor设行前计模式实现的IO多路复用

IO多路复用技术架构图如下

注:

多线程处理可能涉及锁,并且涉及切换线程的消耗。

耗时的命令会导团带磨致性能下降,而且无法发挥CPU多核的性能。

Redis多线程只用来处理网络数据的读写和协议解析,命令的执行仍旧是单线程。这样的设计改变是为了不想让Redis因为引入多线程变得复杂。而且过去单线程的使用主要考虑CPU不是Redis的瓶颈,不需要多条线程并发执行,所以多线程模型带来的性能提升不能抵消它带来的开发和维护成本。

而现在引入多线程模型解决的是网络IO操作的性能瓶颈。对于Redis基于内存的操作,仍然是很快的,而有时IO操作阻塞会影响着之后操作的效率。改为多线程并发进行IO操作,然后交由主线程进行内存操作,这样可以更好的缓解IO操作带来的性能瓶颈。

架构如下图:

关于redis多线程和redis多线程改变值的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

相关阅读

  • oraclesupport(Oracle support identifier)

    oraclesupport(Oracle support identifier)

    简介:Oracle Support是Oracle公司提供的一项重要的技术支持服务,旨在帮助客户解决Oracle软件产品在使用过程中遇到的问题,提高系统的稳定性和性能。本文将介绍Oracle Support的重要性以及具体的使用方法。一、Or...

    2024.04.17 09:55:21作者:intanet.cnTags:oraclesupport
  • hivetez(hive特征工程)

    hivetez(hive特征工程)

    标题:探索Hivetez的未来简介:Hivetez是一家领先的IT技术公司,在区块链和加密货币领域有着深厚的技术积累。本文将探索Hivetez在IT技术领域的未来发展方向和创新技术。一、区块链技术的应用Hivetez致力于将区块链技术应用于...

    2024.04.17 07:22:22作者:intanet.cnTags:hivetez
  • mysql或的简单介绍

    mysql或的简单介绍

    MySQL数据库简介MySQL是一种开源的关系型数据库系统,广泛应用于Web应用程序的开发中。它支持多种操作系统,包括Windows、Linux和Mac OS等,同时也支持多种编程语言,如PHP、Java和Python。MySQL具有高性能...

    2024.04.17 06:55:17作者:intanet.cnTags:mysql或
  • redis创建表(redis创建表命令)

    redis创建表(redis创建表命令)

    简介:Redis是一种内存数据库,广泛应用于缓存和消息传递等领域。在使用Redis进行开发时,我们经常需要创建表来存储数据。本文将介绍如何在Redis中创建表。一级标题:如何在Redis中创建表二级标题:连接Redis数据库首先,我们需要连...

    2024.04.16 12:55:11作者:intanet.cnTags:redis创建表
  • mongodbapi的简单介绍

    mongodbapi的简单介绍

    MongoDB是一种开源的NoSQL数据库管理系统,它具有高性能、高可用性和可伸缩性的特点,能够处理大量的非结构化数据。MongoDB提供了一套丰富的API,允许开发人员在应用程序中使用各种编程语言来操作和管理数据库。# 什么是MongoD...

    2024.04.16 12:44:25作者:intanet.cnTags:mongodbapi
  • redis3(redis30集群)

    redis3(redis30集群)

    简介:Redis是一种开源的高性能键值存储数据库,常用作缓存、消息队列、排行榜等场景。Redis3是Redis的一个重要版本,它带来了许多新的特性和性能优化,使得Redis在大规模应用中表现更加出色。本文将介绍Redis3的一些重要特性和使...

    2024.04.16 12:22:11作者:intanet.cnTags:redis3
  • db-3(db3双向触发二极管好坏的测量)

    db-3(db3双向触发二极管好坏的测量)

    IT技术在当今社会中扮演着重要的角色,它贯穿着各个行业和领域,为我们的生活带来了巨大的便利和发展。本文将介绍关于数据库技术的知识和应用,探讨数据库技术在IT领域中的重要性和作用。# 数据库技术的概念和分类数据库技术是指通过计算机系统来管理和...

    2024.04.16 11:55:16作者:intanet.cnTags:db-3
  • oracle中sysdate(oracle中sysdate返回多个日期)

    oracle中sysdate(oracle中sysdate返回多个日期)

    标题:Oracle中sysdate的用法简介:在Oracle数据库中,sysdate是一个函数,可用于获取当前的系统日期和时间。它常用于数据库操作中,例如插入、更新数据时记录操作的时间。一、sysdate函数的语法sysdate函数的基本语...

    2024.04.16 08:44:11作者:intanet.cnTags:oracle中sysdate