精华内容
下载资源
问答
  • Elasticsearch最佳实践之使用场景

    万次阅读 多人点赞 2018-10-08 20:31:30
    本文围绕Elasticsearch的核心特征:搜索与分析,探讨其常见的业务场景:ELK日志系统、数据聚合分析、业务内搜索,以及集群建设的选择。

      最开始使用Elasticsearch是两年多前,在一家创业公司负责数据系统的建设,当时也有写一些博文来分享使用方法。然而回过头去想,觉得当时的很多认知不够深入,或者说是当时的业务场景下没有遇到更多的问题。很多时候,一个技术或工具,只有在更复杂的业务场景和更大的数据量下经历实践,才能有更深的体会与认识。
      过去一段时间,有幸在项目中继续实践Elasticsearch,从设计、研发到调优,逐渐对Elasticsearch有了些新的认知与心得,因此计划撰写一个专栏来较系统的整理一下。也许,一段时间后,又会觉得这些认识不够深入,奈何这就是认知的过程。
      对于Elasticsearch的实践,主要分为两块:应用层面的研发和集群的运维,本专栏侧重于前者。计划撰写5篇左右:

    • 使用场景,探讨几种常见的业务场景,以及集群建设的选择
    • 核心概念与原理,以图文形式整理出核心的概念与原理
    • Index与Shard设计,分享如何结合业务来设计Index和合理分配Shard
    • 项目应用,分享Elasticsearch在笔者项目中的实践
    • 性能调优,分享数据写入与查询过程的性能调优方法

      需要首先指出的是,本专栏所使用的Elasticsearch版本是5.5

    正文

      作为专栏的第一篇,本文将尝试从两个角度来探讨一下当前Elasticsearch的使用场景。一个是常见的业务场景,目的在于让大家能够感性的认识到Elasticsearch可以做什么。在遇到类似业务场景时,可以想到Elasticsearch,用其形成解决方案或者作为评估对象之一。另一个是集群建设方面,探讨的问题是:自己搭建Elasticsearch集群还是使用云服务。

    常见的业务场景

      下图是官方的定位,Elasticsearch的核心特征是数据搜索分析。与这两个特征相关的需求都可以考虑使用Elasticsearch,其本身是单纯的,复杂的是具体业务。在不同的业务中,Elasticsearch扮演着不同的角色,也有着不同的实践和优化方法。归纳起来,目前主要有三类常见的业务场景,笔者将逐一分析。

    • ELK日志系统
    • 数据聚合分析
    • 业务内搜索

    ELK日志系统

      大概很多互联网的朋友接触Elasticsearch都是从ELK开始的,用来解决Log的集中式管理问题。这样的需求来自于互联网的快速发展,出现越来越多的集群部署与分布式系统,导致服务产生的Log信息分散在不同的机器上,无法有效的检索与统计。以下面的应用服务集群为例,为了做集中式Log管理,需要有一个Agent负责从每台机器收集信息,送到一个存储系统集中存储(该系统需要具备快速的文本搜索功能),然后通过一个可视化UI来查看和分析信息。

      ELK以全家桶的形式为这一问题提供了解决方案,Logstash负责收集、解析数据,Elasticsearch负责存储、检索数据,Kibana提供可视化功能。笔者曾在创业公司做数据分析(四)ELK日志系统一文介绍过相关的使用方法。

      当然,这并不意味着ELK必须捆绑使用。一方面,Logstash是基于JRuby编写,在部署和性能上的表现并不能满足所有需求,所以很多人会将其替换为自己编写的数据采集工具。同时Elastic官方也有提供Beats相关轻量级组件,可与Logstash组合使用。另一方面,也有很多人在Kibana的基础上做二次开发,来增强相应的查询功能,集成开源的告警功能等。但是Elasticsearch始终是核心组件,很少有人将其替换掉,源于其强大的搜索功能恰好满足Log的检索需求。有一点建议是,ELK本身已经很好使用,除非有强烈的业务需求,否则没有必要刻意去替换,先考虑用对、用好它。

    数据聚合分析

      数据的维度统计查询,是当前数据业务的一个主要需求。其配合相应的可视化UI可以帮助用户直观的获取信息、做出决策等。比如,针对网络流量数据,查看上班时间段,员工访问视频类网站的流量占比。
      这样的统计查询基本可以归纳为:按照某些条件过滤 --> 针对某个维度分组 --> 统计数据(Sum/Count)。在海量数据下,如何实现快速查询?(亿级以上数据量,秒级查询)

      首先,诸如MySQL这类关系型数据基本是无法胜任的,其无法突破单机的存储和处理能力限制,而引入分片又会带来应用层面的复杂度。其次,面对这样的海量数据,通常有两个思路:一个是根据需求,制定相应的预计算方案,通过ETL来提前算好相关的统计数据,但是不能很好的应对未知的维度数据。另一个就是不做预计算,Elasticsearch便是其中一个选择,其他方案还有Presto/Spark SQL这样基于内存的Map/Reduce计算框架等。
      Elasticsearch强大的搜索与分析聚合能力使其可以很好的适用于这一业务场景。以笔者当前的项目来看,百亿级数据可以做到秒级查询。另外,Elasticsearch的一些特性,诸如alias等可以很好的帮助我们完成一些业务逻辑。
      当然,任何事情都不是完美的,选择Elasticsearch得有两个前提:第一,受限于其工作机制,聚合结果可能存在较小的偏差的;第二,数据需要规划好,保持扁平结构,不能有JOIN的需求。

    业务内搜索

      现如今,搜索功能几乎是互联网产品的标配,用于帮助用户快速在产品中找到所需的信息。笔者将这样一类需求定义为业务内搜索,其特性是在业务范围内提供搜索功能。比如下图中的食谱类App,只需要支持对菜谱、食材这些业务内容进行搜索,而无需关注其他信息。

      基于Elasticsearch,可以快速构建这样的搜索功能。通常是采用DB与Elasticsearch配合的方案,DB负责数据存储,Elasticsearch负责关键词检索。Elasticsearch可以在多维度上检索与关键词相关的数据,并为每个匹配结果生成一个相关度分数。当服务收到搜索请求时,首先根据关键词到Elasticsearch中进行检索,然后根据检索结果去DB中查询信息,并在应用层进行数据整理和排序。
      搜索精度的调优是重点,也是最难的一部分。比如,如何建立业务内容的词库,如何进行合理分词建立索引,如何调整搜索权重等等。笔者曾经在做搜书系统(打造私人搜书系统之系统设计)时有过相关的简单实践,抽空会继续将其整理出来。

    集群建设的选择

      伴随着云服务的发展,Elasticsearch集群的建设出现了以下三种选择:

    • 在自有的服务器上构建Elasticsearch集群,自己运维
    • 在云厂商提供的EC2机器上构建Elasticsearch集群,自己运维
    • 使用云厂商提供的Elasticsearch云服务构建Elasticsearch集群

      第一种选择以大公司为主,多以平台的形式为整个公司提供服务;后面两种主要面向中小型企业,多以产品为导向,即每个产品维护自己的集群。对于第二种选择,通常是需要构建稳定运行的Elasticsearch集群,由专业的运维人员负责管理。而第三种选择,通常是企业需要构建稳定运行的Elasticsearch集群,并希望将更多的人力、物力放到业务层面而非集群运维上面。随着Elasticsearch云服务的成熟,越来越多处于第二种选择的企业开始考虑或正在迁移。
      Elasticsearch云服务可帮助企业更好的做集群扩展,解放运维,把关注点放到业务层面。以AWS Elasticsearch云服务为例,它可以帮助用户实现没有downtime的扩展、版本升级等。目前,提供相关服务的有AWS、阿里云、Elastic官方等等。当然,任何事情都有两面性,在方便的同时也会带来不方便,比如无法触及到机器导致一些调优方案无法实施。
      其实,究竟应该如何选择,更多是由一个企业所处的行业、企业战略以及历史背景来决定。


      不同的业务场景,加上不同的集群构建方法,就会导致在使用Elasticsearch时的侧重点不同,相关设计与优化的方法也会有所不同。笔者当前项目是采用AWS Elasticsearch云服务构建,针对大数据聚合分析的业务场景,所以,在后面的博文中,会侧重于这方面。




    (全文完,本文地址:https://blog.csdn.net/zwgdft/article/details/82917861
    版权声明:本人拒绝不规范转载,所有转载需征得本人同意,并且不得更改文字与图片内容。大家相互尊重,谢谢!)

    Bruce
    2018/10/08 晚


    展开全文
  • 注:论文发表于《包装工程》杂志2017年第6期“工业设计”栏目。虽然是17年才发表,但这篇论文其实是很早...摘 要:目的 研究产品交互设计中场景理论。方法 通过阐述交互设计各阶段中客观场景、目标场景、实际场景...

    注:论文发表于《包装工程》杂志2017年第6期“工业设计”栏目。虽然是17年才发表,但这篇论文其实是很早之前写的,所以用的案例比较老。

     

    ____________________________________

    作者:胡伟峰;王玉梅;汤进;李世国

    (江南大学,无锡, 214122)

    摘 要:目的 研究产品交互设计中场景理论。方法 通过阐述交互设计各阶段中客观场景、目标场景、实际场景的含义及其应用。结论 指出了场景理论对交互设计的价值与意义,并提出了动态思维:场景设计是一个循环设计流程;主次思维:抓主要场景,统筹次要场景;拆解思维:复杂的大场景由众多小场景组成三大基于场景理论的交互设计思维。

    关键词:用户场景;交互设计;

    中图分类号:TB472 文献标识码:A

    “场景(scenarios) ”一词常见应用于戏剧领域中,指在一定的时间、空间内发生的一定的任务行动或生活画面。【1】在交互设计领域,基于场景设计(scenario-based design) 的思想最早由Carroll提出,强调将设计工作的焦点从定义系统的操作转变到描述什么人将使用该系统去完成其任务。【2】交互设计改变了设计中以物为对象的传统,直接把人类的行为作为设计对【3】人使用产品必须有一定的行为,这种行为是在一定场景下进行的, 行为的完成需要一定技术的支持,因而人、行为、场景和技术4个要素构成了所谓的交互系统。【4】场景是交互系统中极其重要的要素,研究在一定场景下的用户行为,对用户行为逻辑针对相应的场景进行规划和设计,是交互设计的重要目标。

     

    1 交互设计各阶段中场景的种类及其应用

    场景描述了关于操作者、操作者及其环境的背景信息、操作者的目的或目标、一系列活动和事件等内容,【5】这里的操作者即指的是产品的使用用户。基于场景理论的交互设计,是指在交互设计整个过程中使用场景描述的方法来具体地描述用户对产品的使用情况。如图1,交互设计各阶段可分为不同的用户场景,包括早期用户需求分析阶段的客观场景,产品交互设计阶段的目标场景以及场景验证和评估阶段的实际应用场景。


    图1 用户场景种类及其设计流程

    Fig1 User scene type and its design process

     

    1.1 客观场景

    设计师在交互设计的开始阶段,需要对用户现状及其需求进行分析。客观场景便是通过对用户现状的调查研究,从中获取有效信息进行总结和归纳出来的。客观场景的构建,最常见的调研方法是:用户现场观察法。在观察的同时,设计师可以对观察中遇到的问题进行总结和分析,通过观察后结合用户访谈等方式来补充分析用户的需求。

    比如在“快的打车”等打车类APP未投入市场之前,用户的典型客观场景可以描述为:公司职员王先生晚上6:00下班(操作者及其背景信息),需要打车回家(操作者的目标),在公司门口招揽出租车,可是一直招揽不到出租车,最终走了两公里路到附近的商场才打到了车,而且发现商场附近待揽客的出租车非常多,王先生觉得非常郁闷,为什么资源不匹配呢(操作者的一些列活动、感受等)。

     


     

    上述对用户“打车”这一客观场景的描述,是建立在对一定量“打车”用户调研的基础之上描述出的典型场景。客观场景是为了描述目标用户和客观状况而总结的,强调的不仅仅是问题点,还包括产品的目标用户描述、用户客观行为流程、用户情感表现、问题点等。设计师可以通过客观场景中分析出用户的需求,包括行为流程上的体验问题及其对应的设计机会点等。

    1.2 目标场景

    在产品交互设计阶段,需要设计师构建目标场景。目标场景,是建立在客观场景之上,设计师所期望达成的能解决用户客观场景中相关需求的用户场景。在客观场景的基础之上,设计师可以结合相关交互理论和设计准则,以及通过可用性和场景实验等方法,对客观场景进行分析和研究,进而设计和规范出能够满足用户需求的目标场景。目标场景从表达形式上可以细分为行为场景和交互场景。

    行为场景,是指在客观场景研究的基础之上,对用户的行为流程进行分析和描述的场景,常用场景故事版等表现工具进行描述;如图2,设计师勾勒出的“快的打车”投入市场后的目标行为场景故事版。结合场景故事版,用户的典型目标场景可以被描述为:公司职员王先生晚上6:00下班,需要打车回家。王先生在5:50时,打开“快的打车”APP可以看到公司附近有很多出租车,王先生输入出发地和目的地确认打车。30秒后出租车司机李师傅接单,王先生可以在手机上清晰的看到李师傅的车辆位置,10分钟后王先生成功上车。到达目的地后,王先生用手机在线支付了打车费,开心的回到家陪女儿吃晚饭。

    图 2 “快的打车”目标场景故事版

    Fig2 Story version of “Quick taxi ”target scene

    交互场景则是指产品在被用户使用过程中的场景,常用信息流程图、低保真页面流程图、使用流程故事版等工具进行描述。【6】以“快的打车”为例,用户在移动场景下不方便打字,所以设计了语音输入和快速搜索来确定家和公司的位置;移动场景下容易出错,所以设计了信息确认机制;在等待应答的过程中,可视化告知用户APP通知的车辆数和距离,并且在打车成功后告知车辆距离和时间,消除用户等待的焦虑,将信息可视化。

     

     

    图 3 “快的打车”交互场景

     

    Fig3 Interaction scene of “Quick taxi ”

    所设计的目标场景需要针对用户在客观场景中反应的需求提出针对性的解决方案。通过目标场景设计,设计师可以勾画出未来用户和产品之间理想的行为交互模型。

    1.3 实际场景

    在实际产品交互设计阶段,目标场景会有很多,不同设计师设计出的目标场景也不同。如何验证和评估目标场景的优劣,就需要引入实际场景。实际场景是指在设计师不干预的情况下,提供目标场景中设计好的相关产品或模型给用户,由用户在实际的参与式体验过程中测试目标场景,进行产品的测试及适用性评价【7】。通过这个评价过程,设计师可以进一步观察用户和产品之间存在的其他关系,并为产品最终设计方案提供场景参考。【8】

    2 用户场景对交互设计的价值与意义

    在产品交互设计中,设计师设计的对象是用户的行为。用户行为是动态的,建立在一定场景上的用户行为才有意义。因此在对用户行为进行设计时,需要设计师意识到研究和应用基于场景设计的价值和意义。

    2.1 更准确地把握产品和用户之间的关系及其用户需求

    以用户为中心的产品设计,【9】强调需求来源于用户,需求转化出的设计方案最终服务于用户。设计师可以通过观察用户和产品的互动行为,通过客观场景描述,直观的展现出用户和产品之间的互动关系及其问题。这些关系和问题是用户需求的直观体现,客观场景描述了目标用户、用户客观行为流程、用户情感表现、问题点等信息,而且场景具有故事性,是通过一段段的故事片段描述构成的,因此场景描述相对于其他用户研究总结出来的客观数据、需求文档等更生动和直观。直观而且形象的客观场景描述,便于设计师和其他产品设计人员更准确和细致的把握客观用户需求。

     

    2.2 提升交互设计方向的合理性和产品满意度

    在产品交互设计阶段,通过对目标场景的设计和描绘,设计师可以基于场景进行交互设计,通过场景故事版、用户体验旅程图、信息流程图、低保真页面流程图等工具细化用户在客观场景中所反映出来的需求并给出解决方案。因此基于场景的交互设计,一方面更加全面的分析和解决用户的需求,避免单一分析用户行为或者产品功能造成的对用户需求的遗漏。同时,通过实际场景中对目标用户场景的验证和评估,提升了产品交互设计方向的合理性;另一方面,设计师设计的目标场景将用户的情感表现等需求直观化和故事化,使得设计师所设计的产品设计点更容易被用户感受,提升产品的满意度。

    3 基于用户场景的产品交互设计的设计思维

    3.1 动态思维:场景设计是一个循环设计流程

     

    图4 交互设计中场景设计的动态思维

     

    Fig4Dynamic thinking of scene design in interactive design

    用户场景不是固定不变的。【10】如图4,在交互设计各阶段中,客观场景是目标场景的设计基础,实际场景对目标场景进行验证和评估。同时,被验证的实际场景又是下一次交互设计的设计对象,上一次的实际场景会转化为下一次的客观场景。因为在实际场景验证和评估中,总会遇到不符合用户预期,目标场景中没有考虑到的用户需求的问题。需要指出的是,掌握交互设计中场景设计的动态思维,并不是指这个设计流程是无限循环的,场景设计是一个持续优化和快速迭代的过程,设计师及其相关产品负责人需要讨论出每个迭代阶段具有共识性的目标场景和实际场景的评估标准。面对既定的迭代阶段目标,在整个设计循环流程中,一旦满足相关目标场景及其实际场景评估标准,现有迭代阶段的交互设计便可终止。

     

    3.2 主次思维:抓主要场景,统筹次要场景

    在客观场景分析和目标场景设计过程中。分析场景时,需要区分主要场景和次要场景。在交互设计各阶段不同场景中,必有而且只有一种场景居于支配的地位,起着规定或影响其他场景的作用,这种场景就是主要场景,其他场景则是次要场景。在分析和解决、处理用户需求时,既要看到主要场景的重要性,善于抓住重点,又要看到次要场景的客观影响,学会全面地看待用户需求,做到抓主要场景,统筹次要场景的统一。主次思维,把握主要场景,同时兼顾次要场景,可以有效地保证基于场景分析的交互设计的产品设计的准确性。

    3.3 拆解思维:复杂的大场景由众多小场景组成

    用户场景有大有小,用户的客观大场景总是由众多可以层级细分的小场景组成。在客观场景分析过程中,大场景相对宏观,可以总览用户的宏观需求。而小场景更加聚焦,可以分析出用户更加具体需求,同时,小场景更加具象,能够落实到用户的具体行为流程和对产品的细节体验,便于设计师有针对性且具象的针对客观小场景进行目标场景设计。比如用户用“快的打车”叫出租车的场景就是大场景,这个大场景中包含用户叫车场景,司机接单场景,用户付款场景等等小场景。用户叫车场景还可以细分为用户当前位置定位场景、用户输入目的地地址场景、用户立即叫车或预约叫车场景等。越细分的客观场景,越有利于设计师针对性的设计出有效的目标场景,同时也更有利于在实际场景中进行交互模型评估和场景验证。所以,在交互设计各阶段应用场景理论进行设计时,需要具备拆解思维,将复杂的大场景拆分为众多可设计的小场景,再由众多的目标小场景,组成最终的目标大场景,进行实际场景验证,输出最终的交互设计成果。

    4 结语

    现在产品和用户体验日趋复杂,传统的物理逻辑层面的设计已经不能满足用户的需要,要关注“事”,【11】场景作为交互系统中极其重要的要素,研究交互设计中的场景理论,从产品交互设计各阶段入手,将场景理论深入到交互设计的各个阶段,是对现有的交互设计实践的一次深化。同时,掌握交互设计中运用场景理论时的循环思维、主次思维和拆解思维,可以有效地把握产品和用户之间的关系及其用户需求,提升交互设计方向的合理性和用户对产品的满意度。研究交互设计中的场景理论,具有非常重要的价值和意义。

     

    参考文献

     

    [1] 沈贻炜. 影视剧创作[M].浙江:浙江大学出版社, 2012.

    SHEN Yiwei. Film and television drama creation[M]. Zhejiang: Zhejiang University press,2012

    [2]Carroll J M. Five reasons for scenario-based design[J]. Interacting with Computers, 2000(13):43–60.

    [3]辛向阳. 交互设计:从物理逻辑到行为逻辑[J]. 装饰, 2015(01):58-62.

    XIN Xiangyang.Interaction Design: From Logic of Things to Logic of Behaviors [J].2015.1:58-62.

    [4]李世国, 费钎. 和谐视野中的产品交互设计[J]. 包装工程, 2009(01):137-140.

    LI Shiguo, FEI Qian. Product Interaction Design in the Perspetive of Harmony [J].Packaging Engineering, 2009(01):137-140

    [5]Go K. , Carroll J. M. , Imamiya A. . Surveying scenario based approaches in sys tem design[J] . IPSJSIG Notes, HI878, 2000:43-48.

    [6]赵婉茹. 浅谈场景故事在用户体验设计中的应用[J]. 设计, 2014(09):174-175.

    ZHAO Wanru.The Application of Scenario Stories in User Experience Design [J].Design, 2014(09):174-175.

    [7] 诺曼·唐纳德 A.设计心理学[M].北京:中信出版社,2010.

    NORMAN D A.The Design of Everyday Things[M].Beijing:China CITIC Press,2010.

    [8]DDF·UXPA中国. 用户体验百家谈[M] .北京:电子工业出版社, 2014.

    DDF·UXPA China. User experience a hundred talk[M] .Beijing:Electronics Industry Press,2014

    [9]罗仕鉴, 胡一. 服务设计驱动下的模式创新[J]. 包装工程, 2015(12).1-4.

    LUO Shijian,HU Yi.Model Innovation Driven by Service Design[J]. Packaging Engineering, 2015(12).1-4.

    [10]COOPER A.软件观念革命——交互设计精髓[M].北京:电子工业出版社,2012.

    COOPER A. Software Concept Revolution: the Essence of Interaction Design[M]. Beijing: Publishing House of Electronics Industry,2012.

    [11] 安娃. 交互设计思维在服务体验中的应用[J]. 包装工程, 2015, 02期(02):5-8.

    AN Wa. Collaborative Design of Product Interaction Design System[J].Packaging Engineering,2015,02(02):5-8.

    转载于:https://www.cnblogs.com/xjmnet/p/9377274.html

    展开全文
  • Redis-使用场景

    万次阅读 2018-06-06 18:23:40
    Redis的7个应用场景 Redis是一个key-value存储...一个产品使用场景肯定是需要根据产品的特性,先列举一下Redis的特点: 读写性能优异 持久化 数据类型丰富 单线程 数据自动过期 发布订阅 分布式 这里我...

    Redis是一个key-value存储系统,现在在各种系统中的使用越来越多,大部分情况下是因为其高性能的特性,被当做缓存使用,这里介绍下Redis经常遇到的使用场景。

     

    Redis特性

    一个产品的使用场景肯定是需要根据产品的特性,先列举一下Redis的特点:

    读写性能优异

    持久化

    数据类型丰富

    单线程

    数据自动过期

    发布订阅

    分布式

    这里我们通过几个场景,不同维度说下Redis的应用。

    一、高性能适合当做缓存

    缓存是Redis最常见的应用场景,之所有这么使用,主要是因为Redis读写性能优异。而且逐渐有取代memcached,成为首选服务端缓存的组件。而且,Redis内部是支持事务的,在使用时候能有效保证数据的一致性。

    作为缓存使用时,一般有两种方式保存数据:

    1、读取前,先去读Redis,如果没有数据,读取数据库,将数据拉入Redis。

    2、插入数据时,同时写入Redis。

    方案一:实施起来简单,但是有两个需要注意的地方:

    1、避免缓存击穿。(数据库没有就需要命中的数据,导致Redis一直没有数据,而一直命中数据库。)

    使用redis的 setnx方法构建一个互斥锁,只有一个请求线程获得锁去更新数据,其他请求等待,之后去请求最新缓存。

    2、数据的实时性相对会差一点。

    方案二:数据实时性强,但是开发时不便于统一处理。

    当然,两种方式根据实际情况来适用。如:方案一适用于对于数据实时性要求不是特别高的场景。方案二适用于字典表、数据量不大的数据存储。

    二、丰富的数据格式性能更高,应用场景丰富

    Redis相比其他缓存,有一个非常大的优势,就是支持多种数据类型。

    string——适合最简单的k-v存储,类似于memcached的存储结构,短信验证码,配置信息等,就用这种类型来存储。

    hash——一般key为ID或者唯一标示,value对应的就是详情了。如商品详情,个人信息详情,新闻详情等。

    list——因为list是有序的,比较适合存储一些有序且数据相对固定的数据。如省市区表、字典表等。因为list是有序的,适合根据写入的时间来排序,如:最新的***,消息队列等。

    set——可以简单的理解为ID-List的模式,如微博中一个人有哪些好友,set最牛的地方在于,可以对两个set提供交集、并集、差集操作。例如:查找两个人共同的好友等。

    Sorted Set——是set的增强版本,增加了一个score参数,自动会根据score的值进行排序。比较适合类似于top 10等不根据插入的时间来排序的数据。

    如上所述,虽然Redis不像关系数据库那么复杂的数据结构,但是,也能适合很多场景,比一般的缓存数据结构要多。了解每种数据结构适合的业务场景,不仅有利于提升开发效率,也能有效利用Redis的性能。

    三、单线程可以作为分布式锁

    谈到Redis和Memcached 的区别,大家更多的是谈到数据结构和持久化这两个特性,其实还有一个比较大的区别就是:

    Redis 是单线程,多路复用方式提高处理效率。

    Memcached 是多线程的,通过CPU线程切换来提高处理效率。

    所以Redis单线程的这个特性,其实也是很重要的应用场景,最常用的就是分布式锁。

    应对高并发的系统,都是用多服务器部署,每个技术框架针对数据锁都有很好的处理方式,如 .net 的lock,java 的synchronized,都能通过锁住某个对象来应对线程导致的数据污染问题。但是毕竟,只能控制本服务器的线程,分布式部署以后数据污染问题,就比较难处理了。Redis的单线程这个特性,就非常符合这个需求,伪代码如下:

    //产生锁
    while lock!=1 
        //过期时间是为了避免死锁 
        now = int(time.time()) 
        lock_timeout = now + LOCK_TIMEOUT + 1
        lock = redis_client.setnx(lock_key, lock_timeout)
        //真正要处理的业务doing()
        //释放锁
        now = int(time.time())
        if now < lock_timeout: 
           redis_client.delete(lock_key)

    以上是一个只说明流程的伪代码,其实整体的逻辑是很简单的,只要考虑到死锁时的情况,就比较好处理了。Redis作为分布式锁,因为其性能的优势,不会成为瓶颈,一般会产生瓶颈的是真正的业务处理内容,还是尽量缩小锁的范围来确保系统性能。

    四、自动过期能有效提升开发效率

    Redis针对数据都可以设置过期时间,这个特点也是大家应用比较多的,过期的数据清理无需使用方去关注,所以开发效率也比较高,当然,性能也比较高。最常见的就是:短信验证码、具有时间性的商品展示等。无需像数据库还要去查时间进行对比。因为使用比较简单,就不赘述了。

    五、分布式和持久化有效应对海量数据和高并发

    Redis初期的版本官方只是支持单机或者简单的主从,大多应用则都是自己去开发集群的中间件,但是随着应用越来越广泛,用户关于分布式的呼声越来越高,所以Redis 3.0版本时候官方加入了分布式的支持,主要是两个方面:

    Redis服务器主从热备,确保系统稳定性

    Redis分片应对海量数据和高并发

    而且Redis虽然是一个内存缓存,数据存在内存,但是Redis支持多种方式将数据持久化,写入硬盘,所有,Redis数据的稳定性也是非常有保障的,结合Redis的集群方案,有的系统已经将Redis当做一种NoSql数据存储来适用。

     

    示例:秒杀和Redis的结合

    秒杀是现在互联网系统中常见的营销模式,作为开发者,其实最不愿意这样的活动,因为非技术人员无法理解到其中的技术难度,导致在资源协调上总是有些偏差。秒杀其实经常会出现的问题包括:

    并发太高导致程序阻塞。

    库存无法有效控制,出现超卖的情况。

    其实解决这些问题基本就两个方案:

    数据尽量缓存,阻断用户和数据库的直接交互。

    通过锁来控制避免超卖现象。

    现在说明一下,如果现在做一个秒杀,那么,Redis应该如何结合进行使用?

    提前预热数据,放入Redis

    商品列表放入Redis List

    商品的详情数据 Redis hash保存,设置过期时间

    商品的库存数据Redis sorted set保存

    用户的地址信息Redis set保存

    订单产生扣库存通过Redis制造分布式锁,库存同步扣除

    订单产生后发货的数据,产生Redis list,通过消息队列处理

    秒杀结束后,再把Redis数据和数据库进行同步

    以上是一个简略的秒杀系统和Redis结合的方案,当然实际可能还会引入http缓存,或者将消息对接用MQ代替等方案,也会出现业务遗漏的情况,这个只是希望能抛砖引玉。

    每个技术都有属于自己的应用场景,只有对技术的特点有一定清晰的认识,才能更好的利用技术,发挥其最大的优势。

     

    展开全文
  • 测试用例设计方法——场景法定义应用场景步骤实例分析 定义 场景法:通过运用场景来对系统的功能点或业务流程的描述,从而提高测试效果的一种方法。用例场景来测试需求是指模拟特定场景边界发生的事情,通过事件来...

    用例设计法——场景法[模拟用户使用场景]

    若文章存在不理解或者错误的地方,欢迎留言指出

    定义

    场景法:通过运用场景来对系统的功能点或业务流程的描述,从而提高测试效果的一种方法。用例场景来测试需求是指模拟特定场景边界发生的事情,通过事件来触发某个动作的发生,观察事件的最终结果,从而用来发现需求中存在的问题。

    场景法是基于软件业务流程,去模拟用户在实际使用过程的场景,针对用户在实际使用过程中会遇到的各种情况,去判断软件的实际结果与需求是否相符*(个人理解)

    场景法一般包含了基本流和备选流两种:
    基本流:很顺利的操作了一遍系统的流程,不存在错误操作(实例图的打大黑线,很顺利)
    备选流:不顺利的操作系统,过程中存在错误的操作(实例图中的彩色线,备选流存在重新回到基本流的情况,也存在直接结束用例的情况)

    实例图:
    在这里插入图片描述

    应用场景

    1、从定义不难看出,场景法主要是针对系统的业务流程来进行测试的
    2、通常会先使用场景法对主要业务流程进行测试,当主要业务流程没问题后,再对每个功能模块进行更细节的测试

    步骤

    1、根据需求分析基本流和备选流
    2、根据基本流和备选流生成不同场景
    3、 对每一个场景生成相应的测试用例
    4. 对生成的所有测试用例重新复审,去掉多余的测试用例,测试用例确定后,对每一个测试用例确定测试数据值

    实例分析

    我们还是以QQ为例进行分析,这里举QQ注册后登录的场景:
    1、根据需求可分析出基本流和备选流如下:

    基本流:打开QQ——注册账号——登录账号——显示QQ界面
    备选流1:注册密码格式错误
    备选流2:注册手机号输入错误
    备选流3:登录账号不存在
    备选流4:登录密码输入错误

    2、根据流生成场景:

    场景
    场景1 :正常登录基本流
    场景2 :密码格式错误基本流,备选流1
    场景3 :手机号格式错误基本流,备选流2
    场景4:账号不存在基本流,备选流3
    场景5:登录密码错误基本流, 备选流4

    3、对每个场景生成测试用例
    通过从确定执行用例场景所需的数据元素入手构建矩阵。然后,对于每个场景,至少要确定包含执行场景所需的适当条件的测试用例。例如,在下面的矩阵中,V(有效)用于表明这个条件必须是 VALID(有效的)才可执行基本流,而 I(无效)用于表明这种条件下将激活所需备选流。下表中使用的“n/a”(不适用)表明这个条件不适用于测试用例。

    用例ID场景注册密码手机号登录账号登录密码预期结果
    1场景1 :正常登录VVVV登录成功
    2场景2 :密码输入错误In/an/an/a密码格式错误
    3场景3 :手机号格式错误n/aIn/an/a手机号格式错误
    4场景4:账号不存在VVIn/a账号不存在
    5场景5:登录密码错误VVVI登录密码错误

    4、对每一个测试用例确定测试数据值

    用例ID场景注册密码手机号登录账号登录密码预期结果
    1场景1 :正常登录qwe123451380441122110249qwe12345登录成功
    2场景2 :密码输入错误123n/an/an/a密码格式错误
    3场景3 :手机号格式错误n/a123n/an/a手机号格式错误
    4场景4:账号不存在qwe12345138044112211n/a账号不存在
    5场景5:登录密码错误qwe123451380441122110249qwe登录密码错误

    注意:我这里只是简单的举下例子哈,其实也可以进一步补充一些断网的场景,异地登录的场景。个人感觉场景法在测试用例的设计中使用最广吧,不过这里建议用思维导图的形式去写,这样感觉效率上来讲更高一些,然后再通过思维导图转化成用例。

    展开全文
  • redis使用场景及案例

    万次阅读 多人点赞 2019-08-19 14:49:30
    最近在一个篮球社区项目,其中redis的使用场景还挺多的,于是结合项目总结一下redis的使用场景 一、缓存 项目场景:用户登录或注册时的验证码存储,用户名 set Code:1:code 1232 EX 100 NX OK get Code...
  • 微信公众号: 大师兄2016 ...这两者都能达到同样的效果,但是基于它们各自的特点,使用场景会有一些区分. computed拥有缓存属性,只有当依赖的数据发生变化时,关联的数据才会变化,适用于计算或者格式化数据的...
  • 一、使用场景和业务需求描述

    千次阅读 2019-09-24 05:04:42
     请问下 ,你们的产品很全,根据我们的业务 会使用到你们那个软件产品 给我的回答:  主要要用到的就是资源服务,用于获取设备资源,还有视频应用,获取预览url。  历史版本里的1.2.0  http使用的是36100,...
  • MongoDB和Elasticsearch的各使用场景对比

    千次阅读 2020-09-20 12:30:17
    mongo使用c++, es使用Java开发 写入延迟 低 高 es的写入延迟默认1s, 可配置, 但是要牺牲一些东西 全文索引支持度 一般 非常好 es本来就是搜索引擎, 这个没啥可比性 有无Schem.
  • redis 数据类型与使用场景

    千次阅读 2019-02-21 11:39:08
    incr / decr使用场景 :  1. 把某件商品数量放 jedis.set("product", ""+100);  2. 秒杀购买这件商品 Long incr = jedis.decr("product"); 减1后, 然后获得产品余量>0代表还没售完;  然后把当前用户购买...
  • Elasticsearch的使用场景深入详解

    千次阅读 2018-10-08 15:32:25
    了解了ES的使用场景,ES的研究、使用、推广才更有价值和意义。 1、场景—:使用Elasticsearch作为主要的后端 传统项目中,搜索引擎是部署在成熟的数据存储的顶部,以提供快速且相关的搜索能力。这是因为早期的搜索...
  • Java简历——怎么更亮眼

    千次阅读 2020-02-13 16:08:27
    不会的不 举个简单的例子:一般情况下,HR会问...比如:Redis的支持的数据类型及应用场景、Redis是单线程为什么还这么快、读写分离模型、Redis和memcached的区别、Redis内存淘汰机制等等。 使用STAR法则 Situat...
  • 文章出自:安卓进阶学习指南 主要贡献者: Cloud9527 Alex_赵 Struggle shixinzhang ...成员内部类的使用场景 静态内部类的使用场景 匿名内部类的使用场景 局部内部类 内存泄漏 总结 ...
  • SpringBoot整合RabbitMQ之 典型应用场景实战一

    万次阅读 多人点赞 2018-10-09 15:08:04
    特别是在一些典型的应用场景以及业务模块中具有重要的作用,比如业务服务模块解耦、异步通信、高并发限流、超时业务、数据延迟处理等。 其中课程的学习链接地址:https://edu.csdn.net/course/detail/9314 ...
  • Kafka面试题

    万次阅读 2019-06-07 07:40:03
    Kafka是现在流行的消息中间件,在大数据开发面试...使用场景如何? Kafka中的ISR、AR又代表什么?ISR的伸缩又指什么 Kafka中的HW、LEO、LSO、LW等分别代表什么? Kafka中是怎么体现消息顺序性的? ...
  • 缓存使用场景的理解

    千次阅读 2016-12-23 16:23:13
    我们先来看一个互联网的应用场景,一个电子商务网站里面有N多的商品,而商品是不会频繁更改而读取频率又是很高的数据,如果按普通的业务架构的话,就是程序直连DB,但是DB的QPS和TPS因为ACID的限制,在虚拟容器下(例...
  • 存储过程五种使用场景比较

    千次阅读 2018-01-19 01:40:56
    存储过程五种使用场景比较 1. 使用 JDBC API 直接调用存储过程 Java Database Connectivity (JDBC) API 是 J2EE 的一部分,是 Java 语言访问关系数据库的基于标准的首要机制,提供了对数据库访问和缓存管理的直接...
  • 支付及场景介绍

    万次阅读 2018-03-23 16:18:56
    ...   手机支付涵盖多种支付方式,主要包括公众号支付、APP支付、扫码支付、刷卡支付等,...刷卡支付 : 是指用户展示微信钱包内的“刷卡条码/二维码”给商户系统扫描后直接完成支付,适用于线下面对面收银的场景, ...
  • 另外,这些语言并不能够 100% 地应用于复杂的 JavaScript 使用场景比如监听 DOM 变化 。用 C++ 来整个的 HTML 程序是毫无意义的因为 C++ 并不是为此而设计的。大多数情况下,工程师用使用 C++ 或 Rust 来编写 ...
  • Spark SQL和Hive使用场景

    千次阅读 2016-12-12 15:50:40
    而databricks推出的产品显然是公有(企业)云性质的大数据统一处理平台( Databricks makes Spark easy through a cloud-based integrated workspace. )(不是广告),所以SQL层的很多特性,它们要么不需要(权限...
  • [数据库] 一文搞懂case when所有使用场景

    万次阅读 多人点赞 2019-02-01 16:44:44
    前几天,为了给产品分析当前用户数据结构,sql的时候使用到了case when,今天来总结一下casewhen的使用方法,以此为戒,感觉的不好请拍砖,感觉的还可以,给哥们点个赞,或者回复一下,让我意识到我不是一个人...
  • dubbo和mq的使用场景

    千次阅读 2017-08-31 19:19:33
    dubbo 1,rpc的分布式集群支持:负载均衡是...这样更新数据库响应客户端会变慢,可以使用mq消息队列的消费者进程中获取数据来进行异步数据,由于消息对垒的服务处理速度远快于数据库, 因此响应延迟能得到有效改善
  • 各个流行语言优缺点对比及其适用场景

    万次阅读 多人点赞 2019-02-02 14:52:21
    文章目录主流编程语言排行榜PythonPHPGolangJavaCC++C#Js 主流编程语言排行榜 以下是TIOBE发布的2019年1月份的编程语言排行榜,我只截取了...排名使用著名的搜索引擎(诸如Google、MSN、Yahoo、Wikipedia、YouTube...
  • 【时序数据库】应用场景使用

    万次阅读 2018-05-10 11:46:36
    到了4月基于PostgreSQL打造的时序数据库TimeScaleDB也开源了,而早在2016年7月,百度云在其天工物联网平台上发布了国内首个多租户的分布式时序数据库产品TSDB,成为支持其发展制造,交通,能源,智慧城市等产业领域...
  • 用户场景描述

    千次阅读 2019-03-07 06:27:57
    根据存在的场景,确定场景优先级,市场定位,需求分析,竞争壁垒,得出阶段产品定位,总结产品问题。 场景分析方法 1、PSPS模型(人物角色Persona、场景Scenario、痛点Pain、解决方案Solution)用于挖掘场景需求 ...
  • mongoDB主要在什么场景使用

    千次阅读 2019-06-17 19:57:35
    我们在项目中使用它来存储电商产品详情页的评论信息(评论id,商品id,标题,评分,内容,评论人信息,评论的发布时间,评论标签组)并且为了提高可用性和高并发用了3台服务器做了mongodb的副本集,其中一台作为主...
  • 了解了ES的使用场景,ES的研究、使用、推广才更有价值和意义。1、场景—:使用Elasticsearch作为主要的后端传统项目中,搜索引擎是部署在成熟的数据存储的顶部,以提供快速且相关的搜索能力。这是因为早期的搜索引擎...
  • 业务场景测试

    千次阅读 2018-12-27 10:18:38
    将系统的不同模块进行有效串接,继而模拟真实用户的实际使用情况对系统进行运营,促使系统能够充分满足用户所要求的功能的测试过程其实就是业务测试。 简而言之,就是多个功能组合测试。 2 为什么要做业务测试 从...
  • 2021【软件测试】面试题合集大放送

    万次阅读 多人点赞 2019-09-10 18:04:37
    磁盘I/O: 磁盘主要用于存取数据,因此当说到IO操作的时候,就会存在两种相对应的操作:存数据的时候对应的是IO操作,取数据的时候对应的是是读IO操作,一般使用% Disk Time(磁盘用于读写操作所占用的时间百分比...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 203,055
精华内容 81,222
关键字:

产品使用场景怎么写