
【Redis-进阶实战】
文章平均质量分 94
Redis实战场景 原理剖析
小小工匠
show me the code ,change the world
展开
-
Redisson - 分布式锁和同步器
例如:当持有锁的客户端因进程暂停(如JVM的STW)导致锁超时释放时,其他客户端可能同时获取同一资源的锁,破坏互斥性。Martin指出,RedLock依赖的“多数派加锁成功”机制无法保证严格的互斥性,尤其在节点故障恢复或主从切换时,可能产生锁状态不一致的问题。基于Redis或Valkey的分布式可重入栅栏锁(Java实现),通过**防护令牌(Fencing Token)**避免因客户端长时间停顿(如GC暂停)导致的锁失效问题。,当持有锁的Redisson实例存活时,它会延长锁的过期时间。原创 2025-03-27 18:45:00 · 907 阅读 · 0 评论 -
Redis - 缓存设计深度解析:穿透、并发、雪崩与热点策略
举一个实际的场景,比如用户在应用系统的后台添加一条配置信息,配置信息存储到了 MySQL 数据库中,同时数据库更新了 Binlog 日志数据,接着再通过使用 Canal 组件来获读取最新的 Binlog 日志数据,然后解析日志数据,并通过事先约定好的数据格式,发送到 MQ 消息队列中,最后再由应用系统将 MQ 中的数据更新到 Redis 中,这样就完成了缓存操作和业务代码之间的解耦。如果缓存中没有数据,则从数据库中读取数据,然后再更新缓存,这样再获取这条数据时,可以直接从缓存中获取,不用再读取数据库。原创 2025-03-05 07:45:00 · 1368 阅读 · 0 评论 -
Redis - 核心原理深度解析:线程模型、持久化与高可用性
Redis作为当前最流行的缓存中间件,凭借其高性能和高可用性成为分布式系统中的核心组件。接下来 将深入剖析Redis的线程模型、数据持久化机制及高可用方案,全面掌握Redis的核心原理。通过深入理解Redis的线程模型、持久化机制与高可用架构,开发者能够更好地设计高性能、高可靠的缓存方案。在实际应用中,需根据业务场景灵活选择持久化策略与集群方案,持续优化系统表现。原创 2025-03-05 05:15:00 · 1674 阅读 · 0 评论 -
Redis - 解读三种方案实现Redis跨机房数据同步
随着业务规模不断扩大,多机房部署成为保障系统高可用性、容灾和低时延访问的重要手段。作为高性能内存数据库的Redis,其跨机房数据同步方案备受关注。本文将详细探讨业界常见的三种数据同步方案:主从服务器模式、代理服务器模式和多活服务器模式,分析各自的实现原理、优缺点以及适用场景,为系统架构设计提供参考。主从服务器模式:利用PSYNC实现数据单向传输,技术实现简单,适用于备份与灾备场景,但不支持双向数据同步。代理服务器模式:通过部署代理层实现数据透明同步,适合对业务无侵入要求的场景,但运维和性能上存在一定挑战。原创 2025-03-04 07:30:00 · 1385 阅读 · 0 评论 -
Redis - 三种Redis集群实现方案之_路由查询(Redis Cluster)
其中的每个节点会互相通信,并且节点的信息、端口以及槽都会定期交换和更新,而数据的分片是采用虚拟槽(16384个)来实现的。路由查询的缺点是带宽消耗较大,例如节点之间的定时Gossip消息交换以及pub/sub广播存在数据倾斜的问题,当节点过大时本身的性能不高,不过可采取智能客户端来改善此问题。路由查询的优点是去中心化实现,部署比较简单,5.0版本后自带节点扩容和Codis,以及数据槽迁移工具,做到了业务无感知。返回MOVED 5798 NodeB。计算slot=5798。请求key=test。原创 2025-03-04 05:30:00 · 1574 阅读 · 0 评论 -
Redis - 三种Redis集群实现方案之_基于代理的分片
集群实现的基础或者说核心价值是分片(sharding)。存储扩展:利用多节点内存总和构建超大存储空间计算扩展:通过多核/多机提升计算能力带宽扩展:分布式架构突破单机网络瓶颈Redis的集群实现方案可以归纳为客户端分片、基于代理的分片和路由查询这3种。fill:#333;color:#333;color:#333;fill:none;分片方案客户端分片代理分片路由查询一致性哈希TwemproxyCodis。原创 2025-03-03 07:15:00 · 1571 阅读 · 0 评论 -
Redis - 三种Redis集群实现方案之_客户端分片
集群实现的基础或者说核心价值是分片(sharding)。存储扩展:利用多节点内存总和构建超大存储空间计算扩展:通过多核/多机提升计算能力带宽扩展:分布式架构突破单机网络瓶颈Redis的集群实现方案可以归纳为客户端分片、基于代理的分片和路由查询这3种。fill:#333;color:#333;color:#333;fill:none;分片方案客户端分片代理分片路由查询一致性哈希TwemproxyCodis。原创 2025-03-03 05:15:00 · 1549 阅读 · 0 评论 -
Redis - 高可用实现方案解析:主从复制与哨兵监控
为了提升对高并发实时数据访问的性能,数据缓存组件应运而生,其中比较常见的就是Memcache和Redis。Memcache是经典的内存缓存技术,对相关领域的支持比较丰富,各种框架都支持使用该技术。应用系统中经常用到的会话信息可以非常方便地保存到Memcache中,每个键保存的数据量最大为1 MB,支持的数据类型比较单一,仅支持字符串类型(string),不支持持久化操作。原创 2025-03-02 10:36:50 · 1671 阅读 · 0 评论 -
Redis - 高并发场景下的Redis最佳实践_翻过6座大山
在高并发系统中,Redis缓存通常被视为数据在存入数据库之前的重要中间层,其设计专注于缓存功能,性能往往比传统数据库高出一个数量级以上。以Redis单实例而言,其读取并发能力可达到10万QPS(官方理论值)。然而,正因为Redis的高并发处理能力,它在系统链路中扮演着至关重要的角色。一旦系统遭遇高峰期,若我们在Redis处理方面稍有疏忽,可能会导致整个系统瘫痪。因此,我们接下来将探讨在复杂、高并发的互联网系统中,缓存可能面临的一系列挑战,以及我们可以采取的措施来应对这些挑战。原创 2024-03-24 17:05:52 · 6891 阅读 · 0 评论 -
Redis - RedisTemplate及4种序列化方式深入解读
文章目录概述RedisTemplateStringRedisTemplateRedisSerializer 序列化概述使用Spring 提供的 Spring Data Redis 操作redis 必然要使用Spring提供的模板类 RedisTemplate, 今天我们好好的看看这个模板类 。RedisTemplate看看4个序列化相关的属性 ,主要是 用于 KEY 和 VALUE 的序列化 。 举个例子,比如说我们经常会将POJO 对象存储到 Redis 中,一般情况下会使用 JSON原创 2021-02-16 22:24:24 · 21099 阅读 · 0 评论 -
Redis - Spring Data Redis 操作 Jedis 、Lettuce 、 Redisson
文章目录官网Jedis VS LettuceCodePOM依赖配置文件官网https://spring.io/projects/spring-data-redis我们知道常用的Redis客户端 https://redis.io/clients#java怎么还有 Spring Data Redis ?莫慌,小兄弟, 来看个关系图 帮你捋一捋Jedis VS Lettuce在 spring-boot-starter-data-redis 项目 2.X 版本中 ,默认使用 Lettuc原创 2021-02-16 20:49:40 · 17012 阅读 · 2 评论 -
Redis进阶 - 如何避免Redis集群脑裂?
文章目录CAPRedis放脑裂参数 min-slaves-to-write注意事项CAPCAP定理(CAP theorem),又被称作布鲁尔定理(Brewer’s theorem) 。这个定理起源于加州大学伯克利分校 的计算机科学家埃里克·布鲁尔在2000年的分布式计算原则研讨会 上提出的一个猜想。 在2002年,麻省理工学院(MIT)的赛斯·吉尔伯特和南希·林奇发表了布鲁尔猜想的证明, 使之成为一个定理。吉尔伯特和林奇证明的CAP定理比布鲁尔设想的某种程度上更加狭义。 定理讨论了在两个互相矛盾原创 2020-11-05 00:16:40 · 16545 阅读 · 1 评论 -
Redis进阶 - Redis主从工作原理详解
文章目录主从配置主从工作原理全量复制增量复制主从复制风暴主从配置简要回顾一下,Redis的主从配置复制一份redis.conf文件将相关配置修改为如下值: port 6380 pidfile /var/run/redis_6380.pid # 把pid进程号写入pidfile配置的文件 logfile "6380.log" dir /usr/local/redis-5.0.3/data/6380 # 指定数据存放目录配置主从复制 replicaof 127.0.0.1原创 2020-11-01 23:52:43 · 14817 阅读 · 2 评论 -
Redis进阶 -CLUSTER NODES 信息结合实际输出信息解读
文章目录Precluster nodes作用输出格式flags 含义slot第一种 单哈希槽第二种 Range第三种特殊状态 导入和迁移PreRedis进阶 - 因异常断电导致的Redis Cluster Fail故障处理 处理了redis cluster 断电后的异常,中间使用了cluster nodes 命令,我们来看下这个命令的组成cluster nodesRedis Version : 5.0.5172.168.15.101:7001> cluster nodesf43原创 2020-05-19 20:31:26 · 16720 阅读 · 4 评论 -
Redis进阶 - 因异常断电导致的Redis Cluster Fail故障处理
文章目录Pre现象Pre测试环境,搭建的伪集群101 : 7001 7002 7003 三个节点102 : 7004 7005 7006 三个节点现象Redis Cluster 不可用 ,应用无法正常启动172.168.15.101:7001> CLUSTER INFOcluster_state:failcluster_slots_assigned:16354cluster_slots_ok:16354cluster_slots_pfail:0cluster_slots原创 2020-05-19 19:34:15 · 27653 阅读 · 0 评论 -
Redis进阶-Redis持久化原理
文章目录Pre快照原理fork( 多进程)AOF 原理PreRedis-16Redis备份(持久化)Redis 的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是 Redis 的持久化机制。Redis 的持久化机制有两种第一种是快照 RDB第二种是 AOF 日志快照是一次全量备份,A...原创 2020-05-06 22:06:34 · 13929 阅读 · 0 评论 -
Redis进阶-Redis 4种MQ 方案对比
文章目录Pre方案1 Pub/Sub优点缺点小结方案2 List优点缺点小结方案3 ZSet优点缺点小结方案4 streamPre最终方案-----> Redis进阶-Stream多播的可持久化的消息队列我们知道redis 5.x版本,作者提供了stream这种基于radix tree 基数树的数据结构,解决使用Redis实现MQ“百花齐放”的乱象。方案1 Pub/Sub...原创 2020-05-05 23:14:57 · 15573 阅读 · 0 评论 -
Redis进阶-Stream多播的可持久化的消息队列
文章目录PreStream简介PreRedis-13Redis发布订阅 中提到了PubSub的不足之处 。PubSub 的生产者传递过来一个消息,Redis 会直接找到相应的消费者传递过去。如果一个消费者都没有,那么消息直接丢弃。如果开始有三个消费者,一个消费者突然挂掉了,生产者会继续发送消息,另外两个消费者可以持续收到消息。但是挂掉的消费者重新连上的时候,这断连期间生产者发送的消息...原创 2020-04-30 00:32:40 · 16145 阅读 · 1 评论 -
Redis进阶-如何从海量的 key 中找出特定的key列表 & Scan详解
文章目录需求需求假设你需要从 Redis 实例成千上万的 key 中找出特定前缀的 key 列表来手动处理数据,可能是修改它的值,也可能是删除 key。那该如何从海量的 key 中找出满足特定前缀的 key 列表来?我们可以用 keys 来列出所有满足特定正则字符串规则的 key .192.168.18.131:8001> set artisan 1OK192.168.18....原创 2020-04-27 22:31:26 · 16899 阅读 · 0 评论 -
Redis进阶-Redis的惰性删除
文章目录Predel ------> unlinkFLUSHDB/FLUSHALL --> FLUSHDB ASYNC/FLUSHALL ASYNC异步队列AOF Sync扩展阅读PreRedis进阶-Redis对于过期键的三种清除策略我们一直说 Redis 是单线程的,这里的我们默认指的都是Redis主要的工作线程,面向开发的。 实际上 Redis 内部实并不是只有一个主...原创 2020-04-27 07:07:00 · 18706 阅读 · 2 评论 -
Redis进阶-Redis安全相关操作
文章目录Preportcommandlua scriptSSL proxy小结Pre这里我们主要谈一下使用 Redis 需要注意的安全风险以及防范措施,避免数据泄露和丢失,避免所在主机权限被黑客窃取,以及避免人为操作失误。port默认会监听 *:6379,如果当前的服务器主机有外网地址,Redis 的服务将会直接暴露在公网上。 一旦可以被外网直接访问,这何谈数据安全?咋保护呢?...原创 2020-04-26 07:05:00 · 14002 阅读 · 0 评论 -
Redis进阶-无所不知的info命令诊断redis
文章目录官方指导infoinfo 指令内存占用多大连接了多少客户端每秒执行多少次指令复制积压缓冲区多大info demo官方指导https://redis.io/commands/infoinfo在使用 Redis 时,时常会遇到很多问题需要诊断,在诊断之前需要了解 Redis 的运行状态,通过强大的 Info 指令,你可以清晰地知道 Redis 内部一系列运行参数。info 指令...原创 2020-04-25 23:52:02 · 14287 阅读 · 0 评论 -
Redis进阶-string底层数据结构精讲
文章目录Prestring 字符串字符串的实现字符串 内部结构embstr vs rawPreRedis进阶-核心数据结构进阶实战Redis 有 5 种基础数据结构,分别为:string (字符串)、list (列表)、set (集合)、hash (哈希) 和 zset (有序集合) 。Redis 所有的数据结构都是以唯一的key 字符串作为名称,然后通过这个唯一 key 值来获取相...原创 2020-04-25 22:19:50 · 14957 阅读 · 2 评论 -
Redis进阶-List底层数据结构精讲
Redis 的列表相当于 Java 语言里面的 LinkedList,是链表而不是数组 。 这意味着list 的插入和删除操作非常快,时间复杂度为 O(1),但是查找数据很慢,时间复杂度为 O(n) 。原创 2020-04-25 21:37:24 · 17868 阅读 · 0 评论 -
Redis进阶-JedisCluster初始化 & 自动管理连接池中的连接 _ 源码分析
文章目录PreCode初始化槽计算无需手工调用close方法PreRedis进阶-Redis集群原理剖析及gossip协议初探 集群原理部分 简单的提了下Jest是如何实现Redis Cluster 的 ,这里我们再来梳理一下Codeimport redis.clients.jedis.HostAndPort;import redis.clients.jedis.JedisCl...原创 2020-04-23 00:30:07 · 17862 阅读 · 0 评论 -
Redis进阶-Redis集群 【高可用切换】&【cluster-require-full-coverage】集群是否完整才能对外提供服务
文章目录Pre需求PreRedis进阶-Redis集群原理剖析及gossip协议初探 中提到了 “ 集群是否完整才能对外提供服务” ,这里我们详细展开验证下需求原创 2020-04-19 22:38:22 · 16927 阅读 · 0 评论 -
Redis进阶-Redis集群原理剖析及gossip协议初探
文章目录Pre集群架构集群原理槽位定位算法跳转重定位Redis集群节点间的通信机制PreRedis进阶-分布式存储 Sequential partitioning & Hash partitioning集群架构再来所以说为啥需要集群?两个方面:并发量 : redis官方称10万的QPS,如果我的业务真的大到百万的QPS呢? 单节点的读写 显然不行。数据量 :...原创 2020-04-12 22:07:56 · 15005 阅读 · 0 评论 -
Redis进阶-分布式存储 Sequential partitioning & Hash partitioning
文章目录分布式存储顺序分布哈希分布顺序分布VS哈希分布集群架构分布式存储了解Redis集群原理之前我们先来梳理一下分布式存储的相关知识拆分在算法中是一个非常重要的思想,当你的数据集巨大时,你可以按照特定的规则将大数据拆分成小数据集,降低因数据量增长过大带来的问题。基本方案有两种:顺序分布 & 哈希分布 。 需要根据具体业务选择分片方式顺序分布从名字上也很好理解顺序分布的...原创 2020-04-12 17:36:32 · 14197 阅读 · 2 评论 -
Redis进阶-Jedis以及Spring Boot操作 Redis 5.x Cluster
文章目录PreJedis操作Redis Cluster添加依赖CodeSpring Boot 操作Redis Cluster引入 依赖application.ymlCodePreRedis进阶-5.x 单节点 及Redis Cluster 3主3从集群部署搭建了Redis Cluster 集群,接下来我们看下如何使用Java 代码来操作集群Jedis操作Redis Cluster添加...原创 2020-04-12 13:10:33 · 13963 阅读 · 0 评论 -
Redis进阶-5.x 单节点 及Redis Cluster 3主3从集群部署
文章目录Redis 下载地址Redis 编译安装Redis 启停Redis 下载地址下载地址: http://redis.io/download历史版本: http://download.redis.io/releases/之前装过4.0.11 ----> Redis-02Redis在linux下的安装及常见问题Redis 编译安装第一步 : 安装gcc# 安装gcc...原创 2020-04-11 22:19:37 · 14355 阅读 · 0 评论 -
Redis进阶- Redisson分布式锁实现原理及源码解析
文章目录Pre用法Redisson分布式锁实现原理Redisson分布式锁源码分析PreRedis进阶-细说分布式锁中我们梳理了使用Redis实现分布式锁的演进过程,并提出了目前最完善的解决方案:Redisson 实现分布式锁 。这里我们来分析下Redisson分布式锁实现原理及源码解析用法使用redisson实现分布式锁的操作步骤,三部曲第一步: 获取锁 RLock redi...原创 2020-04-11 11:30:33 · 15537 阅读 · 1 评论 -
Redis进阶-lua脚本
文章目录Pre语法jedis操作lua好处lua实战注意事项PreRedis在2.6推出了脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行。语法从Redis2.6.0版本开始,通过内置的Lua解释器,可以使用EVAL命令对Lua脚本进行求值。EVAL命令的格式如下:EVAL script numkeys key [key ...] arg [arg ...]...原创 2020-04-08 00:38:33 · 15095 阅读 · 0 评论 -
Redis进阶-细说分布式锁
文章目录Pre引PreRedis Version : 5.0.3Redis进阶-核心数据结构进阶实战 中我们讲 strings 数据结构的时候,举了一个例子事实上,要实现一把相对完善的分布式锁,需要注意的细节还是蛮多的,这里我们好好的梳理一把。引我们先来看段代码 int stock = Integer.parseInt(stringRedisTemplate.opsForVa...原创 2020-04-06 23:34:06 · 14586 阅读 · 3 评论 -
Redis进阶-布隆过滤器
布隆过滤器返回某个值存在时,这个值可能不存在;当它说不存在时,那就肯定不存在原创 2020-03-26 00:34:19 · 14306 阅读 · 0 评论 -
Redis进阶-Redis对于过期键的三种清除策略
文章目录Pre被动删除主动删除当前已用内存超过maxmemory限定时,触发主动清理策略PreRedis-17Redis内存回收策略被动删除当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key.举个例子, set 一个 过期时间为 600s的 key , 当 到了 600s后,redis 并不会执行删除, 为了性能,redis 会在你下次访问的时候 去删除 ...原创 2020-03-24 00:44:46 · 15686 阅读 · 0 评论 -
Redis进阶-JedisPool参数优化 & 如何合理估算核心参数 & redis连接池预热
文章目录PreJedisPoolConfig & JedisPool参数说明资源设置与使用相关参数空闲资源检测相关参数关键参数设置建议maxTotal(最大连接数)maxIdle与minIdle使用监控获取合理值常见问题资源不足预热JedisPoolPreRedis Version : 5.0.3maven依赖:jedis 2.9.0 <dependency> ...原创 2020-03-23 23:56:06 · 17092 阅读 · 0 评论 -
Redis进阶-如何发现和优雅的处理BigKey一二事
文章目录PreView模拟写入一个BigKey如何发现BigKeyredis-cli --bigkeysdebug object如何优雅的删除BigKey (lazy delete)关于lazyfree的几个配置项PreViewRedis进阶-Redis键值设计及BigKey问题粗略的讨论了BigKey,这里我们继续再来研究下BigKeyRedis Version : 5.0.3模拟...原创 2020-03-23 00:33:28 · 15574 阅读 · 0 评论 -
Redis进阶-bind参数详解
文章目录redis.conf验证bindbind 127.0.0.1bind 192.168.18.130bind 192.168.18.130 127.0.0.1redis.confRedis Version: 5.0.3毫无疑问,看官方的配置文件的解读 .bind 配置的是 redis server 网卡的地址 ,配置哪个网卡地址,你就可以通过哪个网卡地址访问re...原创 2020-03-22 22:41:32 · 14956 阅读 · 0 评论 -
Redis进阶-Redis使用建议一二事
文章目录命令使用【推荐】 O(N)命令关注N的数量【推荐】 禁用命令【推荐】合理使用select【推荐】使用批量操作提高效率pipeline vs 原生命令【建议】Redis事务功能较弱,不建议过多使用,可以用lua替代客户端使用【推荐】 避免多个应用使用一个Redis实例使用带有连接池的数据库,可以有效控制连接,同时提高效率其他建议命令使用【推荐】 O(N)命令关注N的数量例如hg...原创 2020-03-22 00:55:49 · 13976 阅读 · 0 评论 -
Redis进阶-Redis键值设计及BigKey问题
文章目录键值设计key设计value设计big key的危害命令使用客户端使用其他建议键值设计key设计(1)【建议】: 可读性和可管理性 以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:ido2o:order:1(2)【建议】:简洁性 保证语义的前提下,控制key的长度,当key较多时,内存占用也不容忽视,例如:user:{uid}...原创 2020-03-19 01:06:02 · 17005 阅读 · 1 评论