缓存服务器

SpringBoot + Redis:基本配置及使用

陌路散爱 提交于 2020-03-08 15:04:02
注:本篇博客SpringBoot版本为2.1.5.RELEASE,SpringBoot1.0版本有些配置不适用 一、SpringBoot 配置Redis   1.1 pom 引入spring-boot-starter-data-redis 包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>   1.2 properties配置文件配置redis信息   默认连接本地6379端口的redis服务,一般需要修改配置,例如: # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=127.0.0.1 # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password= # 连接池最大连接数(使用负值表示没有限制) spring.redis.jedis.pool.max-active=20 # 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.jedis.pool.max-wait

Redis主从配置

我怕爱的太早我们不能终老 提交于 2020-03-08 13:30:17
一、Redis主从配置 如果有一天Redis缓存崩溃了,服务器的硬件损坏,缓存就没有了,那么用户流量就会直接访问数据库,从而增大了访问数据库的次数,瞬间就会把我们的网站搞崩了,这时候就就需要主从缓存,从缓存相当于是主缓存的备份。如果主缓存坏了,用户流量也可以在从缓存中读取,主从缓存跟主从数据库是保持数据一致的。 主从数据库是用空间换时间,就是用内存换网站的访问速度,高可用性比服务器的空间重要,容灾性更强。 主从概念 ⼀个master可以拥有多个slave,⼀个slave⼜可以拥有多个slave,如此下去,形成了强⼤的多级服务器集群架构 master用来写数据,slave用来读数据,经统计:网站的读写比率是10:1 通过主从配置可以实现读写分离 master和slave都是一个redis实例(redis服务) 主从配置(这里配置是在一台机上,主从缓存可以是多台机器) 配置主 来源: CSDN 作者: Yauger 链接: https://blog.csdn.net/Yauger/article/details/104728419

IOS 最重量级三方库 Three20 Network 缓存机制小析:

流过昼夜 提交于 2020-03-08 12:46:23
前置知 识 : http 协议 自 带 的Last-Modified和ETag, 详细 的网上搜索下就行了。 简单 来 说 就是,服 务 器在返回 资源时包含 一个ID( 时间 或是某种token),客 户 端 缓存该I D,下一次再 请求 同一 资源时 ,包含 这个 ID,服 务 器根据此ID来判断 资源 是否改 变 ,从而返回不同的 结果 (200或是304)。 Three20 实现的默认缓存方案是: TTURLRequestCachePolicyDefault = (TTURLRequestCachePolicyMemory | TTURLRequestCachePolicyDisk | TTURLRequestCachePolicyNetwork), TTURLRequestCachePolicyNetwork 代表使用 Last-Modified 策略, TTURLRequestCachePolicyMemory | TTURLRequestCachePolicyDisk 代表使用内存和文件 缓存资源 和 资源ID, 改 变缓存方案: TTURLRequest request; //blah,blah request.cachePolicy = cachePolicy | TTURLRequestCachePolicyEtag; 这里 增加了Etag的功能,如果服 务

iOS开发缓存机制之—内存缓存机制

北战南征 提交于 2020-03-08 11:12:56
在IOS应用程序开发中,为了减少与服务端的交互次数,加快用户的响应速度,一般都会在iOS设备中加一个缓存的机制。 这篇文章将介绍一下如何在iOS设备中进行缓存,本文先介绍一下将内容缓存到内存中,下一篇文章就介绍一下在iOS磁盘上缓存内容。 使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行。有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求。 内存缓存我们可以使用sdk中的NSURLCache类。NSURLRequest需要一个缓存参数来说明它请求的url何如缓存数据的,我们先看下它的CachePolicy类型。 1、NSURLRequestUseProtocolCachePolicy NSURLRequest默认的cache policy,使用Protocol协议定义。 2、NSURLRequestReloadIgnoringCacheData 忽略缓存直接从原始地址下载。 3、NSURLRequestReturnCacheDataElseLoad 只有在cache中不存在data时才从原始地址下载。 4、NSURLRequestReturnCacheDataDontLoad 只使用cache数据,如果不存在cache,请求失败;用于没有建立网络连接离线模式; 5

iOS开发内存缓存机制

牧云@^-^@ 提交于 2020-03-08 11:12:01
转自 http://mobile.51cto.com/iphone-314374.htm 本文先介绍一下将内容缓存到内存中,在iOS应用程序开发中,为了减少与服务端的交互次数,加快用户的响应速度,一般都会在iOS设备中加一个缓存的机制。 使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行。有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求。 内存缓存我们可以使用sdk中的NSURLCache类。NSURLRequest需要一个缓存参数来说明它请求的url何如缓存数据的,我们先看下它的CachePolicy类型。 1、NSURLRequestUseProtocolCachePolicy NSURLRequest默认的cache policy,使用Protocol协议定义。 2、NSURLRequestReloadIgnoringCacheData 忽略缓存直接从原始地址下载。 3、NSURLRequestReturnCacheDataElseLoad 只有在cache中不存在data时才从原始地址下载。 4、NSURLRequestReturnCacheDataDontLoad 只使用cache数据,如果不存在cache,请求失败;用于没有建立网络连接离线模式; 5

iOS开发之内存缓存机制

前提是你 提交于 2020-03-08 11:10:28
使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行。有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求。 内存缓存我们可以使用sdk中的NSURLCache类。NSURLRequest需要一个缓存参数来说明它请求的url何如缓存数据的,我们先看下它的CachePolicy类型。 1、NSURLRequestUseProtocolCachePolicy NSURLRequest默认的cache policy,使用Protocol协议定义。 2、NSURLRequestReloadIgnoringCacheData 忽略缓存直接从原始地址下载。 3、NSURLRequestReturnCacheDataElseLoad 只有在cache中不存在data时才从原始地址下载。 4、NSURLRequestReturnCacheDataDontLoad 只使用cache数据,如果不存在cache,请求失败;用于没有建立网络连接离线模式; 5、NSURLRequestReloadIgnoringLocalAndRemoteCacheData:忽略本地和远程的缓存数据,直接从原始地址下载,与NSURLRequestReloadIgnoringCacheData类似。 6

CPU缓存和内存屏障

好久不见. 提交于 2020-03-08 02:41:17
目录 CPU性能优化手段 - 缓存 多级缓存 缓存同步协议 CPU性能优化手段 - 运行时指令重排 两个问题 解决方法 - 内存屏障 CPU性能优化手段 - 缓存 为了提高程序的运行性能, 现代CPU在很多方面对程序进行了优化 例如: CPU高速缓存, 尽可能的避免处理器访问主内存的时间开销, 处理器大多会利用缓存以提高性能 多级缓存 L1 Cache (一级缓存)是CPU第一层高速缓存, 分为数据缓存和指令缓存, 一般服务器CPU的L1缓存的容量通常在32-4096kb L2 Cache (二级缓存) 由于L1高速缓存的容量限制, 为了再次提高CPU的运算速度, 在CPU外部放置一高速缓存存储器, 即二级缓存 L3 Cache (三级缓存)现在都是内置的, 而它的实际作用既是, L3缓存的应用可以进一步降低内存延迟, 同时提升大数据量计算时处理器的性能. 具有较大L3缓存的处理器更有效的文件系统缓存行为及较短消息和处理器队列长度. 一般是多核共享一个L3缓存 CPU在读取数据时, 先在L1中寻找, 再从L2中寻找, 再从L3中寻找, 然后是内存, 最后是外存储器 缓存同步协议 多CPU读取同样的数据进行缓存, 进行不同运算之后, 最终写入主内存以那个CPU为准? 在这种高速缓存回写的场景下, 有一个缓存一致性协议, 多数CPU厂商对它进行了实现. 即MESI协议,

生产要不要开启MySQL查询缓存

一笑奈何 提交于 2020-03-07 18:51:54
一、前言 在当今的各种系统中,缓存是对系统性能优化的重要手段。MySQL Query Cache(MySQL查询缓存)在MySQL Server中是默认打开的,但是网上各种资料以及有经验的DBA都建议生产环境中把MySQL Query Cache关闭。按道理,MySQL Server默认打开,是鼓励用户使用缓存,但是大拿们却建议关闭此功能,并且国内各个云厂商提供的MySQL云服务中默认都是关闭这个功能,这是为什么?他们在使用中遇到了什么坑?本文将会从以下几方面来详解MySQL Query Cache。 1.MySQL查询缓存是什么? MySQL缓存规则是什么? 如何配置和缓存MySQL缓存 MySQL缓存的优缺点 生产要不要开启MySQL缓存 二、 MySQL查询缓存简介 MySQL查询缓存是MySQL中比较独特的一个缓存区域,用来缓存特定Query的整个结果集信息,且共享给所有客户端。为了提高完全相同的Query语句的响应速度,MySQL Server会对查询语句进行Hash计算后,把得到的hash值与Query查询的结果集对应存放在Query Cache中。当MySQL Server打开Query Cache之后,MySQL Server会对接收到的每一个SELECT 语句通过特定的Hash算法计算该Query的Hash值,然后通过该hashi值到Query Cache中去匹配

SDWebImage4.0.0 源码解析

放肆的年华 提交于 2020-03-07 18:38:03
在开发 iOS 的客户端应用时,经常需要从服务器下载图片,虽然系统提供了下载工具:NSData、NSURLSession等等方法,但是考虑到图片下载过程中,需要考虑的因素比较多,比如:异步下载、图片缓存、错误处理、编码解码等,以及实际需要中根据不同网络加载不同画质的图片等等需求,因此下载操作不是一个简单的下载动作就可以解决。 针对上述问题,目前常用的开源库就是 SDWebImage ,它很好的解决了图片的异步下载、图片缓存、错误处理等问题,得到了广泛的应用,使得设置 UIImageView 、 UIButton 对象的图片十分方便。本文就从源码的角度,剖析一下这款优秀的开源库的具体实现。 类结构图 SDWebImage 的源码的类结构图和下载流程图在官方的 说明文档 里有介绍,通过 UML 类结构图详细的介绍了该框架的内部结构,以及通过流程图介绍了具体的下载过程。 下图是我总结的 SDWebImage 的结构图,简单的把 SDWebImage 源码文件按照功能进行了划分,方便在阅读源码时,能快速的对源码有一个总体的认识,加快阅读效率。 ![](//upload-images.jianshu.io/upload_images/1843940-c51585b28704fae9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

缓存穿透、缓存雪崩和缓存击穿

故事扮演 提交于 2020-03-07 17:53:41
缓存系统是我们平时开发经常使用到的,也是在高并发场景下减少或防止流量对DB等底层系统冲击的最有效手段之一。下面就简单谈谈缓存系统经常提及的三个问题以及解决方案。 1.缓存穿透 首先回忆下通常情况我们设置的缓存机制,如下图所示: 缓存加载机制 这套机制,由于出于容错考虑,从存储层查不到数据则不写入缓存,这就导致每次请求不存在的数据时都要到存储层去查询。如果有黑客可以利用不存在的key,频繁请求我们的服务器,这些请求就会穿透缓存,直接打到DB上,对DB造成巨大压力甚至挂掉。这就是缓存穿透。 解决方案 有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用 布隆过滤器 (bloom filter)。 布隆过滤器是将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。 另外一个更为简单粗暴的方法,如果一个查询结果空(不管是数 据不存在,还是查询异常),我们仍然把这个空结果进行缓存,但它的过期时间会很短,几分钟即可。 2.缓存雪崩 缓存雪崩是指在如果我们几乎在同一时间设置的缓存(比如缓存预热),并且设置了相同的过期时间,这就会导致缓存会在某一时刻同时失效,这个时间所有请求会全部转发到DB,DB瞬时压力过重雪崩。 解决方案 大多数系统设计者考虑用加锁或者队列的方式保证缓存的单线 程(进程)写