在现代web应用程序中,应用程序的性能密切关系到可伸缩性以及用户体验。随着互联网应用程序的增长,人们越来越依赖高效的缓存系统来保障数据的快速读取以及更新。
Redis是一个开源的基于内存的键值存储系统,它不仅支持缓存数据,还支持许多高级功能,如队列,发布/订阅模型等。但是,Redis在保障数据快速读写的同时,也要承担 服务器 负载的风险。所以,如何通过灵活的数据控制来有效地管理负载,是一个重要的技巧。
Redis的状态脚本是一种非常灵活、高效而且强大的工具,可以帮助用户实现精准的负载控制。状态脚本是一个原子化操作,能够在Redis中执行一个或多个命令,不可被打断,任何其他操作都会等待它执行完。这种原子性使得状态脚本在并发使用时非常有效。
状态脚本有两种类型:Lua脚本和Redis事务。Lua脚本是一种编写在Redis服务器上的脚本语言,可以确定性地控制各种操作,从而实现更细粒度的缓存方案。它运行在Redis服务器上,也可以在客户端上进行编辑。Redis事务是一种多命令的操作,可以更加精确地控制事务执行的顺序,以及在某些错误情况下执行的回滚操作。
下面我们通过一个实际案例来展示如何使用Redis状态脚本来做到精准控制负载。
案例:Redis状态脚本处理高并发订单
假设我们在开发一个电商平台,其中涉及到高并发下的订单处理。每个订单都是一个复杂的事务,它包含了很多子订单以及每个子订单的商品数量。我们的目标是,当一个客户下一个订单时,我们需要通过Redis状态脚本在一个交易队列中记录下订单信息,并防止同一个用户下重复订单。
步骤1:创建Redis连接

我们需要在Node.js中建立一个Redis连接。可以使用“redis”模块来完成:
var redis = require('redis');var client = redis.createClient();
步骤2:编写状态脚本
接下来,我们需要编写Lua脚本来处理订单的创建和防止重复订单的问题。以下是示例代码:
local exists = redis.call("exists",KeyS[1]..ARGV[1])if exists == 1 thenreturn nilelseredis.call("hset", KEYS[1], ARGV[1], ARGV[2])return 1end
在脚本中,“exists”命令用于检查一个键是否存在。如果键存在,那么订单已经被创建了,返回NULL。如果不存在,那么就用“hset”命令将订单信息存储到hash表中。
步骤3:执行状态脚本
现在我们已经有了Lua脚本,可以开始向Redis服务器发送命令了。以下是示例代码:
var key = "transactions:" + userId;var args = [ key, orderId, Json.stringify(orderDetls) ];client.eval(script, 1, args, function(err, result) {if (err) {console.error("Redis error: " + err);} else if (result == null) {console.log("Duplicate order detected");} else {console.log("Order processed: " + result);}});
在代码中,我们首先定义了一个键和一组参数,然后使用“eval”命令来调用Lua脚本。如果订单已经存在,那么脚本将返回NULL,我们就可以检测到这种情况。如果订单被成功创建,脚本将返回“1”,我们就可以得到订单号。
总结
使用Redis状态脚本可以帮助我们更好地控制负载,并在高并发下保持数据的可靠性。Lua脚本和Redis事务是非常灵活的,可以控制各种操作,而且由于它们具有原子性,所以在并发使用时非常高效。在实际项目开发中,我们可以根据具体业务需求,采用Lua脚本、Redis事务等不同的状态脚本来实现高效、灵活的缓存方案。
香港服务器首选树叶云,2H2G首月10元开通。树叶云(www.IDC.Net)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
请问魔兽世界战士PVP天赋是武器要好些还是狂暴要好些?(PVP)3.13后哈
其实我觉得武器天赋要好点,但是狂暴还是要加5点!PK的话 铭文也要选择好!其实很有用的 ,我觉得如果你是选择武器的话建议你把 压制雕文 血性狂暴雕文 冲锋雕文(减少冷却的) 3样最好都加上。 呵呵。 。 其实PK的话 主要看自己的技术,我就常常被朋友虑。 多输几盘 技术就起来了。 。 呵呵。 。 。
天龙里逍遥为什么那么强大?
1.强大不是很强大吧 一般玩天龙的都不怎么认为 PK 就是 定来定去然后把你杀死 也就是被称为最无耻的行为(定身) 2 . 刷图 因为他的45级技能 和 咆哮一样 可以引来很多怪 而且 是不断的 出技能 这个刷藏经阁 都是必要 3(可能无关你的问题啊) 因为在很多人眼里 逍遥的技能 是在手掌中发出 飞剑 认为很帅 在帅的基础上所以喜欢上了逍遥 所以呢 才支持逍遥4.武当也不是好惹的门派 就看武当打逍遥 谁玩得好 谁花钱多了 5 . 我在论坛上总看到 本来没有钱的人玩逍遥 在游戏里装B逍遥的定 让那些没钱 血少的 逍遥 PK 有了点把握 (本人参考了很多网上论坛)
请问草图大师的优势在什么地方?
SketchUp辅助建筑设用途: SketchUp提供了一种实质上可以视为“计算机草图”的手段,它吸收了“手绘草图”加“工作模型”两种传统辅助设计手段的特点,切实的使用数字技术辅助方案构思,而不仅仅是把计算机作为表现工具。 具体表现在以下四个方面, (1) 环境模拟 可以利用SketchUp快速创建三维建筑环境模型,并在其上推敲设计方案。 利用灵活的视图控制和分析工具从多个角度动态观察环境空间特征,从而触发构思创作灵感;其次,其丰富的环境素材图库,如人、树、车等,均按对象的实际尺寸建模,保证了配景素材能成为环境尺度的准确参照物,所示的配景对该建筑体量的推敲很有帮助。 另外SketchUp还可以设定特定城市经纬度和时间下日照阴影效果,还可以形成阴影的演示动画。 建筑师可以借助SketchUp这些特性随心所欲的在相对准确而真实的模拟环境中进行设计创作构思,决策将更加合理、科学,方案构思更具说服力。 (2) 空间分析 利用SketchUp建模后,在虚拟场景中可以从任意角度浏览建筑外观、内部空间以及建筑细部,分析各种空间节点。 可以自定义虚拟漫游路线,以身临其境的方式观察设计成果的展示,从而获得更逼真生动的空间体验。 另外,SketchUp能根据需要方便快捷的生成各种空间分析剖面透视图,甚至可以生成空间剖切动画,表达建筑空间概念以及营造过程。 这无疑提供了一种方便快捷而又相对准确的空间分析手段。 (3) 形体构思 SketchUp建模操作简单直接,易于修改,完全迎合设计师推敲方案的工作思路,尊重他们的工作习惯。 SketchUp配备了视点实时变换功能,可从多角度观察对象,重要的场景可存贮为“页面”,方便以后比较抉择。 还可以以各种比例放大缩小建筑设计的细部形体以推敲细节,这是传统工作模型无法比拟的。 (4) 成果表达 SketchUp直接面向设计构思过程,可以在任何阶段生成各种三维表现成果。 SketchUp提供了高效而低成本的设计表现技术。 针对方案设计各阶段的表现需要,提供了不同表现成果,所示分别模拟了在方案设计的初期、中期和后期的成果表现。 SketchUp辅助建筑设计应用技术特点 SketchUp又称“草图设计大师”,从产品研发之初已定位为“为了探索意念以及合成信息所专门设计的一种媒介”,由于SketchUp直接面向设计过程而不是渲染成品,与设计师用手工绘制构思草图的过程很相似,因此SketchUp的目标是设计师做设计而不是绘图员作图。 SketchUp辅助建筑设计思想最重要的一点是试图使建筑师在设计的整个过程均可使用该软件,从设计构思到表现的各个环节,它克服了当前存在的设计与计算机表现脱节的弊病(设计与效果图制作分为两个行业工种),让建筑师回归设计与表现连贯进行的传统工作模式上来,具体表现在以下几个方面。 (1) 顺应建筑师的工作习惯,软件操作如使用传统纸笔 SketchUp界面简洁,易学易用。 它集成了简洁紧凑却功能强大的命令系统,只需反复使用为数不多的命令即可实现强大的辅助构思与表现功能,整个过程轻松流畅。 初学者通过简单学习就能够快速、动态而实时的在三维造型、材质、光影等多方面进行设计构思、调整和研究。 SketchUp为了顺应建筑师的工作习惯,在建模过程中有意使光标以铅笔的形象示人,实际的软件操作有如在纸上画草图、勾方案,正如@Last Software公司描述的:“它是建筑师的电子铅笔,辅助设计的利器。 ”与传统手绘图缺乏精准相比,SketchUp拥有智能导引系统,“灵活快速”和“精准”这两方面兼顾良好。 其独特的“参考锁定功能”,就像三维的丁字尺,而模型中的线与面则取代以往制图用的三角尺与模板。 由此可见,传统铅笔草图的优雅自如,现代数字科技的速度、严谨和多向选择,在这里得到了很好的结合。 建筑设计是一个从模糊到清晰,从整体到局部的过程。 建筑师习惯一开始就撇开形体具体尺寸而整体思考,随着思路的推进逐步添加细节。 SketchUp可以在粗略的作图以及精准的确定尺寸两种工作方式之间随时切换。 所提供的修改工具可以方便地解决整个设计过程中出现的各种修改。 这对方案的推敲深化尤为重要。 (2) 设计与表现一体化,所见即为所得建筑设计的启端可能是个想法,而不一定是具体的事物,建筑师的努力是把这种抽象的思维转换为直接可视化的具像图形。 SketchUp在探索如何促进设计与表现的有效互动,以及设计与表现一体化等方面所作的努力,体现在以下几个方面:基于三维的创作环境:设计对象在实际生活中以三维的形象示人,因此基于三维的互动创作环境无疑是设计师的首选,SketchUp的整个建模操作就是在三维场景中进行的。 实时渲染的场景,所见即为所得:SketchUp把场景的关联材质、组件和图像副本合成到文件中。 在异地设计交流时,收发SketchUp文件的任何一方都能看到完全相同的屏幕画面,避免了因各种因素而出现的误差。 同时在操作过程中,SketchUp实时渲染场景,因此场景显示的效果与最后渲染输出的图片效果完全一致,无需单独渲染图形文件,这可使设计与表现的一致性更加紧密。 强大的实时表现工具:如基于视图操作的照相机工具,能够从不同角度和显示比例浏览建筑形体和空间效果;又如SketchUp有多种模型显示模式:线框模式、消隐线模式、着色模式、X光透视模式等,这些模式特点鲜明,是根据辅助建筑设计的不同阶段和习惯的侧重点不同而设置的。 (3) 辅助设计功能强大,为设计工作开辟坦途 SketchUp的软件开发者对建筑设计有深刻的理解:“建筑设计本身是一种模糊性设计,前期并不需要严格的定性定量,而且,美学问题是无法用定量的方法来描述的”,SketchUp的设计开发正向这一理念靠拢,主要体现在以下几个方面:特殊的几何体引擎:SketchUp取得专利的几何体引擎是特别为辅助设计构思开发的,具有相当的延展性和灵活性,这种几何体是由线在三维空间中互相连接,组合成面的架构,而表面则是由这些线围合而成,互相连接的线与面保持着对周边几何体的识别,因此与其它简单的CAD系统相比更加智能,同时也比参数设计系统更为灵活。 材质的推敲:SketchUp的材质纹理和颜色的变换功能与其它CAD系统差别很大,主要体现在它能够将形体与材质的关系调整可视化、实时化,犹如设计者在现场直接更换材质,效果非常直观。 光影分析:SketchUp具备强大的光影分析功能,可以模拟建筑在特定时间和地域下的日照阴影效果,实时互动的分析阴影。 该投影特性使设计者更准确的把握模型尺度,控制造型和立面的光影效果。 另外还可用于评估一幢建筑的各项日照技术指标。 剖切空间及虚拟漫游:剖透视不但可表现横向上下层或同一平面的空间结构,还可以直观准确表现纵深空间关系。 SketchUp能按建筑师的要求方便快捷的生成各种空间分析剖透视图,让你看到模型的内部空间,并且可以在模型内部设计创作。 另外可以把剖切面导出到矢量图软件中,制作图表,图释,表现图等,或者作为施工图制作的基础素材。 SketchUp提供了虚拟漫游功能,可自定义人的视高以及在建筑空间中的行走路线,将建筑未来的建成状况以身临其境的方式体验。 页面的使:SketchUp提出了“页面”的概念,页面的形式类似一般软件界面中的页框。 通过页框标签的选取,能在同一视口中进行多个页面视图的比较,这对设计对象的多角度分析评价相当有利,页面的使用特点就像滤镜一样,可以根据设置过滤图像的显示属性。 每一个页面可自定义需要保存的属性,如阴影、视点,显示模式等。 因此可以明确每个页面表现的侧重点,通过切换页面,可有效地在设计过程中推敲方案各方面特点,有利成果的展示。 (4) 分阶段的多元化表现手法,最大限度的满足设计表达需要 SketchUp可以针对方案设计各阶段的表现特点,生成各种形式的三维表现成品,忠于设计对象实景效果的表达还能结合其他软件,其表现形式会更加丰富。 因此建筑师能在设计全程根据表达需要分阶段表现设计对象,进而向业主提供相应的表现成果。 使用SketchUp全程表现设计对象并非否定当前常用的计算机表现形式(如AutoCAD绘制的工程图。 3DMax和PhotoShop绘制的表现图),而是一定程度上与之兼容互补。 首先从分工的角度看,使用SketchUp应更偏重设计构思过程表现,对于后期严谨的工程制图和仿真效果图则应借助其他软件;其次,从软件兼容性角度看,SketchUp的模型数据能转换为AutoCAD、3DMax、Revit Building、ArchiCAD等的文件格式,因此在SketchUp中的成果完全可与其他软件共享。 随着Google公司对SketchUp的收购,结合Google Earth在发展虚拟地球这对未来城市规划和场景模拟与现实对比起到了标准规范的作用,利用SketchUp直接把方案导入到Google Earth中去,和卫星地图比对,利用Google Earth上强大的信息数据使我们的方案更完善。 随着 Google Earth为我国提供越来越多的地理信息,很多方案创作表达方式都打破了传统的行为模式,更多的关注到与之相互作用空间信息。
发表评论