缓存服务器

Redis 缓存问题(13)

断了今生、忘了曾经 提交于 2020-04-07 23:58:32
缓存使用场景 针对读多写少的高并发场景,我们可以使用缓存来提升查询速度。 当我们使用Redis作为缓存的时候,一般流程是这样的: 因为这些数据是很少修改的,所以在绝大部分的情况下可以命中缓存。但是,一旦被缓存的数据发生变化的时候,我们既要操作数据库的数据,也要操作Redis的数据,所以问题来了。现在我们有两种选择: 先操作Redis的数据再操作数据库的数据 先操作数据库的数据再操作Redis的数据到 底选哪一种?首先需要明确的是,不管选择哪一种方案,我们肯定是希望两个操作要么都成功,要么都一个都不成功。不然就会发生Redis跟数据库的数据不一致的问题。 但是,Redis的数据和数据库的数据是不可能通过事务达到统一的,我们只能根据相应的场景和所需要付出的代价来采取一些措施降低数据不一致的问题出现的概率,在数据一致性和性能之间取得一个权衡。 对于数据库的实时性一致性要求不是特别高的场合,比如T+1的报表,可以采用定时任务查询数据库数据同步到Redis的方案。 由于我们是以数据库的数据为准的,所以给缓存设置一个过期时间,是保证最终一致性的解决方案。 选择方案 一、先更新数据库,再删除缓存 正常情况: 更新数据库,成功。 删除缓存,成功。 异常情况: 1.更新数据库失败,程序捕获异常,不会走到下一步,所以数据不会出现不一致。 2.更新数据库成功,删除缓存失败。数据库是新数据,缓存是旧数据

memcache内存分配机制

隐身守侯 提交于 2020-04-07 03:30:42
memcached的内存分配没有用到c语言中自带的malloc函数,因为这个函数分配内存的时候效率很低,对于这种要求快速响应,对效率要求非常高的缓存软件来说非常不合适。 memcached用的是自己的一套内存分配方法,叫做slab allocation。 ***64位的操作系统能分配 2GB 以上的内存。32位的操作系统中,每个进程最多只能使用 2GB 内存。 ***如果想缓存更多的数据,建议还是开辟更多的memcache进程(不同端口)或者使用分布式memcache进行缓存,将数据缓存到不同的物理机或者虚拟机上。 ***memcached启动时指定的内存分配(如:-m 64)是memcached用于保存数据的量,不包括memcached本身占用的内存、以及为了保存数据而设置的管理空间。因此,memcached进程的实际内存分配量要比指定的容量要大。 Memcache进程启动,在内存开辟了连续的区域。咱们用上面的图形来举例,这段连续的区域就好像上面的slab1+slab2+slab3+……+slab(n).分配区域相同的构成了slab(分片组)。Slab下面可不直接就是存储区域片(就是图中的chunks)了。而是page,如果一个新的缓存数据要被存放,memcached首先选择一个合适的slab,然后查看该slab是否还有空闲的chunk,如果有则直接存放进去;如果没有则要进行申请

大型网站技术架构——网站架构的伸缩性设计

眉间皱痕 提交于 2020-04-06 22:45:28
首先,所谓网站的伸缩性,指 不需要改变网站的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或者缩小网站的服务处理能力 。在整个互联网行业的发展渐进演化中,最重要的技术就是 服务器集群 ,通过不断地向集群中添加服务器来增强整个集群的处理能力。 一、网站架构的伸缩性设计 1.1 不同功能进行物理分离实现伸缩   (1)纵向分离:将业务处理流程上得不同部分分离部署,实现系统的伸缩性;   (2)横向分离:将不同的业务模块分离部署,实现系统的伸缩性; 1.2 单一功通过集群规模实现伸缩   使用服务器集群,即将相同服务部署在多台服务器上构成一个集群整体对外提供服务。具体来说,集群伸缩性又分为应用服务器集群伸缩性和数据服务器集群伸缩性。这两种集群对于数据状态管理的不同,技术实现也有很大的区别。  It is said that 当一头牛拉不动车的时候,不要去寻找一头更强壮的牛,而是用两头牛来拉车 。 二、应用服务器集群的伸缩性设计 2.1 应用服务器那点必须知道的事儿   (1)应用服务器应该被设计成 无状态 的,即应用服务器不存储请求上下文信息;构建集群后,每次用户的请求都可以发到集群中任意一台服务器上处理,任何一台服务器的处理结果都是相同的;   (2)HTTP本身是一个无状态的连接协议,为了支持客户端与服务器之间的交互,我们就需要通过不同的技术为交互存储状态

memcached

拥有回忆 提交于 2020-04-06 19:43:08
1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的的后台操作,都会消耗很多的服务端资源,所以必须使用缓存来减轻后端服务器的压力. 缓存是将一些常用的数据保存内存或者memcache中,在一定的时间内有人来访问这些数据时,则不再去执行数据库及渲染等操作,而是直接从内存或memcache的缓存中去取得数据,然后返回给用户. 2.Django提供了6种缓存方式 开发调试缓存 内存缓存 文件缓存 数据库缓存 Memcache缓存(使用python-memcached模块) Memcache缓存(使用pylibmc模块) 经常使用的有文件缓存和Mencache缓存 2.1 各种缓存方式的配置文件说明 2.1.1 开发调试(此模式为开发调试使用,实际上不执行任何操作) settings.py文件配置 ? 1 2 3 4 5 6 7 8 9 10 CACHES = { 'default' : { 'BACKEND' : 'django.core.cache.backends.dummy.DummyCache' , # 缓存后台使用的引擎 'TIMEOUT' : 300 , # 缓存超时时间(默认300秒,None表示永不过期,0表示立即过期) 'OPTIONS'

squid缓存服务器————sarg日志

孤者浪人 提交于 2020-04-06 12:44:46
sarg日志 acl从上向下一次匹配,匹配即停止,并执行匹配的动作 所以允许所有或者禁止所有的参数,需要设置在acl的后面 http_access allow all http_access deny all 先了解acl访问控制 src 源地址 dst 目标地址 列表的定义 基于固定ip去进行控制 acl localhos src 192.168.175.136/32 指定某一个网段 acl MYLAN src 192.168.175.0/24 基于目标地址 acl destionhost dst 192.168.175.130/32 设置访问的最大连接数 acl MC20 maxconn 20 支持正则表达式的结构 acl BURL url_regex -i ^rtsp:// ^emule:// acl PURL urlpath_regex -i . mp3$ . rmvb$ 基于访问的时间,周一到周日 acl work time MTWHFAC 08:30-17:30 也可以使用文件进行管理,文件内输入目标web地址 禁止某IP地址主机上网 acl nolink src 192.168.90.9 http_access deny nolink 禁止某网段在某时间段上网 acl nolink src 192.168.1.0/24 acl nowang time MTWHF 9

HTML5 performance API 草案.

北慕城南 提交于 2020-04-06 07:10:00
支持浏览器 : IE9+,Chrome11+,Firefox7+. 宿主对象window.performance. 参考资料: http://msdn.microsoft.com/zh-cn/office/ff975118 参考w3c的标准草案: http://w3c-test.org/webperf/specs/NavigationTiming/ 目前,IE9+和 chrome11+,Firefox7+已经实现了该草案定义的接口. 成员 : .navigation (一个叫做performanceNavigation的对象.) .timing (这玩意是一个被称作performanceTiming的包含了很多成员的对象) 方法 : .toJSON 返回一个 对象,并抄写performance的可枚举成员到其中. 是的,timing,navigation都在上面. JSON.stringify(performance.toJSON()) == JSON.stringify(performance)//true. 悲剧啊.明明是继承来的,msdn非要特殊标一下.. PS: 1. performance,仅能对当前的html文档做检测,所有的对象都和当前文档有关. 如果我们想检测某个图片资源的网络状况,则不行. 比如我们想监控,用户访问我们服务的状况,就只能创建一个iframe,

五分钟学后端技术:如何学习分布式系统和相关技术

倾然丶 夕夏残阳落幕 提交于 2020-04-06 05:21:46
转载自 https://www.cnblogs.com/wetest/p/6806506.html 和 https://www.cnblogs.com/dudu0614/p/8821811.html 什么是分布式系统 分布式这一概念,一直都是后端工程师绕不过去的一个坎,今天,我们就一起来看看到底什么是分布式系统,又有哪些分布式技术世我们需要学习的。 根据百度百科的介绍,分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。 从分布式系统的诞生说起 我们常常会听说,某个互联网应用的服务器端系统多么牛逼,比如QQ、微信、淘宝。那么,一个互联网应用的服务器端系统,到底牛逼在什么地方?为什么海量的用户访问,会让一个服务器端系统变得更复杂?本文就是想从最基本的地方开始,探寻服务器端系统技术的基础概念。 承载量是分布式系统存在的原因 当一个互联网业务获得大众欢迎的时候,最显著碰到的技术问题,就是服务器非常繁忙。当每天有1000万个用户访问你的网站时,无论你使用什么样的服务器硬件,都不可能只用一台机器就承载的了。因此,在互联网程序员解决服务器端问题的时候,必须要考虑如何使用多台服务器,为同一种互联网应用提供服务,这就是所谓

HTML5性能优化

丶灬走出姿态 提交于 2020-04-06 05:19:51
HTML5性能优化 在看完这两章内容之后,我意犹未尽,于是乎从网上搜索关键字“Java Web高性能”,在IBM社区找到两篇不错的文章,而让人更意外的是我发现那两篇文章的内容跟《高性能HTML5》前两章高度相似,不知道是谁抄袭谁的,大家可以鉴别下真伪,下面附上地址。 http://dl2.iteye.com/upload/attachment/0097/9373/b0e69540-e703-3530-81bb-c93de7b850a6.pdf http://www.ibm.com/developerworks/cn/java/j-lo-javawebhiperf1/ http://www.ibm.com/developerworks/cn/java/j-lo-javawebhiperf2/ 前面是读后感,下面是我针对最近几天学习到的提高Web性能进行了篇幅不小的总结,一来为新人提供帮助,二来自己做一下笔记,加深记忆。 性能之前端篇 --减少重绘 在HTML页面完成展现之后,动态改变页面元素或调整CSS样式都会引起浏览器重绘,性能的损耗直接取决于动态改变的范围:如果只是改变一个元素的颜色之类的信息则只会重绘该元素;而如果是增删节点或调整节点位置则会引起其兄弟节点也一并重绘。 减少重绘并不是说不要重绘,而是要注意重绘范围:①改动的DOM元素越深则影响越小,所以尽量深入节点改动

solr研磨之性能调优

独自空忆成欢 提交于 2020-04-06 05:11:26
  作者:战斗民族就是干   转载请注明地址:http://www.cnblogs.com/prayers/p/8982141.html   本篇文章我们来了解一下solr的性能方面的调优,分为Schema优化、索引更新与提交调优、索引合并性能调优、Solr缓存、Solr查询性能优化 Schema优化    1、index=true比index=false在索引时占用更多的内存、索引合并和优化时间更长,索引体积也响应变的更大,如果你不需要针对该域进行检索,可以设置为index=false   2、如果不关心Term在文档中出现的次数对最终文档的影响可以设置omitNorms=true,即取消标准化因此对score的影响。 它能减少磁盘空间的占用并加快索引速度   3、如果你不需要对该域进行高亮,你还可以设置omitPositions=true进一步减小索引体积   4、如果只需要利用倒排索引结构根据指定的Term找到对应的document,不需要计算Term在Document中的出现频率来考虑每个索引文档的权重,那么还可以设置omitTermFreqAndPositions=true即忽略TF计算以及Term在TermVector中的位置信息,这样能够进一步减小索引体积   5、对于stored属性而言,在响应结果集中通过FL参数返回stored=true的域的执行开销很大

Spring Boot Redis 整合 配置

拟墨画扇 提交于 2020-04-06 02:03:38
1.首先导入使用Maven导入jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency> 2.在application.properties配置信息 # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=localhost # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password=123456 # 连接池最大连接数(使用负值表示没有限制) spring.redis.pool.max-active=200 # 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.pool.max-wait=-1 # 连接池中的最大空闲连接 spring