Redis单线程为什么快

2024-06-24 00:28
文章标签 redis 单线程

本文主要是介绍Redis单线程为什么快,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先,需要明确,Redis只有redis-server是单线程的,指所有的命令处理流程在一个线程中处理。

  1. Redis是内存数据库,所有操作都是基于内存的, 不是CPU密集型的。
  2. 数据结构高效,不同的对象类型有不同的具体实现。
    • string:
      • int
      • raw
      • embstr
    • list: quicklist, 节点采用ziplist
    • hash:
      • ziplist
      • dict
    • set:
      • intset
      • dict
    • zset:
      • ziplist
      • skiplist
  3. 如果是多线程,那么就需要加锁,Redis中sds, list, hash, set, zset都有多种不同的实现,因此锁的粒度不好控制同时会导致CPU频繁的上下文切换。
  4. 对于网络连接,实际上采用的是Reactor网络模型,多路IO复用,非阻塞IO。
  5. 单线程所作的优化(耗时阻塞的操作,另起线程处理):
    • 异步关闭大文件 bio-close-file
    • 异步释放大内存 bio-lasy-free
    • 异步AOF刷盘 bio-aof-fasync
    • 内存池分配 jemalloc-bg-threads
    • IO多线程 io-threads read/write/decode/encode
    • 将大操作拆分成小操作
      • 渐进式rehash: ①分散在每一步操作中,移动一个 ②空闲时,rehash 1ms
    • 根据对象选择不同的数据结构
      • 根据节点的数量动态选择数据结构
      • 在时间和空间上进行均衡

最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB

这篇关于Redis单线程为什么快的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088703

相关文章

Windows/macOS/Linux 安装 Redis 和 Redis Desktop Manager 可视化工具

本文所有安装都在macOS High Sierra 10.13.4进行,Windows安装相对容易些,Linux安装与macOS类似,文中会做区分讲解 1. Redis安装 1.下载Redis https://redis.io/download 把下载的源码更名为redis-4.0.9-source,我喜欢跟maven、Tomcat放在一起,就放到/Users/zhan/Documents

为什么要做Redis分区和分片

Redis分区(Partitioning)和分片(Sharding)是将数据分布在多个Redis实例或多个节点上的做法。这种技术用于提高性能、可扩展性和可用性。以下是执行Redis分区和分片的主要原因: 1. **提高吞吐量**:    - 通过将数据分散到多个节点,可以并行处理更多的操作,从而提高整体吞吐量。 2. **内存限制**:    - 单个Redis实例的内存是有限的。分区允许数据

如何理解redis是单线程的

写在文章开头 在面试时我们经常会问到这样一道题 你刚刚说redis是单线程的,那你能不能告诉我它是如何基于单个线程完成指令接收与连接接入的? 这时候我们经常会得到沉默,所以对于这道题,笔者会直接通过3.0.0源码分析的角度来剖析一下redis单线程的设计与实现。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客专家 ,也是开源

Redis-在springboot环境下执行lua脚本

文章目录 1、什么lua2、创建SpringBoot工程3、引入相关依赖4、创建LUA脚本5、创建配置类6、创建启动类7、创建测试类 1、什么lua “Lua”的英文全称是“Lightweight Userdata Abstraction Layer”,意思是“轻量级用户数据抽象层”。 2、创建SpringBoot工程 3、引入相关依赖 <?xml version

redis切换数据库的方法【jedis】

package com.test;import redis.clients.jedis.Jedis;public class readredis {public static void main(String[] args) {// 连接本地的 Redis 服务Jedis jedis = new Jedis("127.0.0.1", 6379);jedis.select(10);String v

Redis 高性能基本操作

单元素操作是基础 单元素操作,是指每一种集合类型对单个数据实现增删改查 例如,Hash 类型的 HGET、HSET 和 HDEL,Set 类型的 SADD、SREM、SRANDMEMBER 等这些操作的复杂度由集合采用的数据结构决定,例如,HGET、HSET 和 HDEL 是对哈希表做操作,所以它们的复杂度都是 O(1)Set 类型用哈希表作为底层数据结构时,它的 SADD、SREM、SRAN

redis高级用法

redis 慢日志查询 配置参数 slowlog-log-slower-than 10000 #单位微秒 slowlog-max-len 选项指定服务器最多保存多少条慢查询日志 redis-cli slowlog get #获取慢日志1) 1) (integer) 4 # 日志的唯一标识符(uid)2) (integer) 1378781447 # 命令执

redis在window下安装

1、redis简介 redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hashs(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redi

redis增大查询速度(项目中实际应用举例)

1、关于保存User表的方案       1.1  使用Redis的Hash类型去保存关系型数据库的User表        1.2 redis的Hash的key为"SYS_USER_TABLE_SEX_MAN",field:userid   value:json 数据 2、利用Redis的Set来保存满足一类条件的User用户的id信息。例如,性别为女,年龄大于25岁等条件。 3

redis哨兵、集群

1. 安装Redis3.0 yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc-c++ libstdc++-devel tcl   mkdir -p /usr/local/src/Redis cd /usr/local/src/redis wget http:/