有赞透明多级缓存解决方案(TMC) 一.引子 1-1. TMC 是什么 TMC ,即"透明多级缓存( Transparent Multilevel Cache )",是有赞 PaaS 团队给公司内应用提供的整体缓存解决方案. TMC 在通用"分布式缓存解决方案(如 CodisProxy + Redis ,如有赞自研分布式缓存系统 zanKV )"基础上,增加了以下功能: 应用层热点探测 应用层本地缓存 应用层缓存命中统计 以帮助应用层解决缓存使用过程中出现的热点访问…
一. 缓存雪崩 1. 含义 同一时刻,大量的缓存同时过期失效. 2. 产生原因和后果 (1). 原因:由于开发人员经验不足或失误,大量热点缓存设置了统一的过期时间. (2). 产生后果:恰逢秒杀高峰,缓存过期,瞬间海量的QPS(每秒查询次数)直接打到DB上,如果系统架构没有熔断机制,直接将导致系统全线崩溃. 3. 处理方案 (1). 设置不同的缓存失效时间,比如可以在缓存过期时间后面加个随机数,这样就避免同一时刻缓存大量过期失效. setRedis(key,value,time + Math.r…
1.穿透 穿透:频繁查询一个不存在的数据,由于缓存不命中,每次都要查询持久层.从而失去缓存的意义. 解决办法: 持久层查询不到就缓存空结果,查询时先判断缓存中是否exists(key) ,如果有直接返回空,没有则查询后返回,注意insert时需清除查询的key,否则即便DB中有值也查询不到(当然也可以设置空缓存的过期时间) 2.雪崩 雪崩:缓存大量失效的时候,引发大量查询数据库. 解决办法: 1)用锁/分布式锁或者队列串行访问 2)缓存失效时间均匀分布 3.热点key 热点key:某个key访问…
热点Key问题的发现与解决 https://help.aliyun.com/document_detail/67252.html 缓存击穿.失效以及热点key问题 https://www.jianshu.com/p/d5a3668d4dad 2017双11技术揭秘—分布式缓存服务Tair的热点数据散列机制 https://my.oschina.net/yunqi/blog/1596732 缓存穿透 解决:写空值,布隆过滤 缓存并发 解决:分布式锁,异步更新 缓存雪崩 解决:过期时间中增加随机时间…
分布式缓存是网站服务端经常用到的一种技术,在读多写少的业务场景中,通过使用缓存可以有效地支撑高并发的访问量,对后端的数据库等数据源做到很好地保护.现在市面上有很多分布式缓存,比如Redis.Memcached以及阿里的Tair等,不管我们使用的哪种缓存产品,基本上都会遇到缓存击穿.缓存失效以及热点key的问题.如何有效地防止这些问题,也是我们在享受缓存带来的红利的同时,必须要解决的难题. 通常我们在使用缓存时都是先检查缓存中是否存在,如果存在直接返回缓存内容,如果不存在就直接查询数据库然后再缓存…
缓存穿透 缓存系统,按照KEY去查询VALUE,当KEY对应的VALUE一定不存在的时候并对KEY并发请求量很大的时候,就会对后端造成很大的压力. (查询一个必然不存在的数据.比如文章表,查询一个不存在的id,每次都会访问DB,如果有人恶意破坏,很可能直接对DB造成影响.) 由于缓存不命中,每次都要查询持久层.从而失去缓存的意义. 解决方法: 1.缓存层缓存空值. –缓存太多空值,占用更多空间.(优化:给个空值过期时间) –存储层更新代码了,缓存层还是空值.(优化:后台设置时主动删除空值,并缓存…
穿透 穿透:频繁查询一个不存在的数据,由于缓存不命中,每次都要查询持久层.从而失去缓存的意义. 解决办法:①用一个bitmap和n个hash函数做布隆过滤器过滤没有在缓存的键.   ②持久层查询不到就缓存空结果,有效时间为数分钟. 转:https://www.cnblogs.com/rjzheng/p/8908073.html 什么是缓存击穿 在谈论缓存击穿之前,我们先来回忆下从缓存中加载数据的逻辑,如下图所示 因此,如果黑客每次故意查询一个在缓存内必然不存在的数据,导致每次请求都要去存储层去查…
缓存穿透 缓存系统,按照KEY去查询VALUE,当KEY对应的VALUE一定不存在的时候并对KEY并发请求量很大的时候,就会对后端造成很大的压力. (查询一个必然不存在的数据.比如文章表,查询一个不存在的id,每次都会访问DB,如果有人恶意破坏,很可能直接对DB造成影响.) 由于缓存不命中,每次都要查询持久层.从而失去缓存的意义. 解决方法: 1.缓存层缓存空值. –缓存太多空值,占用更多空间.(优化:给个空值过期时间) –存储层更新代码了,缓存层还是空值.(优化:后台设置时主动删除空值,并缓存…
转载自  https://blog.csdn.net/wang0112233/article/details/79558612 https://www.sohu.com/a/230787856_231667 今天又学到了很多,感觉雪崩和穿透很有意思理解起来也比较清晰,然后我搜索了一些资料,给自己做一个普及 我们通常使用 缓存 + 过期时间的策略来帮助我们加速接口的访问速度,减少了后端负载,同时保证功能的更新 缓存穿透 缓存系统,按照KEY去查询VALUE,当KEY对应的VALUE一定不存在的时候…
1.缓存定义 高速数据存储层,提高程序性能 2.为什么要用缓存(读多写少,高并发) 1.提高读取吞吐量 2.提升应用程序性能 3.降低数据库成本 4.减少后端负载 5.消除数据库热点 6.可预测的性能 3.缓存分类 3.1.单机缓存(localCache) 实现方案 1.基于JSR107规范自研(了解即可): 1.Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, Cache, Entry 和 Expiry. 2.CachingProv…
导读 使用Redis难免会遇到Redis缓存穿透,缓存击穿,缓存雪崩,热点Key的问题.有些同学可能只是会用Redis来存取,基本都是用项目里封装的工具类来操作.但是作为开发,我们使用Redis时可能会遇到上述问题,可能你还不知道这几个名词是什么意思,那么现在就让我们一起来探讨下吧. 首先我们使用Redis的逻辑是这样的: 即:先从缓存取,缓存有就直接返回,没有就查库,查到就存Redis里,没有返回空. 在实际使用Redis的时候一定会遇到缓存穿透.缓存击穿.缓存雪崩和热点key的问题,这几个概…
在这个应用中,我使用了 MQ 来处理异步流程.Redis 缓存热点数据.MySQL 持久化数据,还有就是在系统中调用另外一个业务系统的接口,对我的应用来说这些都是属于 RPC 调用,而 MQ.MySQL 持久化的数据也会存在于一个分布式文件系统中,他们之间的调用也是需要用 RPC 来完成数据交互的.…
引言 讲了几天的数据库系列的文章,大家一定看烦了,其实还没讲完...(以下省略一万字).今天我们换换口味,来写redis方面的内容,谈谈热key问题如何解决.其实热key问题说来也很简单,就是瞬间有几十万的请求去访问redis上某个固定的key,从而压垮缓存服务的情情况.其实生活中也是有不少这样的例子.比如XX明星结婚.那么关于XX明星的Key就会瞬间增大,就会出现热数据问题.ps:hot key和big key问题,大家一定要有所了解.本文预计分为如下几个部分 热key问题 如何发现 业内方案…
前言 在茫茫的互联网海洋中寻寻觅觅,我收藏了800+道Java经典面试题,分享给你们.建议大家收藏起来,在茶余饭后拿出来读一读,以备未雨绸缪之需.另外,面试题答案的话,我打算后面慢慢完善在github, 希望大家都能找到自己理想的offer呀. Java 基础 Java 集合 Java 并发 && 多线程 JVM 篇 数据库 缓存/Redis 计算机网络 消息队列 mybatis 操作系统 Spring Netty/tomcat 常用Linux 命令 ZooKeeper Elasticse…
[ASP.NET Core]EF Core - “影子属性”   有朋友说老周近来博客更新较慢,确实有些慢,因为有些 bug 要研究,另外就是老周把部分内容转到直播上面,所以写博客的内容减少了一点. 老周觉得,视频直播可能会好一些,虽然我的水平一般,不过直播时,老周可以现场演示,可能会比看博客效果要好(因为现场演示,有时候会有失误,没办法,水平有限).还有一个,就是.NET 的资料其实很多,毕竟也发展了十几年了,有些东西如果别人都写过了,那我也不好意思重复了..NET Core 尽管是跨平台版本…
这篇文章介绍的内容是关于PHP 经典面试题集 PHP 经典面试题集,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 结合我自己面试情况,面对的一些php面试题列举出来,基本上结合自己的看法回答的,不妥的地方请大家指出去,与大家一起讨论分析,也希望能帮到正在面试的童鞋们: 1.表单提交中的Get和Post的异同点 get 请求一般用于向服务端获取数据,post 一般向服务端提交数据 get 传输的参数在 url 中,传递参数大小有限制,post 没有大小限制, get 不安全,pos…
前言 100道MySQL数据库经典面试题解析,已经上传github啦 https://github.com/whx123/JavaHome/tree/master/Java面试题集结号 公众号:捡田螺的小男孩 数据库 1. MySQL 索引使用有哪些注意事项呢? 可以从三个维度回答这个问题:索引哪些情况会失效,索引不适合哪些场景,索引规则 索引哪些情况会失效 查询条件包含or,可能导致索引失效 如何字段类型是字符串,where时一定用引号括起来,否则索引失效 like通配符可能导致索引失效. 联…
概述 官方说明 Redis官网 https://redis.io/ 最新版本6.2.6 Redis中文官网 http://www.redis.cn/ 不过中文官网的同步更新维护相对要滞后不少时间,但对于我们基础学习完成足够了 Redis是一个开源(BSD许可)的内存数据结构存储,用作数据库.缓存和消息代理.Redis提供丰富的数据结构,如字符串.哈希.列表.集合.带范围查询.位图.超对数.地理空间索引和流的排序集.Redis具有内置的复制.Lua脚本.LRU驱逐.事务和不同级别的磁盘持久性,并通…
概述 官方说明 Redis官网 https://redis.io/ 最新版本6.2.6 Redis中文官网 http://www.redis.cn/ 不过中文官网的同步更新维护相对要滞后不少时间,但对于我们基础学习完成足够了 Redis是一个开源(BSD许可)的内存数据结构存储,用作数据库.缓存和消息代理.Redis提供丰富的数据结构,如字符串.哈希.列表.集合.带范围查询.位图.超对数.地理空间索引和流的排序集.Redis具有内置的复制.Lua脚本.LRU驱逐.事务和不同级别的磁盘持久性,并通…
李洪强经典面试题152-Runtime   Runtime Runtime是什么 Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的.比如: [receiver message]; // 底层运行时会被编译器转化为: objc_msgSend(receiver, selector) // 如果其还有参数比如: [receiver message:(id)arg...]; // 底层运行时会被编译器转化为:…
李洪强iOS经典面试题144-数据存储   数据存储 sqlite中插入特殊字符的方法和接收到处理方法. 除'其他的都是在特殊字符前面加"/",而 ' -> '' .方法:keyWord = keyWord.replace("/","//"); 什么是NSManagedObject模型? NSManagedObjcet是NSObject的子类,Core Date的重要组成部分.是一个通用类,实现了Core Date模型层所需的基本功能,用户…
李洪强iOS经典面试题140-UI   UI viewcontroller的一些方法的说明viewDidLoad,viewWillDisappear, viewWillAppear方法的 顺序和作用? viewWillAppear:视图即将可见时调用.默认情况下不执行任何操作 viewDidAppear:视图已完全过渡到屏幕上时调用 viewWillDisappear:视图被驳回时调用,覆盖或以其他方式隐藏.默认情况下不执行任何操作 viewDidDisappear:视图被驳回后调用,覆盖或以其…
李洪强iOS经典面试题下 21. 下面的代码输出什么? @implementation Son : Father - (id)init { self = [super init]; if (self) { NSLog(@"%@", NSStringFromClass([self class])); NSLog(@"%@", NSStringFromClass([super class])); } return self; } @end 答案: 都输出 Son NSS…
李洪强iOS经典面试题上     1. 风格纠错题 修改完的代码: 修改方法有很多种,现给出一种做示例: // .h文件 // http://weibo.com/luohanchenyilong/ // https://github.com/ChenYilong // 修改完的代码,这是第一种修改方法,后面会给出第二种修改方法 typedef NS_ENUM(NSInteger, CYLSex) { CYLSexMan, CYLSexWoman }; @interface CYLUser : N…
[Linux  经典面试题] 1. 在Linux系统中,以 文件 方式访问设备 . 2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统. 3. Linux文件系统中每个文件用 i节点 来标识. 4. 全部磁盘块由四个部分组成,分别为引导块 .专用块 . i节点表块 和数据存储块. 5. 链接分为: 硬链接 和 符号链接 . 6. 超级块包含了i节点表 和 空闲块表 等重要的文件系统信息. 7. 某文件的权限为:d-rw-_r--_r--,用数值形式表示该权限,则该八…
互联网应用特点三高:高并发.高可用.高性能,要达到这几个目标,好的方法方式是建立相应指标, 来进行准确描述,有了准确指标进行监控,方能易于实现我们设定目标. 先将指标介绍下,方便下面相关术语使用,qps即每秒处理请求数,是一个机器性能重要描述指标,通 过它我们知道单个容器能处理最大请求数.目前JD所有线上服务均在Docker容器中运行. tp99.tp999性能监控指标,TP=Top Percentile,Top百分数,是一个统计学里的术语,与平均数.中 位数都是一类.TP50.TP90和TP9…
1. hibernate中离线查询去除重复项怎么加条件? dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 2. http协议及端口,smtp协议及端口 http:超文本传输协议 端口 80 smtp:简单邮件传输协议 端口25 3. 编写程序,完成文件复制功能 4. Servlet创建过程及生命周期Servlet 在容器中运行时,其实例的创建及销毁等是由容器进行控制. Servlet 的创建有两种方法. 1). 客户端请求对应的 S…
115道Java经典面试题(面中率最高.最全) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码的可理解性. 面向对象编程有很多重要的特性,比如:封装,继承,多态和抽象.下面的章节我们会逐个分析这些特性. 封装 封装给对象提供了隐藏内部特性和行为的能力.对象提供一些能被其他对象访问的方法来改变它内部的数据.在Java当中,有3种修饰符:public,private和pr…
MySQL20个经典面试题 Part2:经典题目 1.MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联: 2.MySQL中myisam与innodb的区别,至少5点 (1).问5点不同: (2).innodb引擎的4大特性 (3).2者selectcount(*)哪个更快,为什么 3.MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义 (1).varchar与char的区别 (2).varchar(50)中50的涵义 (3).int(20)中…
[转].net 经典面试题  1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成员,该类内部和继承类中可以访问. public : 公共成员,完全公开,没有访问限制. internal: 在同一命名空间内可以访问. 2 .列举ASP.NET 页面之间传递值的几种方式. 答. 1.使用QueryString, 如....?id=1; response…