【Redis】Redis内部编码 与 单线程架构

【Redis】Redis内部编码 与 单线程架构

目录

一、常用数据结构

Redis 对外说values 常用的数据结构是:string(字符串)、list(列表)、hash(哈希)、set(集合)、zset(有序集合)等等,但是其实内部实现在不同情况下也与常见的数据结构有一定的不同。

二、 内部编码

  • String类型,有 raw ,int,embstr 三种实现。
    • raw : 最基本的字符串,底层就是字符数组
    • int :当value就是一个整数的时候,Redis直接使用int来保存
    • embstr:针对短字符串进行的特殊优化
  • hash类型,有hashtable,ziplist两种实现。
    • hashtable:最基本的hash表
    • ziplist:在hash表元素比较少的时候,使用压缩列表,节省空间
  • list类型,有linkedList 和 ziplist两种实现。
    • linkedlist:正常普通的链表
    • ziplist:list元素较少的时候,使用压缩列表。
    • 在Redis3.2之后,使用quicklist代替上面两种。quicklist就是一个元素是ziplist的链表。
  • set类型,有hashtable,intset两种实现。
    • hashtable:hash表
    • intset:集合中存的都是整数时使用
  • zset类型,有skiplist和ziplist两种实现。
    • skiplist:跳表,每个节点有多个指针域,巧妙使用可以做到查询元素时间复杂度为O(logN)
    • ziplist:元素较少的时候使用

可以使用 object encoding key查看key对应的value的内部编码。

三、单线程架构

Redis 使⽤了单线程架构来实现⾼性能的内存数据库服务。

宏观上我们多个客户端可能会同时请求Redis服务器,但是实际上由于Redis服务器处理请求的是单线程,就算真的命令同时到达,也得排队串行执行。

  1. 单线程还能这么快(与关系型数据库相比)的原因:因为Redis核心业务逻辑都是短平快的,不太吃CPU资源。
纯内存访问。Redis 将所有数据放在内存中,内存的响应时⻓⼤约为 100 纳秒,这是 Redis 达到每秒万级别访问的重要基础。⾮阻塞 IO。Redis 使⽤ epoll 作为 I/O 多路复⽤技术的实现,再加上 Redis ⾃⾝的事件处理模型将 epoll 中的连接、读写、关闭都转换为事件,不在⽹络 I/O 上浪费过多的时间.单线程避免了线程切换和竞态产⽣的消耗。单线程可以简化数据结构和算法的实现,让程序模型更简单;其次多线程避免了在线程竞争同⼀份共享数据时带来的切换和等待消耗。

Redis 使⽤ I/O 多路复⽤模型:

  1. Redis单线程的缺点:如果某个命令执⾏过⻓,会导致其他命令全部处于等待队列中,迟迟等不到响应,造成客⼾
    端的阻塞,对于 Redis 这种⾼性能的服务来说是⾮常严重的。

Read more

VSCode + Copilot下:配置并使用 DeepSeek

以下是关于在 VSCode + Copilot 中,通过 OAI Compatible Provider for Copilot 插件配置并使用 DeepSeek 系列模型 (deepseek-chat, deepseek-reasoner, deepseek-coder) 的完整汇总指南。 🎯 核心目标 通过该插件,将支持 OpenAI API 格式的第三方大模型(此处为 DeepSeek)接入 VSCode 的官方 Copilot 聊天侧边栏,实现原生体验的调用。 📦 第一步:准备工作 在开始配置前,请确保已完成以下准备: 步骤操作说明1. 安装插件在 VSCode 扩展商店搜索并安装 OAI Compatible Provider for Copilot。这是连接 Copilot 与第三方模型的核心桥梁。2. 获取 API

By Ne0inhk
本地多模型切换利器——Llama-Swap全攻略

本地多模型切换利器——Llama-Swap全攻略

运行多个大语言模型(LLM)非常有用: 无论是用于比较模型输出、设置备用方案(当一个模型失败时自动切换)、还是实现行为定制(例如一个模型专注写代码,另一个模型专注技术写作),实践中我们经常以这种方式使用 LLM。 一些应用(如 poe.com)已经提供了多模型运行的平台。但如果你希望完全在本地运行、多省 API 成本,并保证数据隐私,情况就会复杂许多。 问题在于:本地设置通常意味着要处理多个端口、运行不同进程,并且手动切换,不够理想。 这正是 Llama-Swap 要解决的痛点。它是一个超轻量的开源代理服务(仅需一个二进制文件),能够让你轻松在多个本地 LLM 之间切换。简单来说,它会在本地监听 OpenAI 风格的 API 请求,并根据请求的模型名称,自动启动或停止对应的模型服务。客户端无需感知底层切换,使用体验完全透明。 📌 Llama-Swap 工作原理 概念上,Llama-Swap 就像一个智能路由器,

By Ne0inhk
GitHub Copilot 调用第三方模型API

GitHub Copilot 调用第三方模型API

一、说明 OAI Compatible Provider for Copilot 的作用是:把 Copilot/Copilot Chat 发出的“类似 OpenAI API 的请求”,转发到指定的 OpenAI-Compatible 服务端(例如 ModelScope 推理网关、自建的兼容网关等)。 ⚠️ Warning 登录 GitHub Copilot 的账号一定要是非组织方式开通 pro 会员的,不然无法管理模型。 推荐直接用免费的free账号登录即可。 二、插件安装 在 VS Code 扩展市场安装并启用: * GitHub Copilot * GitHub Copilot Chat * OAI Compatible Provider for Copilot (johnny-zhao.

By Ne0inhk

IDEA高效集成GitLab:完整Git工作流指南

文章目录 * 前言 * 一、IDEA配置Git * 二、GitLab 创建项目并导入IDEA * 三、IDEA 运行项目 * 四、Git 操作流程 * 1. 项目提交与推送 * 2. 分支管理 * 3. 合并冲突 * 4. 提交历史和还原 * 五、接口测试 前言 本文将详细介绍如何通过 IntelliJ IDEA 实现与 GitLab 集成,完成完整的 Git 工作流程。主要内容包括:IDEA 的 Git 配置、GitLab 项目创建与导入,以及日常开发中最常用的 Git 操作,涵盖代码提交与推送、分支管理、合并冲突解决和提交历史查看/回滚等核心功能。 ps: 部署 Git

By Ne0inhk