Confluence 的运行状态与缓存状态有这密切的关系。针对 Confluence 的管理员来说,尤其是大型站点的 Confluence 管理员,设置好缓存尤其显得关键。 希望修改缓存的大小: 进入 ? > 基本配置(General Configuration) > 缓存管理(Cache Management。) 在你希望修改缓存的边上,选择 调整大小(Adjust Size)。 https://www.cwiki.us/display/CONF6ZH/Cache+Performance+Tuning
目标: 优化sql, 至少要在5秒以内完成 针对这个问题开始优化. 优化过程如下: 1. sql语句优化 2. 使用explain分析 3. 使用profile分析SQL执行状态 4. MySQL Sending data导致查询很慢的问题详细分析 5. mysql查询慢Sending data耗时问题 6. 启用MySQL查询缓存, 7. 最终的解决方案 1. sql语句优化. 这个步骤, 能够得出的结论是, 我的这个sql语句使用了缓存, 缓存字段是product_id, 但是并没有显示出为什么会这么慢 3. 6. 启用MySQL查询缓存 https://www.cnblogs.com/mengfanrong/p/5335724.html 参考这篇文章, 可以设置mysql缓存, 但并不是所有设置了的缓存都会生效
(6) Name Server 域名服务器会查询存储的域名和 IP 的映射关系表,在正常情况下都根据域名得到目标 IP 地址,连同一个 TTL 值返回给 LDNS。 <link rel="dns-prefetch" href="https://lz5z.com" /> (3) 域名发散/域名收敛 域名发散 PC 端因为浏览器有域名并发请求限制(chrome 为 6 个),也就是同一时间,浏览器最多向同一个域名发送 6 个请求,因此 PC 端使用域名发散策略,将 http 静态资源放入多个域名/子域名中,以保证资源更快加载。 还记得之前Web 性能优化-页面重绘和回流(重排)中提到的 Google 1s 终端首屏渲染标准,假如 DNS 解析出现问题,那可能几秒甚至几十秒都首屏不了了。 DNS-over-HTTPS 参考资料 DNS域名解析过程 无线性能优化:域名收敛 提升页面访问速度的前端优化大法:DNS预解析 也谈 HTTPS - HTTPDNS + HTTPS
浏览器缓存 HTTP 缓存通常要配合客户端(浏览器)使用才能发挥效果,所以又被称之为浏览器缓存,是 Web 性能优化的一大利器。 缓存类型 浏览器缓存分为强缓存和协商缓存。 (2) 协商缓存:当强缓存没有命中的时候,浏览器向服务器发送请求,服务器端依据资源的另外一些 HTTP Header 验证这个资源是否命中协商缓存,如果协商缓存命中,服务器会将这个请求返回 304,浏览器从缓存中加载这个资源 另外一种分类方式,可以将浏览器缓存分成 HTTP 协议缓存和非 HTTP 协议缓存。 (1) 非 HTTP 协议缓存:使用 HTML Meta 标签,开发者可以告诉浏览器是否缓存当前页面。 HTTP 缓存 HTTP/1.0 缓存字段 (1) Pragma:设置资源是否缓存,no-cache 表示不缓存。 参考资料 HTTP Headers 浅谈浏览器http的缓存机制 Web缓存相关知识整理 浅谈Web缓存 详谈Web缓存
MySQL的优化指的是一个很大的系统,面试的时候我之前是从sql的语句优化方面去说的,这种优化也有作用,不过是从逻辑方面去优化。 MySQl是非常耗费内存的,线上服务器的MySQL内存要吃到80%左右,内存过小,其他的优化空间其实很小。 另外连接(connection)也是影响MySQL性能的重要一方面。 而MySQL的缓存机制就是把刚刚访问的数据(时间局部性)以及未来即将访问到的数据(空间局部性)保存到缓存中,甚至是高速缓存中。从而提高I/O效率。 按照缓存读写功能的不同,MySQL将缓存分为Buffer缓存和Cache缓存。 Buffer缓存。由于硬盘的写入速度过慢,或者频繁的I/O,对于硬盘来说是极大的效率浪费。 那么可以等到缓存中储存一定量的数据之后,一次性的写入到硬盘中。Buffer 缓存主要用于写数据,提升I/O性能。 Cache 缓存。
SQL优化技巧 MySQL的SQL优化是一个关键的任务,可以显著提高数据库的性能。下面是一些常用的SQL优化技巧,以及具体的示例: 1. 示例: -- 优化前 SELECT * FROM users WHERE age > 20 AND country = 'China'; -- 优化后 SELECT * FROM users WHERE 示例: -- 优化前 SELECT * FROM users WHERE id = 1; -- 优化后 SELECT id, name FROM users WHERE id = 1; 4. 示例: SELECT * FROM users LIMIT 10 OFFSET 30; -- 获取第4页的数据,每页10条记录 6. 定期优化表和修复索引 使用OPTIMIZE TABLE命令来定期优化表和修复索引。这有助于提高查询性能。
缓存介绍 这里是列表文本在高并发多用户的系统中常常会使用缓存来提升读写性能 这里是列表文本常见的如memcached, redis, 内存缓存等 现象 这里是列表文本某产品上线后不久 0x0000000737ff37d0, 0x0000000737f88f08, 0x0000000737f817c8, 0x00000007fc8ba580, 0x0000000725d8e638, 0x0000000725d8e6e0 0x000000072329db00, 0x000000073186ee08, 0x0000000725b7b928, 0x0000000725b7bb98, 0x0000000738066408, 0x00000007230a6ef8 , 0x00000007230a0160, 0x0000000738191a18, 0x0000000737f619e8, 0x0000000737f5a6d8, 0x00000007fc8b9518, 0x00000007230c47e8, 0x00000007230c4890, 0x0000000731907c58, 0x00000007005345a0, 0x000000070052d098, 0x0000000731a6d400
网上关于这个方面的文章也不少,基本的思路是线程+缓存来解决。 下面提出一些优化: 1、采用线程池 2、内存缓存+文件缓存 3、内存缓存中网上很多是采用SoftReference来防止堆溢出,这儿严格限制只能使用最大JVM内存的1/4 4、对下载的图片进行按比例缩放 "; // 放入缓存时是个同步操作 // LinkedHashMap构造方法的最后一个参数true代表这个map里的元素将按照最近使用次数由少到多排列,即LRU // 这样的好处是如果要将缓存中的元素替换 ,初始0,将通过此变量严格控制缓存所占用的堆内存 private long size = 0;// current allocated size // 缓存只能占用的最大堆内存 private ,若没有再开线程,从文件缓存中查找都没有则从指定的url中查找,并对bitmap进行处理,最后通过下面方法对UI进行更新操作。
这段代码中, Mybatis一共发了两条SQL,这就好像说, Mybatis中没有缓存,然后我们打开Mybatis的文档一看,顿时震惊 ? 这难道是骗人的,说好的默认开启缓存呢….. 看完这个图,就明白为什么get(1L)->add()->get(1L)这个过程会发3条SQL了,因为insert的时候,清空了缓存 但是就算insert,并没有影响到get(1L)的结果,但是你却把他的缓存也清空了 ,这明显不合理,那么我们怎么优化呢? 也就是我们做了两件事 list由于缓存命中率低,那么我们就不加入到缓存中 insert我们不清空缓存 那么在代码中,我们具体是怎么实现的呢? UserMapper.xml ? 这样之后,我们Mybatis中的缓存就更高效了 ---- 推荐阅读: 推荐一款让你纵横Github的读码神器 还在使用 SimpleDateFormat?你的项目崩没?
Confluence 为系统的内部缓存提供了缓存的状态以便于你对缓存的大小的命中率进行跟踪,在必要的情况下,你可以对缓存进行调整,让缓存能够更好的满足你的使用需求。 配置缓存 系统管理员可以通过 Confluence 的管理员界面修改系统使用的缓存的大小,这些修改需要对 Confluence 重启后才能生效。在缓存区域中定义的最大使用单元是可以独立调整的。 查看缓存状态和编辑缓存大小 希望查看缓存状态: 进入 ? > 基本配置(General Configuration) > 缓存管理(Cache Management.) 下面是一个常用的缓存示例,内容对象缓存(Content Object)。 ? 如果你需要对 Confluence 的缓存进行清理,你可以简单的删除缓存文件就可以了。 https://www.cwiki.us/display/CONF6ZH/Cache+Statistics
import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig;
public function del_cache(){ //删除缓存目录下的文件runtime目录下的文件 $path=root_path().' runtime';//runtime delFileByDir($path); //return alert('清空缓存成功','index/index',6); return alert('清空缓存成功','/qingadmin/index/welcome',6); } //删除目录及文件,传入目录 function delFileByDir($dir)
Redis缓存穿透、缓存击穿问题优化 + 内存缓存 1 背景 广交会线上举办,在第三方服务不能保证稳定性的情况下,为保证官网稳定性,新增数据聚合服务,用于缓存数据,并保护第三方服务,且在第三方服务失败的情况下 (缓存击穿)。 但是带uid的redis key需要设置真实的过期时间(可以较长,如6小时),避免百万用户请求数据始终缓存。 [yam5rjyvbk.png] 经过内存缓存的优化之后,压测接口的响应时间从ms级提升到了µs级,且压测锯齿明显减少。 5 结束 本文介绍了广交会项目后台用到的两种缓存和相关的优化方法。使用两级缓存还有一个问题就是缓存数据的实时性的问题,这里缓存的过期时间和更新时间需要设置好,不然会出现一致性的问题。
# 瑞吉外卖-缓存优化 缓存优化 问题说明 使用git管理代码 环境搭建 maven坐标 配置文件 配置类 缓存短信验证码 实现思路 缓存菜品数据 实现思路 Spring Cache 框架 Spring Cache介绍 Spring Cache 常用注解 Spring Cache使用方式 缓存套餐数据 实现思路 代码改造 # 缓存优化 # 问题说明 用户数量多,系统访问量大频繁访问数据库,系统性能下降 现在需要对此方法进行缓存优化,提高系统的性能。 针对不同的缓存技术需要实现不同的CacheManager: # Spring Cache 常用注解 在spring boot项目中,使用缓存技术只需在项目中导入相关缓存技术的依赖包,并在启动类上使用 现在需要对此方法进行缓存优化,提高系统的性能。
---- 缓存穿透 定义 查询一个根本不存在的数据, 缓存和DB都不会命中, 白嫖了缓存层和DB 。 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的意义。 ---- 原因 通常缓存穿透的原因如下: 自身业务代码或者数据出现问题。 由于缓存层承载着大量请求, 有效地保护了存储层, 但是如果缓存层由于某些原因不能提供服务(比如超大并发过来,缓存层支撑不住,或者由于缓存设计不好,类似大量请求访问bigkey,导致缓存能支撑的并发急剧下降 ---- 缓存击穿 ( 热点缓存key重建优化 ) 一般情况下,我们使用“缓存+过期时间”的策略既可以加速数据读写, 又保证数据的定期更新, 这种模式基本能够满足绝大部分需求。 缓存击穿的解决方案 (热点缓存key重建优化) 要解决这个问题主要就是要避免大量线程同时重建缓存。
很小的内存就能实现过滤,适用于固定的数据,不适频繁更新的数据
TableView优化之高度缓存 系列文章: TableView优化之高度缓存功能 TableView优化之加载图片的优化逻辑 TableView优化之快速滑动下的忽略加载 ---- 呐,也好久没写博客了 ---- tableView优化之高度缓存功能 日常开发中,tableView的使用率很高,所以相对tableView的优化来说可以做很多很多的事情。 因此应运而生了这套高度缓存的算法。 在此声明,这套算法不是老司机原创,是整合并优化了外国一位大神的源码。 是在IOS6之前用来实现自动布局的属性。当然IOS6之后的autoLayout就要比他强大不少了。 事实上这个属性默认情况下是YES。当为YES时,则我们设置约束是无效的。 6.判断当前tableView的分割线样式,如果有分割线,还要校正高度。 好了,至此你已经计算出这个cell应该有的高度了。
缓存 在微服务架构中,有些请求的响应结果是不变的,例如一些静态文件或公共数据。这些请求的响应结果可以被缓存起来,减少重复计算和请求,提高性能。 Zuul提供了多种缓存机制,例如本地缓存、分布式缓存等,可以根据实际需求选择适合的缓存机制。 在CustomFilter的run方法中,先检查缓存中是否已经存在响应结果,如果存在,则直接返回缓存中的结果;否则,继续执行请求并将响应结果缓存起来: public class CustomFilter ,并根据请求URL作为key从缓存中获取响应结果。 如果缓存中已经存在响应结果,则直接将响应结果设置到Zuul的响应中返回。 如果缓存中不存在响应结果,则继续执行请求,并将响应结果缓存起来。
为此,redis6实现了对客户端缓存的直接支持,以使该模式实现起来更简单、更易访问、更可靠、更高效。 双连接方式 使用Redis 6支持的新版Redis协议RESP3,可以在同一连接中运行数据查询和接收失效消息。 客户机打开第一个将用于失效的连接,请求连接ID,并通过Pub/Sub订阅用于在RESP2模式下获取失效消息的特殊通道(记住RESP2是通常的Redis协议,而不是可以与Redis一起使用的更高级的协议)6使用 什么跟踪记录 默认情况下,客户机不需要告诉服务器它们正在缓存哪些密钥。服务器会跟踪只读命令上下文中提到的每个键,因为它可以被缓存。 这样做的明显优点是不需要客户机告诉服务器它在缓存什么。 此外,在许多客户机实现中,这正是您所希望的,因为一个好的解决方案可以是使用先进先出的方法缓存所有尚未缓存的对象:我们可能希望缓存固定数量的对象,我们检索到的每一个新数据都可以缓存它,丢弃最旧的缓存对象。
PSR-6 缓存接口规范 缓存是提升应用性能的常用手段,为框架中最通用的功能,每个框架也都推出专属的、功能多样的缓存库。这些差别使得开发人员不得不学习多种系统,而很多可能是他们并不需要的功能。 1namespace Psr\Cache; 2 3/** 4 * CacheItemInterface 定了缓存系统里对缓存项操作的接口 5 */ 6interface CacheItemInterface 1namespace Psr\Cache; 2 3/** 4 * CacheItemPoolInterface 生成 CacheItemInterface 对象 5 */ 6interface 1namespace Psr\Cache; 2 3/** 4 * 被所有的实现类库抛出的异常继承的 `异常接口` 5 */ 6interface CacheException 7{ 8} InvalidArgumentException 1namespace Psr\Cache; 2 3/** 4 * 传参错误抛出的异常接口 5 * 6 * 当一个错误或者非法的传参发生时,**必须** 抛出一个继承了 7 * Psr\Cache