中间件 | Redis - [基本信息]

INDEX

      • [§1 常规用法](#§1 常规用法)
      • [§2 QPS](#§2 QPS)
      • [§3 pipeline](#§3 pipeline)

§1 常规用法

分布式锁

最常见用法,需要注意分布式锁的redis需要单点

分布式事务

分布式事务中,核心的技术难点其实是分布式事务这个事本身作为数据的持久化

  • 2PC,比如 seata 的 AT 模式下,将 undo 数据作为分布式事务数据进行了持久化
  • TCC 模式中,将事务锁作为分布式事务数据进行了持久化
  • 可靠性消息中,事务消息(transztionalMessage)即分布式事务消息的持久化
  • 独立消息服务中,要发一个什么样的消息这个信息作为分布式事务数据进行持久化

而 redis,本身也可以作为分布式事务数据的持久化容器,这是因为大部分分布式事务的处理过程中,最终分布式事务数据是要被物理删除的

分布式 ID

比如雪花算法的实现

简易消息队列

并发量较低、业务模型比较简单的分布式系统中可用

其他

计数器、排行榜、统计、开关标记集

§2 QPS

10W+

§3 pipeline

pipeline 简单的说就是指令打包

一个 redis 的指令(其实不限于 redis)可以分为 4 个阶段

  • 发出
  • 排队
  • 执行
  • 返回
    其中,1/4阶段都设计网络传输(即 RTT ,往返时间)。有可能,往返时间远高于指令的排队+执行时间,于是造成了相对显著的性能浪费

pipeline 可以批量发送指令给 redis-server

应用 & 最佳实践

通常使用 redis api 中提供的 pipeline

java 复制代码
Jedis jedis;

Pipeline p = jedis.pipelined();
p.set(key1,value1);
p.set(key2,value2);
p.set(key3,value3);
pipelined.sync();

通常,使用 pipeline 时,建议每次 pipeline 中报文总大小不超过 1460 字节,否则可能导致 http 拆包,也会造成性能损耗

集群 vs pipeline

pipeline 需要打包一批指令一口气提交到 redis-server 处理

在集群背景下,这一批指令很可能不在同一个集群节点上,redis 官方 API 如 jedis 等没有对这中操作进行支持(其实无论如何,都已经不能按 pipeline 初衷去使用了)

假设支持(比如头铁自研),需要注意死锁问题

假设 redis 有 ABC,pipeline 中指令的 key 分别对应 3 台机器

则只有 pipeline 同时持有 3个节点的连接时,才能正确提交

但可能获取到 AB 连接后,C 节点连接被全部占用,于是等待 C

而这两个等待的 AB 连接又禁止了其他指令使用,最终导致死锁

综上:集群中,不要用

相关推荐
Elastic 中国社区官方博客42 分钟前
我们如何在 Elasticsearch Serverless 上将向量搜索吞吐量提升一倍
大数据·数据库·人工智能·elasticsearch·搜索引擎·云原生·serverless
一 乐1 小时前
高校实习信息发布网站|基于Spring Boot的高校实习信息发布网站的设计与实现(源码+数据库+文档)
java·数据库·spring boot·后端·论文·毕设·高校实习信息发布网站
zgl_200537791 小时前
源代码:跨数据库通用SQL语法解析与标注拆解
大数据·数据库·数据仓库·sql·etl·源代码管理
雪度娃娃2 小时前
存储器层次结构——磁盘硬盘存储
服务器·网络·数据库·计算机组成原理
暴力求解2 小时前
Mysql数据库基础
数据库·mysql·操作系统
意倾城3 小时前
MySQL最左前缀匹配原则
数据库·mysql
暴躁小师兄数据学院3 小时前
【AI大数据工程师特训笔记】第13讲:数据库性能手术刀
大数据·数据库·数据仓库·sql·postgresql
步十人3 小时前
【Redis】持久化机制
数据库·redis·缓存
Quincy_Freak4 小时前
银河麒麟aarch64如何高效做数据分析?分享一款内网离线数据分析利器
大数据·数据库·数据挖掘·数据分析·aarch64
yurenpai(27届找实习中)4 小时前
redis_点评(25.附件店铺—把数据库里的店铺按【类型分组】,批量导入Redis 的 GEO 地理位置结构)
java·redis·缓存