缓存服务器

Redis 热点key

余生颓废 提交于 2019-12-19 04:55:58
压测报redis 热点问题 热点问题概述 产生原因 热点问题产生的原因大致有以下两种: 用户消费的数据远大于生产的数据(热卖商品、热点新闻、热点评论、明星直播)。 在日常工作生活中一些突发的的事件,例如:双十一期间某些热门商品的降价促销,当这其中的某一件商品被数万次点击浏览或者购买时,会形成一个较大的需求量,这种情况下就会造成热点问题。同理,被大量刊发、浏览的热点新闻、热点评论、明星直播等,这些典型的读多写少的场景也会产生热点问题。 请求分片集中,超过单Server的性能极限。 在服务端读数据进行访问时,往往会对数据进行分片切分,此过程中会在某一主机Server上对相应的Key进行访问,当访问超过Server极限时,就会导致热点Key问题的产生。 热点问题的危害 流量集中,达到物理网卡上限。 请求过多,缓存分片服务被打垮。 DB击穿,引起业务雪崩。 如前文讲到的,当某一热点Key的请求在某一主机上超过该主机网卡上限时,由于流量的过度集中,会导致服务器中其它服务无法进行。如果热点过于集中,热点Key的缓存过多,超过目前的缓存容量时,就会导致缓存分片服务被打垮现象的产生。当缓存服务崩溃后,此时再有请求产生,会缓存到后台DB上,由于DB本身性能较弱,在面临大请求时很容易发生请求穿透现象,会进一步导致雪崩现象,严重影响设备的性能。 常见解决方案

Mac-Safari无法建立安全连接

岁酱吖の 提交于 2019-12-19 04:43:21
Mac-Safari无法建立安全连接 概述 今天突然safari无法访问百度等网站,提示为: Safari 打不开页面 xxx ,因为无法与服务器 xxx 建立安全连接 但是我用其他浏览器比如Chrome却可以访问。 问题解决 猜测是缓存原因,将缓存全部清理后,所有打不开的网页恢复正常。 清理缓存方法可见 这里 来源: CSDN 作者: 迷路剑客 链接: https://blog.csdn.net/baichoufei90/article/details/103600480

[Redis] Redis日常学习总结一

老子叫甜甜 提交于 2019-12-19 03:22:16
一 Redis使用bitset(bitmap)来统计日活跃量 1 BitMap介绍   Bitmap(即Bitset),是一串连续的2进制数字(0或1),每一位所在的位置为偏移(offset),bitmap就是通过最小的单位bit来进行0或者1的设置,表示某个元素对应的值或者状态。   Redis从2.2.0版本开始新增了 setbit , getbit , bitcount 等几个bitmap相关命令。虽然是新命令,但是并没有新增新的数据类型,因为 setbit 等命令只不过是在 set 上的扩展。在bitmap上可执行AND,OR,XOR以及其它位操作。 2 相关命令   (1)SETBIT key offset value   对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。位的设置或清除取决于 value 参数,可以是 0 也可以是 1 。当 key 不存在时,自动生成一个新的字符串值。   字符串会进行伸展(grown)以确保它可以将 value 保存在指定的偏移量上。当字符串值进行伸展时,空白位置以 0 填充。   offset 参数必须大于或等于 0 ,小于 2^32 (bit 映射被限制在 512 MB 之内)。    对使用大的 offset 的 SETBIT 操作来说,内存分配可能造成 Redis 服务器被阻塞。   redis>

前端优化方案

末鹿安然 提交于 2019-12-19 02:28:41
什么是前端 性能 优化(what)? 从用户访问资源到资源完整的展现在用户面前的过程中,通过技术手段和优化策略,缩短每个步骤的处理时间从而提升整个资源的访问和呈现速度。 为什么要做前端性能优化(why)? 在构建web站点的过程中,任何一个细节都有可能影响网站的访问速度,如果不了解性能优化知识,很多不利网站访问速度的因素会形成累加,从而严重影响网站的性能,导致网站访问速度变慢,用户体验低下,最终导致用户流失。 1. 从用户角度而言,优化能够让页面加载得更快、对用户的操作响应得更及时,能够给用户提供更为友好的体验。 2. 从服务商角度而言,优化能够减少页面请求数、或者减小请求所占带宽,能够节省可观的资源。 总之,恰当的优化不仅能够改善站点的用户体验并且能够节省相当的资源利用。 从浏览器发起请求到页面能正常浏览都有哪些阶段(process)? 预处理——>DNS解析——>建立连接——>发起请求——>等待响应——>接受数据——>处理元素——>布局渲染 如何优化——性能优化的具体方法? 一)内容层面 1、DNS解析优化 (DNS缓存、减少DNS查找、keep-alive、适当的主机域名) 2、避免重定向(/还是需要的) 3、切分到多个域名 4、杜绝404 二)网络传输阶段 1、减少传输过程中实体的大小 1)缓存 2)cookie优化 3)文件压缩( Accept-Encoding: g

《Redis设计与实现》读书笔记

房东的猫 提交于 2019-12-19 02:24:50
《Redis设计与实现》读书笔记 很喜欢这本书的创作过程,以开源的方式,托管到Git上进行创作; 作者通读了Redis源码,并分享了详细的带注释的源码,让学习Redis的朋友轻松不少; 阅读优秀的源码作品能快速的提升编码内功,而像Redis这样代码量不大(2万多行)却句句精致的作品,当然不能错过; 有兴趣的朋友当好好享用; 源码: https://github.com/huangz1990/annotated_redis_source 以下是这本书重点环节的读书笔记; Redis的内部字符串实现 Redis 使用自行实现的sds 类型来表示字符串: 原因:可以高效地实现追加和长度计算,并且它还是二进制安全的。 在 Redis 内部,字符串的追加和长度计算并不少见,而 APPEND 和 STRLEN 更是这两种操作在 Redis 命令中的直接映射,这两个简单的操作不应该成为性能的瓶颈。另外,Redis 除了处理 C 字符串之外,还需要处理单纯的字节数组,以及服务器协议等内容,所以为了方便起见,Redis 的字符串表示还应该是二进制安全的: 程序不应对字符串里面保存的数据做任何假设,数据可以是以 \0 结尾的 C 字符串,也可以是单纯的字节数组,或者其他格式的数据。 关于sds的详情介绍,参见: http://origin.redisbook.com/en/latest

高性能网站建设指南----笔记

随声附和 提交于 2019-12-19 02:00:28
小概述: 1.只有10%-20%的最终用户响应时间花在了下载HTML文档上,其余的80%-90%的时间花在了下载页面中的所有组件上【js,css,image,flash...】。 2.如果浏览器和服务器都支持的话,可以使用压缩来减小响应的大小。浏览器可以使用Accept-Encoding头来声明它支持的压缩,服务器使用Content-Encoding头来确认响应已被压缩。 3.条件GET请求 如果浏览器在其缓存中保留了组件一个副本,但并不确定它是否仍然有效,就会生成一个条件GET请求,即在请求头中使用If-Modified-Since头将最后修改时间发送给服务器,请求服务器验证该副本从最后修改时间以来有没有被更新过,如果 没有更新过,服务器会返回一个"304 Not Modified"状态码并不再发送响应体,浏览器直接使用缓存中的这个副本,从而得到一个更小且更快的响应。 请求: GET /us.js.yimg.com/lib/common/utils/2/yahoo_2.0.0-b2.js HTTP/1.1 Host: us.js2.yimg.com User-Agent: Mozilla/5.0 (...) Gecko/20061206 Firefox/1.5.0.9 Accept-Encoding: gzip,deflate If-Modified-Since: Wed, 22

StackExchange.Redis学习笔记(一) Redis的使用初探

寵の児 提交于 2019-12-19 00:36:45
Redis Redis将其数据库完全保存在内存中,仅使用磁盘进行持久化。 与其它键值数据存储相比,Redis有一组相对丰富的数据类型。 Redis可以将数据复制到任意数量的从机中 Redis的安装   官网只提供了linux的安装包,我win10 的系统,在github上下载的windows安装包 3.0.504最新稳定版的   github地址: https://github.com/MicrosoftArchive/redis/releases   官网下载地址: https://redis.io/download   将压缩包解压到文件夹后,双击“ redis-server.exe ”即可启动redis服务,也可以在环境变量中配置之后,用redis-server 命令来开启服务,以下是服务启动成功界面    Redis的使用   C#可选用 ServiceStack.Redis 或者 StackExchange.Redis 等客户端程序操作redis,由于ServiceStack.Redis已经收费了,我这里用的是StackExchange.Redis,通过Nuget安装到项目中 接下来我们创建一个操作redis的帮助类: 1 public static class StackExchangeRedisHelper 2 { 3 private static readonly

Redis分布式锁之实战

拥有回忆 提交于 2019-12-18 21:02:51
一、pom依赖 <dependency> <groupId>tf56.redis</groupId> <artifactId>redis-client</artifactId> <version>1.0.0</version> <exclusions> <exclusion> <artifactId>servlet-api</artifactId> <groupId>javax.servlet</groupId> </exclusion> <exclusion> <artifactId>gson</artifactId> <groupId>com.google.code.gson</groupId> </exclusion> </exclusions> </dependency> <!-- 其他redis依赖 --> 二、MyCacheCloudRedisFactory工具类 package tf56.payOnlineService.util.redis; ​ import com.sohu.tv.builder.ClientBuilder; import com.sohu.tv.cachecloud.client.basic.enums.RedisTypeEnum; ​ import org.apache.commons.lang.StringUtils; import org

HTTP报头

无人久伴 提交于 2019-12-18 20:52:16
HTTP协议详解之消息报头篇 HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行),消息报头(可选),空行(只有CRLF的行),消息正文(可选)组成。 HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。 每一个报头域都是由名字+“:”+空格+值 组成,消息报头域的名字是大小写无关的。 1、普通报头 在普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息。 eg: Cache-Control 用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制),HTTP1.0使用的类似的报头域为Pragma。 请求时的缓存指令包括:no-cache(用于指示请求或响应消息不能缓存)、no-store、max-age、max-stale、min-fresh、only-if-cached; 响应时的缓存指令包括:public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage. eg:为了指示IE浏览器(客户端)不要缓存页面

《高性能网站建设指南》读书笔记

主宰稳场 提交于 2019-12-18 15:23:17
规则 1 -减少 HTTP 请求 请求网页时只有 10 %- 20 %的最终用户响应时间花在接收请求的 HTMl 文档上,剩下的 80 %- 90 %时间花在为 HTML 文档所引用的所有组建(图片,脚本,样式表, Flash 等)进行的 HTTP 请求上,因此改善响应时间的最简单途径就是减少组件的数量,并由此减少 HTTP 请求数量。 图片地图:我们可以将多个图片完成的功能,使用一个图片,根据的不同区域来响应不应的请求。 合并脚本和样式表:每个文件都会导致一个 HTP 请求,尽量将 css 和 js 合并到一个文件中。 规则 2 -使用内容发布网络 在多个地理位置不同的服务器上部署内容,如果 web 服务器离拥护更近,则一个 http 请求的响应时间将缩短,如果组件 web 服务器离拥护更近,则多个 http 请求的响应时间将缩短。有很多公司提供 CDN (内容发布网络)服务。 CDN 用于发布静态内容,如图片,脚本,样式表和 Flash 。 规则 3 -添加 Expires 头 使用 Expires 来设置浏览器缓存,指到指定的时间为止一直访问缓存中的内容。另外在 http1.1 中引入了 cache - control 头来克服 Expires 头的限制,因为 Expires 头使用一个特定时间,它要求服务器和客户端的时钟严格同步,过期时间需要经常检查