logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

Redis的底层数据结构

摘要:本文深入剖析了Redis底层数据结构的设计原理。string类型采用SDS结构实现二进制安全;hash类型使用ziplist和hashtable两种编码,其中ziplist通过连续内存提升空间利用率但存在连锁更新问题,为此Redis 7.0引入listpack替代方案。重点分析了dict字典结构,其采用渐进式rehash策略,通过双哈希表设计和后台任务分批迁移数据,既保证扩容时不阻塞主线程,

文章图片
#redis#数据结构#数据库
【数据结构取经之路】布隆过滤器BloomFilter原理、误判率推导、代码实现

在一些场景下面,有大量数据需要判断是否存在,而这些数据不是整形,导致位图就派不上用场。这时,时代无比呼唤一种新的解决方案,布隆过滤器也就应运而生了。布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数(哈希函数)。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好得多,缺点是有一定的误判率和删

文章图片
#数据结构#c++
设计模式:单例模式

本文介绍了单例模式的概念、实现方式及其应用场景。单例模式确保一个类只有一个实例,并提供全局访问点,适用于负载均衡器等需要全局唯一实例的场景。文章详细阐述了单例模式的结构和两种实现方式:饿汉式(类加载时创建实例)和懒汉式(延迟加载),并分析了各自优缺点及线程安全问题。单例模式的优点包括全局唯一性、节省资源等,但也存在扩展性差、耦合度高等缺点。最后指出单例模式适用于需要唯一实例对象的场景,是结构最简单

文章图片
#设计模式#单例模式#c++
设计模式:策略模式

本文介绍了使用策略模式优化影院售票系统中电影票折扣计算的方法。原系统直接将不同用户类型的折扣算法硬编码在MovieTicket类中,违反了开闭原则且耦合度高。通过引入AbstractDiscount抽象类和具体折扣子类(如StudentDiscount、VipDiscount等),将折扣算法封装为独立策略。优化后的MovieTicket类通过组合方式调用折扣策略,实现了算法与业务逻辑的解耦。策略模

文章图片
#设计模式#策略模式
【数据结构取经之路】图解红黑树

AVL-tree之外,另一个颇具历史且被广泛使用的平衡二叉搜索树是红黑树(RB-tree),这名字听起来除了很抽象外,还颇具大哥味哈,会不会很难?客观地说,难度是有的,下面我们细细道来。//结点的颜色//红黑树结点的定义//结点的左孩子//结点的右孩子//结点的父节点//结点的颜色T _data;//结点的数据域{}以上就是红黑树节点定义,但有两个问题:为什么需要指向父节点的指针?为什么要将结点的

文章图片
#数据结构
从零实现 Reactor + ThreadPool TCP 服务器

本文介绍了如何从零实现一个基于Reactor模型和线程池的TCP服务器。首先分析了传统阻塞IO模型和一连接一线程模型的局限性,指出它们在高并发场景下的性能问题。然后引入非阻塞IO和IO多路复用技术,提出Reactor模型作为解决方案。Reactor模型由多路复用器、事件分发器和事件处理器三部分组成,能够高效管理大量并发连接。进一步引入线程池来提升性能,将IO操作与业务处理分离,Reactor线程负

文章图片
#服务器
Linux线程:基于环形队列的生产消费模型

本文介绍了使用POSIX信号量实现线程同步的方法,重点讲解了其在环形队列中的应用。文章首先对比了条件变量和信号量的线程同步机制,指出信号量通过计数器实现资源管理。随后详细说明了POSIX信号量的初始化、销毁、等待、释放等基本操作。最后通过一个环形队列的代码实例,展示了如何利用信号量解决假溢出问题,其中使用两个信号量分别控制空间和数据的可用性,配合互斥锁实现生产者和消费者的同步访问。

文章图片
#开发语言#linux#c++
Linux线程同步与互斥

本文介绍了线程同步与互斥的关键机制,重点讲解了互斥锁和条件变量的使用方法。通过生产者-消费者模型示例,展示了如何利用阻塞队列实现多线程并发控制。文章详细说明了互斥锁的初始化、加锁、解锁和销毁操作,以及条件变量的等待和唤醒机制。最后给出了一个基于C++的阻塞队列实现代码,该实现使用互斥锁保护共享队列,并通过条件变量协调生产者和消费者线程的同步操作,有效解决了多线程环境下的资源共享问题。

文章图片
#开发语言#linux#c++
Linux进程死锁

本文通过生动案例和代码示例详细讲解了操作系统中的死锁问题。首先以朋友借钱为例形象说明死锁概念,并指出死锁产生的四个必要条件:互斥、请求与保持、不可剥夺和循环等待。接着分析哲学家就餐和违反锁顺序两个经典死锁案例。针对死锁处理,提出四种策略:破坏互斥条件、破坏请求与保持条件、破坏不可剥夺条件和破坏循环等待条件。重点介绍了资源排序策略和银行家算法,通过安全序列确保系统处于安全状态来避免死锁。全文以通俗易

文章图片
#linux#运维
Linux内核O(1)调度算法

本文探讨了Linux2.6系统中普通进程的调度机制。操作系统通过快速切换进程创建多程序同时运行的假象,关键在于调度策略和时间片分配。理想的调度策略需兼顾公平性和吞吐量,而时间片长短直接影响系统响应和切换开销。进程分为I/O消耗型和CPU消耗型,通过静态和动态优先级调整实现调度优化。动态优先级基于进程等待时间、运行时间和类型动态调整,而静态优先级决定时间片长度。Linux采用O(1)调度算法,使用活

文章图片
#linux#运维#服务器
    共 28 条
  • 1
  • 2
  • 3
  • 请选择