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

推荐订阅源

F
Full Disclosure
博客园 - 三生石上(FineUI控件)
MyScale Blog
MyScale Blog
Apple Machine Learning Research
Apple Machine Learning Research
L
LINUX DO - 最新话题
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
宝玉的分享
宝玉的分享
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
GbyAI
GbyAI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
Visual Studio Blog
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
月光博客
月光博客
博客园 - 叶小钗
D
Docker
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Tailwind CSS Blog
D
DataBreaches.Net
酷 壳 – CoolShell
酷 壳 – CoolShell
B
Blog RSS Feed
量子位
美团技术团队
Vercel News
Vercel News
Y
Y Combinator Blog
IT之家
IT之家
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
SegmentFault 最新的问题
腾讯CDC
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
罗磊的独立博客
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
The Register - Security
The Register - Security
博客园 - 司徒正美
N
Netflix TechBlog - Medium
S
Schneier on Security
博客园 - 聂微东
U
Unit 42
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
雷峰网
雷峰网
Latest news
Latest news

博客园_首页

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--发布订阅命令和Redis事务
NE_STOP · 2026-05-01 · via 博客园_首页

BitMap操作命令

BitMap是一种新的数据类型。该数据类型本质上就是一个仅包含0和1的二进制字符串。其相关命令都是对这个字符串二进制位的操作。

用于描述该字符串的属性由三个:key、offset、bitValue。

  • key:BitMap类型对应得key(因为Redis是key-value型)
  • offset:BitMap是一个字符串,其中每个字符都有对应得索引,这个索引就是字符在BitMap中的偏移量offset,这个offset的范围是【0,232-1】
  • bitValue:BitMap数据都是一个仅包含0和1的二进制字符串,每个offset位上字符称为bitValue。bitValue的值非0即1。

============================================================

  • setbit: 为给定key的BitMap数据的offset位置设置值为value。返回值为修改前该offset位置的bitValue。

格式:setbit key offset value

注意:对于原BitMap中不存在的offset进行复制,字符串会自动伸展以确保它可以将value保存在指定offset上。

字符串伸展时,空白位置以0填充。需要注意的是,对使用较大offset的setbit操作。内存分配过程可能会造成Redis服务器阻塞。

  • getbit:获取指定offset上的位置bitValue
  • bitcount:统计字符串中bitValue为1的bit位数量。一般是统计整个字符串,也可以指定额外的start和end参数,实现对指定范围字符串的统计,包括start和end在内。注意:这里的start和end的单位是字节,不是bit,并且从0开始计数。

格式:bitcount key 【start】 【end】

注意:start和end可以使用负数,-1表示最后一个字节,-2表示倒数第二个。

​ 对于不存在的key。被当成空字符来处理,因此不存在的key进行bitcount操作的结果为0.

  • bitpos:返回BitMap中第一个值为指定值的二进制位的位置,默认是检测整个BitMap。也可以指定要检测的范围。

格式:bitpos key bit 【start】 【end】

  • bitop:对一个或多个BitMap 进行二进制位操作,并将结果保存到destkey上。

格式:bitop operation destkey key【key...】

说明:operation 可以是and、or、not、xor 这四种:

  1. and:对一个或多个BitMap 执行按位与操作,
  2. or:对一个或多个BitMap 执行按位或
  3. xor:对一个或多个BitMap 执行按位异或
  4. not:对一个或多个BitMap 执行按位异非

​ 除了not操作之外,其他操作都可以接收对一个或多个BitMap

​ 除了not操作之外,其他对一个BitMap的操作其实就是一个复制。

​ 如果参与运算的多个BitMap长度不同,较短的BitMap会以0作为补充位与较长的计算。

应用场景

由于offset的取值范围很大,所以一般应用于大数据量的二值性统计。

例如平台活跃用户统计(访问或未访问)、支持率、考勤统计、图像二值化等。

不过,对于数据量较小的二值性统计并不适合BitMap,使用Set更为合适。

HyperLogLog操作命令

HyperLogLog 数据类型是一种超级日志记录。

该数据类型可以简单理解成一个set集合,集合元素为字符串。

实际上HyperLogLog 是一种基数计数概率算法,通过该算法可以利用极小的内存完成独立总数的统计。

  • pfadd:将任意数量的元素添加到HyperLogLog 集合里面

格式:pfadd key element 【element...】

  • pfcount:该命令作用于单个key时,返回这个key的HyperLogLog 集合的近似基数(元素个数);

​ 作用于多个key时,返回所有key的HyperLogLog 集合的并集的近似基数。

格式:pfcount key 【key...】

  • pfmerge:将多个集合合并成一个集合,并存储到destkey,合并后的HyperLogLog 的基数接近于所有的HyperLogLog 集合的并集。

格式:pfmerge destkey sourcekey [sourcekey ...]

应用场景

HyperLogLog 可对数据量超级庞大的日志数据做不精确(误差0.81%)的去重计数统计。

对于平台上每个页面每天的UV数据,非常适合使用HyperLogLog 进行记录。

Geospatial操作命令

Geospatial 地理空间,本质上还是一种集合,只不过集合元素是一种由三部分构成的数据结构,这种数据结构称为空间元素:

  • 经度:longitude。有效经度为【-180,180】.正的表示东经,负的表示西经。
  • 纬度:latitude。有效维度为【-85.05112878,85.05112878】正的表示北纬,负的表示南纬
  • 位置名称:也称为该85.05112878集合的空间元素名称。

该类型可以设置、查询地理位置的经纬度,查询某范围内的空间元素,计算两个空间元素间的距离等。

  • geoadd:将一个或多个空间元素添加到集合中

格式:groadd key longitude latitude member 【 longitude latitude member...】

  • geopos:从指定的地理空间中返回指定元素的位置,即经纬度

格式:geopos key member [member...]

  • geodist:返回2个位置之间的距离。其中unit必须是以下单位的一种:m(米,默认)、km、mi(英里)、ft(英尺)

格式:geodist key member1 member2 [unit]

  • geohash:返回一个或多个位置元素的geohash值。

格式:geohash key member 【member...】

说明:geohash是一种地址编码方法,它能把二维的空间经纬度数据编码成一个字符串,该值主要用于底层应用或者调试,实际作用不大。

  • georadius:以指定的经纬度为中心,返回指定地理空间中包含的所有位置元素中,与中心举例不超过半径的元素,返回时还可以携带额外信息:

    • withdist:返回时携带位置元素与中心之间的距离,单位和用户给定的范围单位保持一致。
    • withcoord:将位置元素的经纬度也返回
    • withhash:将位置元素的geohash也返回,不过这个hash以整数形式表示。

    命令默认返回未排序的位置元素。可通过以下两个参数指定返回位置元素的排序方式:

    • asc:根据中心位置,从近到远的方式排序
    • desc:根据中心位置,从远到近的方式排序

    返回结果包含中心点元素。

格式:georadius key longitude latitude radius 【unit】【withcoord】【withdist】【withhash】【asc|desc】 [count]

  • georadiusbymember:和上面命令一样,只是该命令的中心是由位置元素给定的,而不是经纬度。

格式:georadiusbymember key member radius 【unit】【withcoord】【withdist】【withhash】【asc|desc】 [count]

应用场景

微信发现中的“附近”功能,钉钉签到功能等。

发布/订阅命令

消息系统

无标题

发布/订阅(pub/sub) 是一种消息通信模式:

发布者(消息生产者)生产和发送消息到存储系统;

订阅者(消息消费者),从存储系统接收和消费消息。

这个存储系统可以是文件系统FS、消息中间件MQ、数据库管理系统DBMS,也可以是Redis。

订阅者订阅消息后,只要存储系统中有该类消息,就可以不断的接收并消费这些消息。

当存储系统中没有消息后,订阅者就会阻塞。

当发布者将消息写入存储系统后,会立即唤醒订阅者。

当存储系统放满时,不同的发布者有不同的处理方式:有的会阻塞发布者发布,有的会将多余消息丢失。

不同的消息系统的发布/订阅方式不同:

RocketMQ、KAfka等消息中间件构成的消息系统,消息是以主题Topic分类的

Redis’则是以频道channel分类的。

  • subscribe: Redis客户端(消费者)通过此命令可以同时订阅任意数量的频道。在输出了主题后,命令处于阻塞状态,等待相关频道的消息。

格式:subscribe channel 【channel...】

  • psubscribe: 订阅一个或多个符合给定模式的频道

格式:psubscribe pattern [pattern...]

比如:psubscribe news.*

说明:这里的模式只能使用通配符*。

  • publish:发布一个频道消息,返回值为接收到该消息的订阅者·数量。

格式:publish channel message

  • unsubscribe : 退订指定的频道

格式:unsubscribe 【channel 【channel...】】

说明:如果没有频道被指定,那么客户端退订所有频道,这种情况会返回一个信息,告知客户端所有被退订的频道。

  • punsubscribe:退订一个或多个符合给定模式的频道。效果和unsubscribe 相同。

  • pubsub:查看订阅/发布系统状态的内省命令集。

    • pubsub numpat:查询当前Redis所有客户端订阅的所有频道模式的数量总和。
    • pubsub channels: 列出当前所有的活跃频道(至少有一个订阅者的频道)

    格式:pubsub channels 【pattern】

    说明:pattern参数可选,如果不指定pattern参数,会列出所有的活跃频道,

    ​ 如果给出pattern参数(只能使用通配符*),只列出相匹配的活跃频道。

    • pubsub numsub: 返回给定频道的订阅者数量。不给定任何频道就返回一个空列表。

Redis事务

Redis事务本质是一组命令的批处理。这组命令在执行过程中会被顺序地、一次性全部执行完毕,只要没出现语法错误,这组命令在执行期间是不会被中断的。

Redis事务特性

Redis事务不具有ACID特性,仅保证了数据的一致性!

  • 这组命令中的某些命令的执行失败不影响其他命令的执行,不会引发回滚。不具备原子性。
  • 这组命令通过乐观锁机制实现了简单的隔离性。没有复杂的隔离级别。
  • 这组命令的执行结果是被写入到内存,是否持久取决于Redis的持久化策略,与事务无关。

Redis事务实现

三个命令

Redis事务通过三个命令进行控制:

  • muti:开启事务,进入队列等待执行。
  • exec:执行事务
  • discard:取消事务

具体应用:

无1标题

无标2题

Redis事务异常处理

语法错误:整个事务作废,全部不执行;

运行时错误:错的报错,对的照常执行,无自动回滚

WATCH 冲突:事务放弃,业务层循环重试

Redis事务隔离机制

使用乐观锁实现事务隔离。

Redis通过watch命令再配合事务实现了多线程下的隔离操作。

无标3题

实现原理:

  1. 当一个客户端对key执行了watch后,就给key添加一个version乐观锁,并初始化version。初值为1.
  2. 客户端c做对key的修改命令写入到事务队列中,将该key的value和version进行了读取并保存,此时version=1
  3. 客户端c右对key进行了修改,改变了value,也改变了version=2
  4. 客户端c左执行exec,在执行之前将当前客户端缓存中的version和当前key的version 进行比较,发现不相等,说明当前客户端缓存的key‘的value已被修改,所以不执行写操作。