缓存服务器

Spring 极速集成注解 redis 实践

隐身守侯 提交于 2020-01-10 13:58:00
Redis 做为基于内存的 Key-Value 数据库,用来做缓存服务器性价比相当高。 官方推出的面向 Java 的 Client Jedis,提供了很多接口和方法,可以让 Java 操作使用 Redis。 Spring 团队对 Jedis 进行了封装,独立为 spring-data-redis 项目,配合 spring 特性并集成 Jedis 的一些命令和方法。 本文重点描述集成过程,能让你迅速的通过 spring-data-redis 将 redis 集成到 spring 项目中,毕竟大家都忙的。 1. 添加项目依赖 <!--redis 缓存--> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.8.4.RELEASE</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> 2. 添加 spring-redis-context 配置 <?xml version="1.0"

你修改了样式,却要我手动清除游览器缓存,这是BUG!

与世无争的帅哥 提交于 2020-01-10 13:02:46
1. 事件背景 公司网站首页的样式进行了大量改版,但是上测试线后,测试同事对我说:怎么还是原来的效果,没有任何变化啊。听到这样的问题,我们第一反应是游览器缓存。你清除一下游览器缓存,或者换一个游览器。 手动清除游览器缓存虽然可以解决问题,但是用户根本不知道啥是缓存,也不会手动清楚游览器缓存。我不管!这个是BUG,不解决这个BUG 不能上线。 嗯… 你说的有道理,我马上去修改! 2. 解决方案 游览器缓存是个好东西,第一次访问网站会从服务器获取静态的资源,然后将静态资源在游览器中缓存,下次用户在访问时,就直接获取游览器的缓存的静态资源。但是当你更新样式或者图片资源的时候,再次访问就不会获取最新修改的静态资源。 解决的方案有3种: 用户自行清理游览器缓存。 使用禁用缓存标签,实现禁用浏览器缓存。 为js和css文件添加版本号。 第一种方式:用户自行清理游览器缓存。这个不太现实,测试就直接给否决了。 第二种方式:在html页面的head 头中添加如下代码: < meta http-equiv = " Cache-Control " content = " no-cache, no-store, must-revalidate " /> < meta http-equiv = " Cache " content = " no-cache " > < meta http-equiv = "

高性能--web服务器缓存 (2)

假装没事ソ 提交于 2020-01-10 12:54:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> /** * * 关于对web服务器缓存(控制期) * * 1.web缓存对静态还是动态内容的过期检查 可能大家对我在上一章中讲到,内容与HTTP头分开存储的, http头中 标记就是判断过期检查的其实就是建立在http协议上的 举例PHP脚本: 如果要为一个动态内容指定有效期。 仍然要在 Http响应头中追加Expires标记,如果你对这个动态内容不要这个动态内容缓存的话,那么最简单的办法就是让 header("Expires: 0"); 这样web服务器就不会把这个动态内容发到缓存区 Look下面代码: * **/ $mod_time = $_SERVER['HTTP_IF_MODIFIED_SINCE']; if (strtotime($mod_time) + 20 > time()) { header("HTTP/1.1 304"); exit(); } header("Last-Modified:".gmdate("D, d M Y H:i:s")."GMT"); header("Cache-Control: max-age=10"); echo time(); /** * 关闭服务器磁盘缓存, 那么上面代码每到20秒才到服务器去取数据(这个代 码应该不需要我讲吧) * * 现在我开启服务器缓存后

redis测试题

[亡魂溺海] 提交于 2020-01-10 10:06:36
1、什么是Redis? Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。 Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系统等等。另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一 个功能加强版的memcached来用。 Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。 2、Redis相比memcached有哪些优势? (1) memcached所有的值均是简单的字符串,redis作为其替代者, 支持更为丰富的数据类型 (2) redis的速度比memcached快很多 (3) redis可以持久化其数据 3、Redis支持哪几种数据类型

缓存雪崩

故事扮演 提交于 2020-01-10 01:22:58
缓存雪崩 缓存雪崩是指缓存不可用或者大量缓存由于超时时间相同在同一时间段失效,大量请求直接访问数据库,数据库压力过大导致系统雪崩。 解决方案: 1、给缓存加上一定区间内的随机生效时间,不同的key设置不同的失效时间,避免同一时间集体失效。比如以前是设置10分钟的超时时间,那每个Key都可以随机8-13分钟过期,尽量让不同Key的过期时间不同。 2、采用多级缓存,不同级别缓存设置的超时时间不同,及时某个级别缓存都过期,也有其他级别缓存兜底。 3、利用加锁或者队列方式避免过多请求同时对服务器进行读写操作。 来源: CSDN 作者: 阳光_你好 链接: https://blog.csdn.net/weixin_45805339/article/details/103913579

CPU高速缓存与内存屏障

你离开我真会死。 提交于 2020-01-10 00:25:35
1. CPU缓存 cpu高速缓存的由来 在CPU的全部取指令周期中(程序计算),至少需要访问一次存储器(也就是我们所说物理内存上的数据) 通常需要多次访问存储器的取操作数或者保存结果,CPU处理计算的速度明显受限于访问存储器的限制 因此解决方案就是利用局部性原理,在CPU与物理内存之间提供一个容量小并且速度快的存储器,称为高速缓存 高速缓存概述 缓存是分“段”(line)的,一个段对应一块存储空间,大小是 32(较早的 ARM、90 年代 /2000 年代早期的 x86 和 PowerPC)、64(较新的 ARM 和 x86)或 128(较新的 Power ISA 机器)字节 高速缓存包含物理内存部分数据副本 cpu读取数据时将会先检查高速缓存中的数据是否存在,存在就返回,不存在就读取物理内存数据 高速缓存和内存 高速缓存分为L1-L3 Cache L1 Cache: 一级缓存是CPU第一层高速缓存,分为指令缓存和数据缓存,一般服务器的CPU的L1缓存容量在32-4096kb,现在的L1 Cache都不能直接与内存直连传输数据 L2 Cache: 由于L1级别高速缓存容量的限制,为了再次提高CPU的运算速度,在CPU外部放置一个高速存储器,即二级缓存 L3 Cache: 现在的L3缓存都是内置的,主要是进一步降低内存延迟,提升处理器运算能力,一般是多核共享一个L3缓存

高阶数据结构:SSTable

陌路散爱 提交于 2020-01-10 00:13:54
1. 前言 最近在组会上面通过小组讨论论文时,发现了SSTable这个数据结构。课后为了深入分析和学习这个数据结构,我做了一些资料查阅。在查询相关分布式的书籍后,找到了SSTable的数据结构,现将其作为笔记记录下来。之前整理的BigTable论文里面提及到了SStable,但是当时并没有引起我的注意。现在将深入理解这个数据结构——SSTable。 2. SSTable的定义 Google SSTable文件格式在内部用于存储Bigtable数据。 它的格式为文件本身就是一个排序的、不可变的、持久的Key/Value对Map,其中Key和value都可以是任意的byte字符串。提供操作以查找与指定键相关联的值,并遍历指定键范围内的所有键/值对。使用Key来查找Value,或通过给定Key范围遍历所有的Key/Value对。每个SSTable包含一系列的Block(一般Block大小为64KB,但是它是可配置的),在SSTable的末尾是Block索引,用于定位Block,这些索引在SSTable打开时被加载到内存中,在查找时首先从内存中的索引二分查找找到Block,然后一次磁盘寻道即可读取到相应的Block。还有一种方案是将这个SSTable加载到内存中,从而在查找和扫描中不需要读取磁盘。 3. BigTable的架构 BigTalbe构建在GFS之上

怎么掌握安卓中高级开发面试知识点?缓存重点都在这!

余生颓废 提交于 2020-01-09 23:50:31
前言 之前早就说要整理一个集合方便大家,还好没有拖到2020年 BATJ、字节跳动面试专题,算法专题,高端技术专题,混合开发专题,java面试专题,Android,Java小知识,到性能优化.线程.View.OpenCV.NDK等已经上传到了的我的GitHub 大家点击我的GitHub地址: https://github.com/Meng997998/AndroidJX 点下star一起学习 好了今天就跟着我来,告诉你缓存重点,一起熟练掌握安卓中高级开发面试知识点! 我们都知道,几乎所有的项目都做了缓存,但是缓存做的怎么样,其实只有每个人自己知道。 缓存做的好,没有网络也能流畅的使用;再多的数据请求都不会出现卡顿延迟等待很久的情况。 程序中除了图片缓存(三级缓存),还有信息缓存。当用户无法联网时,app会默认显示缓存的数据。 ###前言缓存方式 SQLite 下载完数据文件后,把文件的相关信息如url,路经,下载时间,过期时间等存放到数据库,把url作为唯一的标识。下次下载的时候根据url先从数据库中查询,如果查询到当前时间并未过期,就根据路径读取本地文件,从而实现缓存的效果。 文件缓存使用File.lastModified()方法得到文件的最后修改时间,与当前时间判断是否过期,从而实现缓存效果。数据格式为JSON。 缓存方式两点说明 1、不同类型的文件的缓存时间不一样。笼统的说

《大规模WEB服务开发技术》读书笔记(I)

别等时光非礼了梦想. 提交于 2020-01-09 13:55:20
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1、认识服务的规模 注册用户,独立用户 请求数 繁忙时流量 服务器台数 貌似应该有很多其他的指标,以前都听说过,但是从来没有认真分析过,已经上线的系统也没有对此进行过统计和分析! 2、大规模服务中的问题有以下几点: 可扩展性、负载均衡的必要性 一般来说,当一台服务器无法承担负载时,都会采用横向扩展(scale out)或者纵向扩展(scale up)。横向扩展就是通过服务器的数量来分担负载,纵向扩展是通过提高硬件的性能来处理负载。而我们知道,硬件的性能和价格不是成比例的,所以通常采用横向扩展技术!采用横向扩展也会带来问题,如请求如何分配——负载均衡,数据如何同步,网络通信延迟等。 保证冗余性 服务器多了后,故障率也会上升。要么构建稳定的系统,要么构建发生故障时能自动切换以继续运行的系统! 低成本运维的重要性 采用自动化工具。 开发人数和开发方法的变化 如何标准化开发? 考虑下应用程序实现方案? 统一编程语言? 统一库函数和框架? 统一代码规范? 使用版本管理工具管理源代码? 需要有人负责全局的推行。 团队如何管理 应对大规模数据量 数据的流向:磁盘->内存->缓存->CPU。各层的速度差异巨大。 减小数据大小? 分散到多台服务器上? 把数据读取次数降到最低? 3、系统增长战略——最小化开端、预见变化的管理和设计

MySQL系列(七)--SQL优化的步骤

自闭症网瘾萝莉.ら 提交于 2020-01-08 21:52:16
  前面讲了如何设计数据库表结构、存储引擎、索引优化等内存,这篇文章会讲述如何进行SQL优化,也是面试中关于数据库肯定会被问到的, 这些内容不仅仅是为了面试,更重要的是付诸实践,最终用到工作当中   之前的MySQL内存地址: MySQL系列内容 如何获取存在性能的SQL: 1、通过生产环境用户、测试人员反馈的应用响应速度较慢,可能就是SQL性能较差导致的 2、通过慢查询日志获取 3、实时获取存在性能问题的SQL MySQL慢查日志: 参数:   1、slow_query_log  是否启动慢查询日志,默认不开启,on/off,动态参数,运行时通过set global slow_query_log=on设置,也可以 通过脚本定时开关   2、slow_query_log_file  日志存储和数据存储的文件名和路径,最好是自己设置,而不是默认,日志和数据文件要区分开   3、long_query_time  慢查询日志SQL执行时间的阈值,单位s,默认10s,超过这个执行时间的SQL都会被记录下来,无论是查询还是修改, 还是记录已经回滚的SQL,最大精确到微妙ms,可以设置为1s比较合适   4、log_queries_not_using_indexes  是否记录未使用索引的SQL 设置参数:   1、my.cnf,永久生效   2、通过SET GLOBAL设置参数,例如SET