
分布式缓存【Redis】
文章平均质量分 93
整理分布式缓存相关博客
程序猿进阶
要做就做第一,就算结果不是第一,也会是一个好成绩。 加油!我的未来不是梦。
展开
-
缓存穿透/击穿/雪崩(附生产BUG)
此时会直接打到数据库上,并且因为查不到数据,也不会写入缓存,所以下一次同样会打到数据库上,请求每次都会走到数据库,流量大时可能导致数据库被打挂。,在缓存过期的一瞬间,有大量的读请求,由于此时缓存过期了,所以请求最终都会走到数据库,造成瞬时数据库请求量大、压力骤增,可能导致数据库被打挂。冲突,会存在一定的误判,所以布隆过滤器的特点是判断不存在的,则一定不存在;判断存在的,大概率存在。同时过期,可以在设置过期时间时,在基础过期时间上加一个随机值来打散过期时间,通过打散过期时间,避免同一时间大量缓存过期。原创 2024-10-17 05:30:00 · 10308 阅读 · 65 评论 -
Redis 基础数据改造
痛点一:因为基础数据不属于频繁更新的数据,所以每个应用都有自己和缓存,当基础数据更新后,各个应用缓存刷新不及时就会导致应用数据不一致问题。年北京南苑机场转场至北京大兴国际机场),要求在某个特定时间点新老机场转换并同时输出,调用方众多每次转场协调复杂,数据需要频繁清洗。问题点:接口的可靠性(如果接口挂掉就会影响改签和下单流程)和数据的准确性(与数据库数据不一致时,会影响用户形成)。基础服务模块的功能:保证服务的数据一致性,并达到数据限流的目的。痛点:基础数据使用的是全量的缓存,所以数据量会很大。原创 2024-09-30 05:15:00 · 2715 阅读 · 46 评论 -
Redis6 多线程模型
线程,都同时处理图中的“队列”,是不是会存在锁竞争的关系尼?还需要注意的是,线程数并不是越大越好,官方认为超过了。,并对数据进行协议解析,当队列全部处理完毕后,主线程会对队列中请求串行“执行。官方建议:只在机器至少有4个内核时才启用多线程模型,且至少留下一个备用内核。【6】主线程执行所有命令并清空整个等待队列,等待客户端后续的请求队列;件事情串行一起执行,因为是基于内存,所以执行速度非常快。开启多线程后,还需要设置线程数,否则是不生效的。和串行操作,某个操作“出问题”会“阻塞”后续操作。原创 2024-09-25 05:30:00 · 2331 阅读 · 61 评论 -
缓存出海方案
【3】神盾缓存使用本地模式,数据目前不同步到海外,第一次使用神盾数据需要回源上海,如需预热,需要联系DBA;(问题:国内外数据加解密是不一样的,准备给数据库添加版本信息,新加坡加密的数据,回到上海之后也能够解密);目前业务都是围绕用户场景加的分布式锁,所以也可以满足目前的实际业务场景。同时,该约定为口头约定,没有框架介入,实际执行过程可能会因个人失误造成非预期的结果。工厂进行统一封装,通过约定大于配置的形式,根据区域约定统一的后缀名,向。集群只服务于当前单元内的业务,所以不是全量的。【目前缓存不同步数据】原创 2024-08-23 05:30:00 · 1295 阅读 · 71 评论 -
Redis大Key风险和改造
优质博文。原创 2024-08-20 05:30:00 · 2034 阅读 · 52 评论 -
Linux 安装 Redis 教程
源时配置的阿里源所以下载的大多数依赖包版本都比较高,在安装很多较低版本软件时都会遇到这个问题。卸载依赖包重装版本的方法过于繁琐,可能扯出来一堆版本问题。这个关键字的作用是编译的时候用于指定程序存放的路径。执行编译命令,接下来控制台会输出各种编译过程中输出的内容。的方式读取所有配置项。这里指定号目录也方便后续的卸载,后续直接。资源:或者手动下载后进行上传即可。不能退出控制台,如果退出控制台。命令尝试绕过依赖包时,直接把。其他的资源文件会存放在。,即配置了允许所有主机连接。安装目录,执行下面命令启动。原创 2024-07-01 05:30:00 · 4417 阅读 · 51 评论 -
Guava里一些比较常用的工具
随着java版本的更新提供了越来越多的语法和工具来简化日常开发,但是我们一般用的比较早的版本所以体验不到。这时就用到了guava这个包。guava提供了很多方便的工具方法,solar框架就依赖了版本,这里稍微介绍下。原创 2024-04-14 05:00:00 · 1748 阅读 · 74 评论 -
Java面试——Redis
如果一个 master出现了脑裂,跟其他 slave丢了连接,那么上面这两个配置可以去确保说,如果不能继续给指定数量的 slave发送数据,而且 slave超过10秒没有给自己 ack消息,那么就直接拒绝客户端的写请求,这样脑裂活的旧 master就不会接受 client的新数据,也就避免了数据丢失,上面配置确保了,如果跟任何一个 slave丢了连接,在 10秒后发现没有 slave给自己 ack,那么就拒绝新的写请求,因此脑裂场景下,最多丢失 10秒的数据。如果没有分区,你最多只能使用一台机器的内存。原创 2024-03-03 05:00:00 · 1810 阅读 · 105 评论 -
布隆过滤器
布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数,既然是二进制,那么里面存放的不是0,就是1,但是初始默认值都是0。它可以告诉你某样东西一定不存在或者可能存在。相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的。当要向布隆过滤器中添加一个元素key时,我们通过多个hash函数,算出一个值,然后将这个值所在的方格置为1。比如,下图。原创 2024-01-27 12:10:35 · 1382 阅读 · 39 评论 -
Redis 线程模型
多路复用程序传来的套接字, 并根据套接字产生的事件的类型, 调用相应的事件处理器。服务器会为执行不同任务的套接字关联不同的事件处理器, 这些处理器是一个个函数, 它们定义了某个事件发生时, 服务器应该执行的动作。函数接受一个套接字描述符、一个事件类型和一个毫秒数为参数, 在给定的时间内阻塞并等待套接字的给定类型事件产生, 当事件成功产生, 或者等待超时之后, 函数返回。函数来等待事件产生, 然后遍历所有已产生的事件, 并调用相应的事件处理器来处理这些事件。原创 2024-01-26 11:30:00 · 2544 阅读 · 28 评论 -
Redis 主从复制
✘ 薪火相传:上一个 Slave 可以是下一个 Slave 的 Master,Slave 同样可以接收其他 Slaves 的连接和同步请求,那么该 Slave 作为了链条中下一个的 Master,可以有效减轻 Master 的写压力。由于所有的写操作都是先在 Master 上操作,然后同步更新到 Slave 上,所以从 Master 同步到 Slave 机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave 机器数量的增加也会使这个问题更加严重。✘ 反客为主:SLAVEOF NO ONE。原创 2024-01-25 11:30:00 · 1458 阅读 · 28 评论 -
Spring Data Redis 框架
系统性学习,移步IT-BLOG对于类似于首页这种每天都有大量的人访问,对数据库造成很大的压力,严重时可能导致瘫痪。解决方法:一种是数据缓存、一种是网页静态化。今天就讨论数据缓存的实现Redis: 是一种开源的 Key-Value 数据库,运行在内存中,企业开发通常采用 Redis 来实现缓存。同类的产品还有 memcache、memchached、MongoDB 等。Jedis: 是 Redis 官方推出的一款面向 Java 的客户端,提供了很多接口以供 Java 语言调用。可以在 Redis 官网下载当然原创 2022-07-28 23:45:32 · 1241 阅读 · 8 评论 -
缓存管理经验分享
缓存穿透/击穿/缓存雪崩概述目前主流的数据库无法承载高并发的读取,因此后端应用大量使用分布式缓存来应对高并发的读流量,如果因为缓存穿透/击穿/雪崩原因导致大量流量打到数据库上,可能导致数据库挂掉。缓存穿透访问一个缓存和数据库都不存在的 key,此时会直接打到数据库上,并且因为查不到数据,也不会写入缓存,所以下次同样会打到数据库,请求每次都会走到数据库,流量大时可能会击垮数据库。解决方案【1】空值缓存:查询数据库发现没有数据,给对应的 key存入一个空值缓存,代码数据库中没有数据,应用查询到空值就原创 2022-01-12 23:23:30 · 1123 阅读 · 2 评论 -
Java面试——Redis
一、Redis 为什么那么快【1】完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中。【2】数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的。【3】采用单线程,避免不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗。【4】使用多路IO复用模型,非阻塞IO。利用epoll可以同时监察多个流的 IO事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或原创 2021-04-18 22:27:28 · 1216 阅读 · 2 评论 -
Java面试——缓存
一、什么是缓存【1】缓存就是数据交换的缓冲区(称作:Cache),当某一硬件要读取数据时,会首先从缓存中查询数据,有则直接执行,不存在时从磁盘中获取。由于缓存的数据比磁盘快的多,所以缓存的作用就是帮助硬件更快的运行。【2】缓存往往使用的是RAM(断电既掉的非永久存储),所以在用完后还是会把文件送到硬盘等存储器中永久存储。电脑中最大缓存就是内存条,硬盘上也有16M或者32M的缓存。【3】高速缓存是用来协调CPU与主存之间存取速度的差异而设置的。一般CPU工作速度高,但内存的工作速度相对较低,为了解决这原创 2021-04-18 14:00:34 · 1108 阅读 · 0 评论 -
Redis 性能优化
Redis 性能优化一、Linux 操作系统【1】ulimit 与 TCP backlog:1)、修改 ulimit:通过 ulimit 修改 open files 参数,redis 建议把 open files 至少设置成 10032,因为 maxclients 是10000 [客户端的数据是以文件的形式进行保存的] ,另外 redis 内部最多会使用 32 个文件描述符。1 ulimit -n 10032 #但重启后就无效了,也可以通过配置文件limits.conf 的形式持久修改2 #修改原创 2021-01-06 19:39:02 · 3794 阅读 · 44 评论 -
Redis Cluster集群搭建及节点的添加、删除
Redis 是在内存中保存数据。原创 2021-01-05 19:40:25 · 2783 阅读 · 1 评论 -
分布式缓存的一致性 Hash 算法
分布式缓存的一致性 Hash 算法一、使用一致性 Hash 算法的原因简单的路由算法可以使用余数 Hash:用服务器数据除缓存数据 KEY 的 Hash 值,余数为服务器列表下标编码。这种算法可以满足大多数的缓存路由需求。但是,当分布式缓存集群需要扩容的时候,事情就变得棘手了。举个例子:很容易可以计算出,3台缓存服务器扩容至4台服务器,大约有 75%(3/4)被缓存了的数据不能正确命中,随着服务器集群规模的增大,这个比例线性上升。当100台服务器的集群中加入一台新服务器,不能命中的概率是 99%(N/原创 2021-01-03 13:30:45 · 12368 阅读 · 2 评论 -
本地缓存与分布式缓存
本地缓存与分布式缓存一般而言,现在互联网应用(网站或App)的整体流程,可以概括如图所示,用户请求从界面(浏览器或App界面)到网络转发、应用服务再到存储(数据库或文件系统),然后返回到界面呈现内容。随着互联网的普及,内容信息越来越复杂,用户数和访问量越来越大,我们的应用需要支撑更多的并发量,同时我们的应用服务器和数据库服务器所做的计算也越来越多。但是往往我们的应用服务器资源是有限的,且技术变革是缓慢的,数据库每秒能接受的请求次数也是有限的(或者文件的读写也是有限的),如何能够有效利用有限的资源来提供原创 2021-01-03 12:22:03 · 3860 阅读 · 2 评论 -
Redis 基础数据结构
Redis 基础数据结构Reids 所有的数据结构都以唯一的 key 字符串作为名称,然后通过这个唯一的 key 值来获取相应的 value 数据。不同的数据结构差异就在于 value 的结构不一样。*一、*Redis 五大数据类型【1】String(字符串):String 是 Redis 最基本的类型,一个 key 对应一个 value。String 类型是二进制安全的。意思是 Redis 的 String 可以包含任何数据。一个键最大能存储 512MB。【2】Hash(哈希):Hash 是原创 2020-12-09 23:14:28 · 1476 阅读 · 2 评论 -
Redisson实现分布式锁原理
Redisson实现分布式锁原理一、高效分布式锁当我们在设计分布式锁的时候,我们应该考虑分布式锁至少要满足的一些条件,同时考虑如何高效的设计分布式锁,这里我认为以下几点是必须要考虑的。1、互斥在分布式高并发的条件下,我们最需要保证,同一时刻只能有一个线程获得锁,这是最基本的一点。2、防止死锁在分布式高并发的条件下,比如有个线程获得锁的同时,还没有来得及去释放锁,就因为系统故障或者其它原因使它无法执行释放锁的命令,导致其它线程都无法获得锁,造成死锁。所以分布式非常有必要设置锁的有效时间,确保系统原创 2020-12-09 19:42:42 · 2601 阅读 · 55 评论