惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
V
Visual Studio Blog
The GitHub Blog
The GitHub Blog
Apple Machine Learning Research
Apple Machine Learning Research
J
Java Code Geeks
T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
人人都是产品经理
人人都是产品经理
H
Heimdal Security Blog
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
Cyberwarzone
Cyberwarzone
Google DeepMind News
Google DeepMind News
雷峰网
雷峰网
Hacker News: Ask HN
Hacker News: Ask HN
Webroot Blog
Webroot Blog
Microsoft Azure Blog
Microsoft Azure Blog
MyScale Blog
MyScale Blog
A
About on SuperTechFans
V2EX - 技术
V2EX - 技术
小众软件
小众软件
博客园 - Franky
博客园 - 司徒正美
P
Privacy International News Feed
爱范儿
爱范儿
U
Unit 42
博客园 - 叶小钗
The Hacker News
The Hacker News
C
Check Point Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Simon Willison's Weblog
Simon Willison's Weblog
N
News and Events Feed by Topic
D
Docker
T
Threatpost
MongoDB | Blog
MongoDB | Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
H
Help Net Security
L
LINUX DO - 最新话题
Security Latest
Security Latest
T
The Exploit Database - CXSecurity.com
S
SegmentFault 最新的问题
A
Arctic Wolf
Spread Privacy
Spread Privacy

博客园_首页

Linux实操--组管理、权限管理和定时任务 Java + EasyExcel 实现单个接口导出多个Excel Mem0 源码解析系列(二):提示词工程的深度剖析 Openclaw TaskFlow究竟是什么?和普通Skill技能有什么区别 博文阅读密码验证 - 博客园 嘉立创开源:应该是全网MicroPython教程最多的开发板 Hermes Agent 集成实践:从协议到生产 2026年AI编程工具横评:Cursor、Codex、Claude Code、Zed、Windsurf Java程序员必看的RAG入门教程 2026 AI效率神器:Superpowers + Claude Code 保姆级教程 本地大模型部署全攻略:从 0 到 1 玩转 Ollama 【从0到1构建一个ClaudeAgent】内存管理-上下文压缩 .NET 高级开发 | 设计、实现一个事件总线框架 电子小白入门之NE555 3. WorkBuddy:隐藏玩法,一键召唤专家,让 AI 以"专家身份"给你干活 和AI一起搞事情#3:Claude Teammate 游戏开发翻车实录 【OpenClaw】通过 Nanobot 源码学习架构---(7)Memory C# .NET 周刊|2026年3月3期 我在 Debian 11 上把 K8s 单机搭起来了,过程没你想的那么顺(/opt 目录版) 深度学习进阶(七)Data-efficient Image Transformer CLI+Skill搭建浏览器AI自动化框架,告别一切重复枯燥任务 告别Token账单无底洞:OpenClaw本地部署,重塑企业数据主权的唯一解 FastAPI+Vue:文件分片上传+秒传+断点续传,这坑我帮你踩平了! SBTI 爆火后,我做了个程序员版的 CBTI。。已开源 + 附开发过程 多模态检索开始进入工程期:用 Sentence Transformers 搭建可落地的 Multimodal RAG 100多行代码实现一个最简单的Agent(用ReAct) Claude Code 通关手册(八):推荐 5 个 Hooks,代码质量提升 3 倍 老板:“有人截图了!”。安全部门:“收到,马上查暗水印!” - why技术 技术之外,皆是人间 C#/.NET/.NET Core技术前沿周刊 | 第 69 期(2026年4.01-4.12) Snack JSONPath 项目架构分析 Claude Code Buddy 小析:一个非核心功能,如何体现产品的细节完成度 AI新时代下的图床管理方案-Cloudflare图床+MCP+Skills方案指南 化繁为简:顺丰速运App如何通过 HarmonyOS SDK实现专业级空间测量 从零实现富文本编辑器#13-React非编辑节点的内容渲染 AI开发-python-langchain框架(3-23-OpenAI Functions风格Tool Calling智能助手) .NET + AI 进阶实战:基于类的技能开发 - 打造可治理的 Agent 能力模块 【从0到1构建一个ClaudeAgent】规划与协调-技能 上周热点回顾(4.6-4.12) 电子小白的工具三件套:面包板、杜邦线、万能板 单表五亿数据的查询优化 | Mysql、StarRocks 2. WorkBuddy:从“我是谁”到“帮我干活” C# 如何减少代码运行时间:7 个实战技巧 基于HelixToolkit.SharpDX 渲染3D模型 - 笺上知微 从零开始的双臂具身VLA起源及现阶段发展综述 - SkyXZ 记对 xonsh shell 的使用, 脚本编写, 迁移及调优 - pluvium27 受够了Vibe Coding的失控?换个起点,让AI事半功倍 从开始配置漏洞环境到漏洞复现流程 - 難しい 关于10年工作经验的程序员对OpenClaw的实战经验分享以及看法 - 虚无境 Any metadata 的内存布局 C# .NET 周刊|2026年3月2期 - InCerry 我帮你测过了,测试圈排名第二的 Skill 依然很牛逼 Skill Discovery | 无监督技能发现的经典工作总结 - MoonOut PbootCMS 网站内容数量多导致访问慢?这些实用优化方案帮你提速! - 家兴网络技术工作室 上下文工程是什么?过时了么?一文讲明白! - 一枫说码 网站漏洞怎么发现并修复?一篇实用指南(附完整流程) - 家兴网络技术工作室 开了 TUN 模式还是直连?90% 的人都踩过这个坑 Github日报|2026年04月12日 - AI一族 AScript扩展多种脚本语言 - rockey627 AI 学习笔记:Agent 的记忆机制 你能被装进一个文件里吗?——7 万人把同事"蒸馏"成了 AI - 我没有三颗心脏 Claude Code 通关手册(七):给 AI 装上技能包——Skills 完全指南 - 暮色之狐 在浏览器中快速编辑代码:VSCode Web 集成实践 - Newbe36524 蒸馏自己 skill?基于 Deepseek 的蒸馏器,丐版蒸馏方式,简单便捷 - To_Carpe_Diem Spring AI Aliababa和AgentScope,哪个更好? - 苏三说技术 Etsy 把 1000 个 MySQL 分片迁进 Vitess:425TB 数据背后的真正问题不是性能,而是运维规模 MicroPython LVGL基础知识和概念:底层渲染与性能优化 - FreakStudio 数据库草图算法 Python 潮流周刊#146:CPython 引入 Rust 的进展 - 豌豆花下猫 最小生成树 - mofei1116 红日靶场七:从外网入口、容器逃逸到 AD 接管的完整利用链复盘 - YouDiscovered1t 分享四款开源且实用的 Kafka 管理工具 - 追逐时光者 vLLM 权重加载机制全解析:从挑战到理想架构 LCT 学习笔记 - ACehomoxue Avalonia UI 12.0.0 正式发布:架构演进和性能飞跃 - 张善友 当 AI Agent 把调用链拉长,延迟开始成为一门生意 conhost.exe 无法显示 U+2717 - 145a 太秀了,我把自己蒸馏成了 Skill!已开源 - 程序员鱼皮 ASP.NET Core 内存缓存实战:一篇搞懂该怎么配、怎么避坑 基于 Ghostty 带有分割标签页和为 Claude 编程设计的通知终端 - BugShare AI 焊死入口:教育的“操作系统级”重塑 - 郝hai 初级Java开发工程师使用sql脚本编写代码的过程是简单而且不糊涂 - CoderOilStation Claude Code通关手册(六):MCP协议完全指南 - 暮色之狐 边框灯光环绕动画特效实现指南 - Newbe36524 开源:子木蒸馏版的 SEO 审计工具 seo-audit-skill v1.0 我所理解的Python元模型 【从0到1构建一个ClaudeAgent】规划与协调-TodoWrite - 程序员Seven Claude 和 Codex 在审计 Skill 上性能差异探究 - ACai_sec AScript如何实现中文脚本引擎 - rockey627 【渗透测试】HTB Season10 Garfield 全过程wp - dynasty_chenzi Android 开发者为什么必须掌握 AI 能力?端侧视角下的技术变革 树状数组正确性证明 - AC-wyr 你的 AI 焦虑,可能比 AI 本身更危险——ATM 机没有消灭银行柜员,但恐慌消灭了你的判断力 - 我没有三颗心脏 一个拉胯的分库分表方案有多绝望?整个部门都在救火! - 冰河团队 动态规划入门必学之走方格问题 - Ofnoname PostgREST 与 PostgreSQL 角色权限配置全解析(生产级实践) - SheepDog1998 使用 UEFI 图形输出协议 GOP 在屏幕上显示图像的方法 - 阿源- Claude Code通关手册(五):组建你的AI专家团队,子代理系统 - 暮色之狐 一个程序员到架构师的催婚路之感悟(整整10年后的催婚相亲感悟) - MisterLip 用 Agent Skill 自动生成工作周报 - 赵康
Redis--简介及配置文件详解
NE_STOP · 2026-04-24 · via 博客园_首页

Redis简介

Redis(Remot Dictionary Server 远程字典服务)是一个使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志型、NoSQL开源内存数据库。

Redis之所以称为字典服务,因为它是一个key-value存储系统,支持的数据类型有String(字符串)、List(链表)、set(集合)、zset(有序集合)、hash(哈希)等数据结构。

NoSQL说明

NoSQL(non-relational):泛指非关系型数据库。NoSQL就是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题。

NoSQL数据库主要有4类:

  1. 键值存储数据库:像Map一样的键值对,典型代表是Redis。

  2. 列存储数据库

    关系型数据库就是典型的行存储数据库。但是其存在一个问题,就是按行存储的数据在物理层面占用的是连续的存储空间,不适合海量数据存储。

​ 按列存储则可实现分布式存储,适合海量存储,典型代表是HBase。

  1. 文档型数据库:NoSQL与关系型数据库的集合,最像关系型数据库的NoSQL。半结构化的文档以特定的格式存储,比如json。

​ 典型代表是MongoDB。

  1. 图形(Graph)数据库

​ 用于存放一个节点关系的数据库,例如描述不同人之间的关系。典型代表是Neo4j

Redis的用途

Redis使用最多的场景就是做数据缓存。即客户端从DBMS中查询出的数据首先写入到Redis中,后续无论哪个客户端再访问该数据,直接读取Redis中的即可,不仅减小了RT,而且降低了DBMS压力。

无标题

根据Redis缓存数据与DBMS数据的同步性划分,可划分为两类:

  • 实时同步缓存:只要DB中的数据发生了变更,就清除缓存中的数据,下次查询就会从DBMS中查询获取最新数据并写入到缓存中,这样数据就保持了一致。
  • 阶段性同步缓存:允许Redis缓存数据在一段时间内与DBMS中的数据不完全一致。而这个时间段就是这个缓存数据的过期时间。

Redis特性

Redis特性有:

  • 性能高(读的速度可达到11W次每秒,写的速度可以达到8W次每秒。主要因为:1.Redis 的所有操作都是在内存中发生的。2.Redis是C语言开发的。)
  • 简单稳定(Redis源码代码量小)
  • 可持久化(RDB与AOF)
  • 高可用集群
  • 丰富的数据类型
  • 功能强大(提供数据过期功能、发布/订阅功能、简单事务功能。。。)
  • 客户端语言广泛
  • 支持ACL权限控制(从Redis6开始引入ACL(Access Control List,访问控制列表,一种细粒度的权限控制策略,可以针对任意用户与组进行权限控制),为不同用户定制不同的权限)
  • 支持多线程IO模型(Redis以前版本采用单线程模型,从6.0版本开始支持多线程模型)

Redis的IO模型

Redis客户端提交的各种请求是如何被Redis处理的?

Redis处理客户端请求所采用的架构称为Redis的IO模型。不同版本的Redis采用的IO模型不同。

单线程模型

Redis3.0及以前版本,采用的是纯粹的单线程模型。即所有的客户端请求全部由一个线程处理。

无1标题

单线程模型采用了多路复用技术。

对于多路复用器的多路选择算法有三种:select模型、poll模型、epoll模型。
poll模型的选择算法:采用轮询算法。该模型对客户端的就绪处理是有延迟的。
epoll模型的选择算法:采用回调方式。根据就绪事件发生后的处理方式不同,分为LT模型和ET模型。

客户端向Redis提交请求,需要与Redis建立一个socket连接,并向事件分发器注册一个事件。

一旦事件发生就表明该连接已就绪。

一旦连接就绪,事件分发器就会获取客户端的请求,并将请求写入任务队列,等待线程处理。

之所以称为事件分发器,是因为它会根据不同的就绪事件,将任务交给不同的事件处理器去处理。

优点:可维护性高、性能高。不存在并发问题,不存在执行顺序的不确定性,避免了线程切换的开销,不需要加锁解锁。

缺点:性能会受到影响。单线程只能使用一个处理器,会造成cpu浪费。

混合线程模型

从Redis4.0开始,假如了多线程元素。处理客户端请求仍是单线程模型。但是对于一些比较耗时但又不影响对客户端的响应的操作,交给后台其他线程来处理。例如持久化、对AOF的rewrite、对失效连接的清理等。

无2标题

多线程模型

Redis6.0开始才是真正意义上的多线程模型。主要体现在对客户端请求的处理采用的是多线程模型。

无标3题

这里的“多线程”仅用于接收、解析客户端的请求,然后将请求写入任务队列。而对于具体任务的处理,仍是主线程处理。这样做使用户无需考虑线程安全问题、事务控制问题、像LPUSH/LPOP等命令的执行顺序问题。

优点:结合了多线程和单线程的优点,避开了他们的缺点。

缺点:没有明显缺点,最多就是真正处理任务的还是单线程,所有对性能也是有些影响。

Redis7安装到linux

  1. 安装gcc
  2. 下载redis:下载地址
  3. 然后安装到Linux虚拟机。

先解压:tar -zxvf redis-7.0.4.tar.gz

进入到解压目录后执行: make && make install

这样就安装完成了。

可以执行:redis-server 启动。

后台启动方式

由于 Redis 在前台会阻塞整个会话窗口,但关闭窗口会导致 Redis 停止,所以我们需要修改 Redis 配置文件,使其以后台方式启动。

  1. 修改redis的配置文件

    # 允许访问的地址,默认是127.0.0.1,会导致只能在本地访问。注释掉则可以在任意IP访问
    # bind 127.0.0.1 -::1
    # 守护进程,修改为yes后即可后台运行 
    daemonize yes
    # 关闭保护模式
    protected-mode no
    # 在1036行,放开requirepass,表示访问密码是111
    requirepass 111
    # 禁用命令,1076行添加
    rename-command flushall ""
    rename-command flushdb ""
    
  2. 然后执行:redis-server redis.conf 就可以后台启动了。

Redis各类客户端

# 使用命令行客户端连接远程redis服务器
redis-cli -h 192.168.192.102 -p 6379 -a 111   # -a 111 表示登录密码是111
  • 图形界面客户端

Redis Desktop MAnager: 百度网盘:https://pan.baidu.com/s/15xVRpCT8mkP2uT8PoBHT3g 提取码:v727

RedisPlus(开源免费)

  • Java代码客户端

所谓Java代码客户端就是一套操作Redis的API。本质就是一个或多个jar包,例如jdbc-redis、jedis等,常用的就是jedis。

Redis配置文件详解

基础说明

可以给Redis指定内存大小,单位解释如下:

无标4题

单位忽略字母大小写。如上图所示

includes

指定在当前配置文件中包含的配置文件,目的是便于配置信息管理:可以将不同场景的配置单独定义,然后在当前核心配置文件中根据不同场景选择包含不同的配置文件。

无5标题

注意:如果你想要外部的配置文件覆盖核心配置文件里的相同配置,需要将include /...路径... 放到核心配置文件的最后一行!

modules

Redis配置文件通过加载不同的第三方模块,来增强、扩展Redis的功能。

无标6题

tcp-backlog 511

无7标题

tcp-backlog是一个tcp的连接队列,主要解决高并发场景下客户端慢连接的问题。

这里设置的值是这个队列的长度。该队列与TCP连接的三次握手有关,不同的Linux内核,backlog队列中存放的元素(客户端连接)类型不同:

  • Linux内核2.2之前,队列中存放的是已完成第一次握手的所有客户端连接,其中也包含已完成三次握手的客户端连接。所以,此时backlog队列中有两种状态:未完成三次握手的连接状态为SYN_RECEIVED;已完成三次握手的连接状态ESTABLISHED。只有ESTABLISHED状态的连接才会被Redis处理。
  • Linux内核2.2之后,TCP系统中维护了两个队列:SYN_RECEIVED队列和ESTABLISHED队列。SYN_RECEIVED队列存放的是未完成三次握手的连接;ESTABLISHED队列存放的是已完成三次握手的连接。此时backlog就是ESTABLISHED队列。

TCP中的backlog队列长度在Linux中由内核参数somaxconn 来决定,所以,在redis中该队列的长度由Redis配置和somaxconn 共同决定(取他们中的最小值)。

查看somaxconn 值:cat /proc/sys/net/core/somaxconn

如何修改somaxconn 值?

vim /etc/sysctl.conf
# 然后添加一行
net.corn.somaxconn=2048
# 保存并退出后,执行命令如下,就可以生效,重启系统也可以生效,但是生产环境下不能重启系统,所以执行下面的命令即可
sysctl -p

general

daemonize : 设置Redis启动是否采用守护进程的方式,即是否后台启动。yes是采用后台启动。

pidfile: 指定Redis运行时pid写入的文件,无论时Redis是否采用守护进程启动,pid都会写入到该配置文件。

无标8题

如果没有配置pid文件,则不同的启动方式。pid文件的产生效果不同:

  • 守护进程方式启动(后台启动,daemonize yes):pid文件为 /var/run/redis.pid.
  • 前台启动(daemonize no):不产生pid文件。

loglevel notice :指定日志级别。

logfile "" : 指定日志文件。如果设置空串,则强制将日志记录到标准输出设备(显示器)。如果使用的是守护进程启动,并且还设置成空串,那么会将日志发送到设备/dev/null(空设备)。

database 16 :数据库数量,默认数据库是0号数据库。

clients

该模块用于设置与客户端相关的属性,仅包含一个属性 maxclients。

maxclients 设置Redis 可并发处理的客户端连接数量,默认是10000.如果达到最大连接数,则会拒绝再来的新连接,并返回一个异常信息:已达到最大连接数。

注意:该值不能超过Linux系统支持的可打开的文件描述符最大数量阈值。查看该阈值的办法:ulimit -n

memory management

配置可以控制最大可用内存及相关内容移除问题。

maxmemory

将内存使用限制为指定的字节数,当达到内存限制时,Redis将根据选择的逐出策略 maxmemory-policy 尝试删除符合条件的key。

如果不能按照逐出策略移除key。则会给写操作命令返回error,但对于只读命令时没有影响的。

maxmemory-policy

设置当达到maxmemory时,Redistribution将如何选择要移除的内容。当然,如果没有符合相应策略的内容要删除,则在写操作执行写入命令时会给出errors响应。redis中共支持8种移除策略:

  1. 不淘汰类(默认策略)

    1. noeviction

      内存满→不删任何 key,新写入命令直接报错;读命令正常。

      适用:Redis 当数据库、数据绝对不能丢。

  2. volatile 系列(仅淘汰带过期时间的 key)

    1. volatile-lru:过期 key 中,淘汰最近最少使用

    2. volatile-lfu:过期 key 中,淘汰访问频率最低

    3. volatile-random:过期 key 中,随机淘汰

    4. volatile-ttl:过期 key 中,优先淘汰马上就要过期的 key

  3. allkeys 系列(淘汰全部 key,永久 key 也会删)

    1. allkeys-lru:所有 key 中,淘汰最近最少使用(生产最常用

    2. allkeys-lfu:所有 key 中,淘汰访问频率最低

    3. allkeys-random:所有 key 中,随机淘汰

maxmemory-samples

用于指定挑选要删除的key的样本数量。

选样本的时候根据LRU,不能修改。从样本中选择要淘汰的key时,是根据maxmemory-policy指定的逐出策略。

maxmemory-eviction-tenacity

设置移除容忍度。数值越小表示容忍度越低,移除数据时的延迟越小(删的快);数值越大,容忍度越高,移除时的延迟越大(删的慢)。

默认是10,一般不会改动。

Threaded I/O

改模块用于配置Redis对多线程io模型的支持。

io-threads

指定启动多线程io模型时,要使用的线程数量。

比如:io-threads 4

一般会预留一个cpu核心,假如电脑是6核的,一般设置4。如果cpu是8核的,一般设置6

io-threads-do-reads

一般情况下,io线程只用作写操作,设置这个属性后,可以使io线程也可以开启读操作。

io-threads-do-reads yes

其实让io线程读操作没有多大用处,一般就默认设置就可以了,没必要开启。