塘沽| 墨玉| 镇坪| 天池| 罗山| 江安| 鹰潭| 阎良| 黄埔| 于田| 沿河| 莆田| 忻城| 蒲江| 梅里斯| 防城港| 郎溪| 焉耆| 巩义| 大邑| 洪洞| 布拖| 昂昂溪| 襄阳| 惠州| 平罗| 江津| 腾冲| 武冈| 雅安| 天等| 青铜峡| 襄汾| 临夏市| 南宫| 积石山| 北流| 滑县| 庄浪| 天长| 连山| 集美| 宁夏| 乐山| 奇台| 富川| 柳城| 孟连| 遵化| 博鳌| 绛县| 新疆| 康县| 广水| 扎兰屯| 元坝| 溧阳| 安义| 宜阳| 湘乡| 东宁| 涿州| 石拐| 蒲江| 龙里| 盘锦| 比如| 高平| 青河| 四方台| 突泉| 纳雍| 贡觉| 西固| 武邑| 英德| 利川| 青岛| 青龙| 南阳| 贺州| 基隆| 巴林右旗| 望城| 牟定| 宣威| 磐石| 科尔沁右翼前旗| 宾阳| 永州| 罗山| 元谋| 横县| 黔江| 玉山| 浙江| 中宁| 阜康| 大龙山镇| 瓯海| 措美| 苏家屯| 上蔡| 景谷| 普兰| 屏南| 青浦| 宁都| 龙川| 庄河| 唐海| 白云矿| 庄浪| 桑日| 道孚| 宜川| 塔什库尔干| 乌当| 肃南| 萧县| 丹凤| 黄山区| 大关| 大竹| 扎兰屯| 南山| 鄂尔多斯| 西吉| 郧西| 金塔| 陇川| 康乐| 临西| 墨脱| 阿城| 安康| 凌云| 新晃| 莒县| 清河门| 封丘| 巩留| 甘棠镇| 九江县| 瑞昌| 连城| 新平| 高明| 门源| 通化市| 启东| 蠡县| 花垣| 大冶| 龙胜| 东阿| 塔城| 博鳌| 鄂伦春自治旗| 石河子| 宜君| 永德| 寿光| 古冶| 温泉| 丽水| 雷山| 普安| 宁晋| 湟源| 白云矿| 连州| 曲江| 宾县| 九江县| 东乡| 宁远| 会宁| 景泰| 海盐| 武定| 中卫| 柳城| 沙圪堵| 乌苏| 澳门| 延安| 峡江| 察隅| 新巴尔虎左旗| 沙洋| 噶尔| 龙岩| 盐边| 保山| 下陆| 威宁| 关岭| 阳江| 龙江| 拜城| 柳城| 西平| 曲沃| 略阳| 临清| 喀什| 丰南| 礼泉| 邵阳县| 金门| 田阳| 蚌埠| 岗巴| 彭州| 潮州| 武强| 常宁| 沙洋| 带岭| 商水| 深州| 建水| 昌平| 达拉特旗| 西藏| 澜沧| 新余| 巨野| 同仁| 宜春| 金门| 高邑| 海阳| 双峰| 和政| 旺苍| 上林| 丰镇| 长治县| 于都| 内丘| 克拉玛依| 重庆| 三原| 富宁| 同德| 澜沧| 宿豫| 台中市| 江安| 杭州| 林甸| 大同市| 陵水| 黔西| 东山| 临西| 沙河| 畹町| 松江| 华坪| 平果| 镇安|

套利彩票网:

2018-11-14 13:14 来源:豫青网

  套利彩票网:

    当天早上,他坐车准备到火车东站买火车票回家,可是还没到火车东站,钱就被他花完了。  大人应多给孩子耐心、宽容和信任空间,虽然看着孩子犯错而不马上纠正,很考验父母的承受力,但我们要相信孩子有自我纠错的能力。

看到女孩没有生命危险,郭鹏抱起岸边的衣服赶去上班。前日,在山东庙街道铝镁社区二楼的活动室里,朱景芳跟着孙纯月艺术团排练一遍舞蹈,跳着轻快的舞步,脸上带着笑容,我就是长得老点,我今年45岁。

  虽然眼角已有皱纹,但听说眼前这位女士已经75岁了,记者着实吃了一惊。有了免费WiFi,就可以随时在朋友圈晒照片了,着实给力。

  一个月前,两人同居了。  对午餐不满意,游客当然有权表达不满,即便旅游合同上并没有明确标明午餐标准。

  根据意见要求,深入挖掘历史文化、地域特色文化、民族民俗文化、传统农耕文化等,实施中国传统工艺振兴计划,提升传统工艺产品品质和旅游产品文化含量。

  报警的是女子小红(化名),称自己前男友,正和现男友在出租房里准备干架。

  经依法审查查明:曾洪君与被害人柴正军(男,殁年35岁)、柴史英系亲戚关系。被救起的孩子最大的10岁,最小的5岁。

  良好的车内环境,一方面能够给后面的乘客带来舒适的乘坐体验,另一方面,也可以降低司机本人打扫车辆的时间与工作量,让车辆更好更快速地服务于城市的客流高峰,毕竟公交车是为社会大众服务的,也是流动的城市名片。

  急救人员到场后发现孩子已经死亡。记者问他这是否就是武大对此事的回应。

    民警告诉记者,经向周围群众了解,得知女孩宁宁(化名),今年才虚4岁,是安徽省人。

    涉旅场所免费WiFi将全覆盖  意见提出,推进服务智能化。

    在刘华英的外甥女李女士看来,舅舅已经离世,舅妈还能一如既往地悉心照顾外公,让她很感动。  围绕长江做文章,绝不是城市基础设施的建设任务,绝不是城市功能品质的单一提升,而是武汉发展战略空间的重大优化调整,是百年大计、武汉大业。

  

  套利彩票网:

 
责编:
开发/数据库

  |  手机版

收藏网站

投稿QQ:1745232315

IT专家网,汇聚专业声音 解析IT潮流 IT专家网,汇聚专业声音 解析IT潮流

网络

专家视点在现场环球瞭望
IT专家网 > 开发/数据库

如何为数据库减负?这几招你要学会!

作者:西部数码出处:论坛2018-11-14 16:55
在重要旅游活动场所设置第三卫生间,做到主要旅游景区、旅游线路以及客运列车、车站等场所厕所数量充足、干净卫生、实用免费、管理有效。

如何为数据库减负?今天小编就要为大家介绍一下。

一、为什么要设计缓存?

其实高并发应对的解决方案不是互联网独创的,计算机先祖们很早就对类似的场景做了方案。比如《计算机组成原理》这样提到的CPU缓存概念:它是一种高速缓存,容量比内存小但是速度却快很多,这种缓存的出现主要是为了解决CPU运算速度远大于内存读写速度,甚至达到千万倍的问题。

传统的CPU通过fsb直连内存的方式显然就会因为内存访问的等待,导致CPU吞吐量下降,内存成为性能瓶颈。同时又由于内存访问的热点数据集中性,所以需要在CPU与内存之间做一层临时的存储器作为高速缓存。

随着系统复杂性的提升,这种高速缓存和内存之间的速度进一步拉开,由于技术难度和成本等原因,所以有了更大的二级、三级缓存。根据读取顺序,绝大多数的请求首先落在一级缓存上,其次二级…

故而应用于SOA甚至微服务的场景,内存相当于存储业务数据的持久化数据库,其吞吐量肯定是远远小于缓存的,而对于java程序来讲,本地的JVM缓存优于集中式的Redis缓存。

关系型数据库操作方便、易于维护且访问数据灵活,但是随着数据量的增加,其检索、更新的效率会越来越低。所以在高并发低延迟要求复杂的场景,要给数据库减负,减少其压力。

二、给数据库减负

1.缓存分布式,做多级缓存

读请求时写缓存

写缓存时一级一级写,先写本地缓存,再写集中式缓存。具体些缓存的方法可以有很多种,但是需要注意几项原则:

不要复制粘贴,避免重复代码;

切忌和业务耦合太紧,不利于后期维护;

开发初期刚刚上线阶段,为了排查问题,常常会给缓存设置开关,但是开关设置多了则会同时升高系统的复杂度,需要结合一套统一配置管理系统,例如京东物流就有一套叫做UCC。

综上所述,高耦合带来的痛,弥补的代价是很大的,所以可以借鉴Spring cache来实现,实现也比较简单,使用时一个注解就搞定了。

写缓存失败了怎么办?应该先写缓存还是数据库呢?

既然是缓存的设计,那么策略一定是保证最终一致性,那么我们只需要采用异步消息来补偿就好了。

大部分缓存应用的场景是读写比差异很大的,读远大于写,在这种场景下,只需要以数据库为主,先写数据库,再写缓存就好了。

最后补充一点,数据库出现异常时,不要一股脑的catch RuntimeException,而是把具体关心的异常往外抛,然后进行有针对性的异常处理。

关于其他性能方面

缓存设计都是占用越少越好,内存资源昂贵以及太大不好维护都驱使我们这样设计。所以要尽可能减少缓存不必要的数据,有的同学图省事把整个对象序列化存储。另外,序列化与反序列化也是消耗性能的。

2.vs各种缓存同步方案

缓存同步方案有很多种,在考虑一致性、数据库访问压力、实时性等方面做权衡。总的来说有以下几种方式:

懒加载式

如上段提到的方式,读时顺便加载,为了更新缓存数据,需要过期缓存。

优点:简单直接。

缺点:

会造成一次缓存不命中;

这样当用户并发很大时,恰好缓存中无数据,数据库承担瞬时流量过大会造成风险。

懒加载式太简单了,没有自动加载,异步刷新等机制,为了弥补其缺陷,请参见接下来的两种方法:

补充式

可以在缓存时,把过期时间等信息写到一个异步队列里,后台起个线程池定期扫描这个队列,在快过期时主动reload缓存,使得数据会一直保持在缓存中,如果缓存没有也没有必要去数据库查询了。常见的处理方式有使用binlog加工成消息供增量处理。

优点:刷新缓存变为异步的任务,对数据库的压力瞬间由于任务队列的介入而降低了,削平并发的波峰。

缺点:消息一旦积压会造成同步延迟,引入复杂度。

定时加载式

这就需要有个异步线程池定期把数据库的数据刷到集中式缓存,如Redis里。

优点:保证所有数据最小时间差同步到缓存中,延迟很低。

缺点:如补充式,需要一个任务调度框架,复杂度提升,且要保证任务的顺序。如果递进一步还想加载到本地缓存,就得本地应用自己起线程抓取,方案维护成本高。可以考虑使用mq或者其他异步任务调度框架。

ps:为了防止队列过大调度出现问题,处理完的数据要尽快结转,且要对积压数据以及写入情况做监控。

3.防止缓存穿透

缓存穿透是指查询的key压根不存在,从而缓存查询不到而查询了数据库。若是这样的key恰好并发请求很大,那么就会对数据库造成不必要的压力。怎么解决呢?

把所有存在的key都存到另外一个存储的Set集合里,查询时可以先查询key是否存在;

干脆简单一些,给查询不到的key也加一个标识空值的Value,这样就不会去查询数据库了,比如场景为查询省市区街道对应的移动营业厅,若是某街道确实没有移动营业厅,key规则不变,value可以设置为”0″等无意义的字符。当然此种方案要保证缓存集群的高可用;

这些Key可能不是永远不存在,所以需要根据业务场景来设置过期时间。

4.热点缓存与缓存淘汰策略

有一些场景,需要只保持一部分的热点缓存,不需要全量缓存,比如热卖的商品信息,购买某类商品的热门商圈信息等等。

综合来讲,缓存过期的策略有以下三种:

FIFO(First In,First Out)

即先进先出,淘汰最早进来的缓存数据,一个标准的队列。

以队列为基本数据结构,从队首进入新数据,从队尾淘汰。

LRU(Least RecentlyUsed)

即最近最少使用,淘汰最近不使用的缓存数据。如果数据最近被访问过,则不淘汰。

和FIFO不同的是,需要对链表做基本模型,读写的时间复杂度是O(1),写入新数据进入头部,链表满了数据从尾部淘汰;

最近时间被访问的数据移动到头部,实现算法有很多,如hashmap+双向链表等等;

问题在于若是偶发性某些key被最近频繁访问,而非常态,则数据受到污染。

LFU(Least Frequently used)

即最近使用次数最少的数据被淘汰,注意和LRU的区别在于LRU的淘汰规则是基于访问时间。

LFU中的每个数据块都有一个引用计数,数据块按照引用计数排序,若是恰好具有相同引用计数的数据块则按照时间排序;

因为新加入的数据访问次数为1,所以插入到队列尾部;

队列中的数据被新访问后,引用计数增加,队列重新排序;

当需要淘汰数据时,将已经排序的列表最后的数据块删除;

有很明显问题是若短时间内被频繁访问多次,比如访问异常或者循环没有控制住,而后很长时间未使用,则此数据会因为频率高而被错误的保留下来,没有被淘汰。尤其对于新来的数据,由于其起始的次数是1,所以即便被正常使用也会因为比不过老的数据而被淘汰。所以维基百科说纯粹的LFU算法不经常单独使用而是组合在其他策略中使用。

相关文章

关键词:数据库,为数据库减负,多级缓存

责任编辑:林音子

网警备案
龙文区 泗洪 高峰岭 烟锅巴 龙发
八道沟镇 乾龙乡 大张村委会 塘坳乡 广工五山校区