首页 > 数据库 >Redis的单线程和高性能

Redis的单线程和高性能

时间:2022-10-27 18:46:48浏览次数:53  
标签:单线程 redis Redis 高性能 线程 IO 多线程

Redis是单线程吗?

Redis 的单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。

Redis 单线程为什么还能这么快?

因为它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性能损耗问题。正因为 Redis 是单线程,所以要小心使用 Redis 指令,对于那些耗时的指令(比如keys),一定要谨慎使用,一不小心就可能会导致 Redis 卡顿。

Redis 单线程如何处理那么多的并发客户端连接?

Redis的IO多路复用:redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到文件事件分派器,事件分派器将事件分发给事件处理器。

# 查看redis支持的最大连接数,在redis.conf文件中可修改,# maxclients 10000
127.0.0.1:6379> CONFIG GET maxclients
    ##1) "maxclients"
    ##2) "10000"

Redis6.0新特性

redis 6.0 提供了多线程的支持,redis 6 以前的版本,严格来说也是多线程,只不过执行用户命令的请求时单线程模型,还有一些线程用来执行后台任务, 比如 unlink 删除 大key,rdb持久化等。

redis 6.0 提供了多线程的读写IO, 但是最终执行用户命令的线程依然是单线程的,这样,就没有多线程数据的竞争关系,依然很高效。

redis 6.0 以前线程执行模式,如下操作在一个线程中执行完成

0

redis 6.0 线程执行模式:

可以通过如下参数配置多线程模型:

如:

io-threads 4 // 这里说 有三个IO 线程,还有一个线程是main线程,main线程负责IO读写和命令执行操作

默认情况下,如上配置,有三个IO线程, 这三个IO线程只会执行 IO中的write 操作,也就是说,read 和 命令执行 都由main线程执行。最后多线程将数据写回到客户端。

开启了如下参数:

io-threads-do-reads yes // 将支持IO线程执行 读写任务

标签:单线程,redis,Redis,高性能,线程,IO,多线程
From: https://www.cnblogs.com/daheww/p/16833282.html

相关文章

  • Redis开发规范与性能优化
    目录一、键值设计二、命令使用三、客户端使用四、系统内核参数优化一、键值设计1.key名设计【建议】可读性和可管理性以业务名(或数据库名)为前缀(防止key冲突),用冒号......
  • redis使用实例
    //检查key是否存在,返回boolean值1.stringRedisTemplate.hasKey(Stringkey)//根据key获取缓存中value2.stringRedisTemplate.opsForValue().get(Objectkey)//截取key......
  • OpenResty+mysql+redis
    1、       ad_load.lua  nginx.conf1、读取mysql并缓存redis     参考:https://www.cnblogs.com/bbgs-xc/p/14437703.html https:/......
  • Redis常用概念及操作
    目录概述是什么?常见的作用缓存分布式锁五种数据结构String常用命令应用场景Hash常用命令应用场景优缺点优点缺点Set常用命令应用场景List常用命令Zset常用命令应用场景其它......
  • redis 常用命令总结
                     在Java中操作Redismaven坐标:<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-da......
  • Redis 缓存数据库一致性手撕面答
    引言自Redis入门篇过后,已经好久没更Redis了,接下来应该从实战篇,原理篇,面试篇几个层次来展开,本篇主要是实战篇中的数据库缓存一致性问题,以问题形式展开,应对面试场景作答【melo......
  • windows安装多个redis
    思路:首先安装1个,然后复制文件包,该端口,安装和启动服务即可 第一步:将本地已安装Redis的目录复制一份儿,目录重新命名(目录名称自行定义即可)。我定义的目录名称是Redis6380......
  • redis集群手动切换主从
    生产环境一个三主三从,其中一个主节点挂掉了,但是没有自动切换到从节点cluster-require-full-coverage默认为yes,当集群中一段槽位的主从都不可用时,整个集群不提供服务直接导致......
  • AgileBoot - 如何集成内置数据库H2和内置Redis
    背景介绍为什么我们需要内置的数据库和Redis呢?优点:内置的数据库H2,可以让我们在无依赖数据库的情况下,做集成测试。比如我们想测试添加一个学生到数据库,就需要启动一台数据库......
  • nginx+lua+redis实现广告缓存
    需求分析#需要在页面上显示广告的信息。OpenResty#OpenResty介绍#OpenResty(又称:ngx_openresty)是一个基于NGINX的可伸缩的Web平台,由中国人章亦春发起,提供了很多......