SCPPO(十七):Redis在项目中的使用及性能测试
来源:互联网 发布:java web项目多线程 编辑:程序博客网 时间:2024/06/08 13:32
【前言】
在上篇博文中为大家分享了《SCPPO:C#中Redis封装的类》,有了这个基础后接下来为大家分享下,在我们的项目中我是如何利用Redis来提高性能的滴!
【实现过程及性能对比】
一.现状:项目中有个功能—点击时加载树中数据,特别慢,有待优化!
二.权衡:用过缓存的朋友都知道数据库的数据与缓存同步是个绕不开的问题;于是乎和组长确认下这个加载树中的数据什么时候会变,组长说了五处功能会引起该树中的数据变化;
通过《SCPPO:Redis简介》中使用缓存和不使用缓存的图对比,不难发现,缓存提高的速度是节省从硬盘到加载到内存的时候,当然这个从硬盘加载到内存过程则在数据库和缓存同步的时候执行;
考虑这块儿用不用缓存,只需明确一件事即可,访问树的功能和修改树中五个功能哪个使用的频率高,组长给出答案:访问树的功能频率远高于修改树的;于是乎确认可以用Redis来提高性能。
三.加缓存前的性能测试:
都说这个功能比较慢,但是需要进行专业的测试不能只靠直觉,于是我在局域网中通过IE浏览器中网络捕捉方法来监控实际用了多长时间:
1.前提:
(1)性能性能测试所选功能:现金流-原料产品价格加载时左侧树的数据加载:
(2)数据量(注:测试机器为115—测试服务器)事业部—3784条、企业—4838条
(3)由于这次是做测试,为了保障环境一样,这次对比均在本机起代码,测试变化条件是加缓存与不加缓存的区别!
2.测试过程:
(1)用IE网络监测方法说明:
(2)抓捕的结果中方法分析(总部和事业部一样)—未使用缓存时运行消耗时间(多次测试求平均值):事业部:1.57s 企业:4.40s
四.加缓存过程:
1.点击原料产品价格,树数据加载时,未加入缓存前的写法:
2.点击原料产品价格,树数据加载时,加入缓存前的写法(在此只写总部的加入方法,企业部类似不再赘述):
3.步骤2中调用从数据库同步到Redis方法:
五.加缓存后的性能测试:
和未加缓存之前一样(数据量等其他环境都一致)进行抓捕方法查看监控到的时间(多次测试做平均值),效果如下图,总部:0.67s企业:0.51s
六.将使用缓存和不使用缓存放在一块儿做对比:
(1)将数据放到redis中:总部—1.21s企业:3.92s
(2)将数据从redis中读出:总部-0.50s企业:0.57s
七.Redis使用时注意事项:
(1)若未从缓存中读到数据,或从缓存中读取失败后要从数据库中读取数据并将数据同步到缓存中:
(2)客户端资源有限,在每次创建完Redis客户端使用完后立即释放:
(3)在将数据库数据同步到缓存时先在缓存中移除该key值:
(4)Redis是Key/Value类型数据库,key值是唯一标识,为了防止Key值设置冲突,我创建一个Key值记录表(Redis-Key值记录表);在添加新的Key值时先检索表中无该Key值才能添加并更新该表;
【总结】
1、由于功能还没做完善(少其他功能对数据修改后将数据库数据与Redis中同步)目前做的测试是本机,连接数据库为测试服务器,数据量较少,不过已经看出使用缓存后性能提升;
2、根据Redis的原理可以知道,当数据量越大时相对来说它的效果越明显,在下篇博文《SCPPO:Redis在项目中的使用及性能测试(续)》中,小编将继续为大家分享完善同步功能以及将程序发布到测试和正式服务器上性能的对比,敬请期待。
3、Redis应用场景:
(1)不经常变动,读多写少的功能(原因:redis和数据库中数据同步也需要消耗时间);
(2)数据量大,访问比较频繁的功能。
- SCPPO(十七):Redis在项目中的使用及性能测试
- SCPPO(十八):Redis在项目中的使用及性能测试(续)
- SCPPO(十三):Redis简介
- redis在项目中的使用
- redis在项目中的使用
- 1 redis在spring中的配置及java代码实现 2 redis在java项目中的使用
- SCPPO(二十七):技术盛宴—报表交流会
- redis在java项目中的使用
- Springdata-redis在项目中的使用
- redis在java项目中的使用
- redis在java项目中的使用
- redis在java项目中的使用
- Btrace在性能测试中的使用
- redis及集群性能测试
- SCPPO(三):禅道的使用—项目管理员、开发等人员
- 使用Eclipse在Windows下搭建Redis项目+简单测试
- 使用Eclipse在Windows下搭建Redis项目+简单测试
- SCPPO(七):安全检测及分析神器—AppScan使用教程
- 问题:html控件中sleect的Option()的用法
- SCPPO(十六):C#中Redis封装的类
- hdu1997 汉诺塔VII(深度优先搜索)
- oracle 使用spool导出数据到文件
- 使用Maven编译项目遇到——“maven编码gbk的不可映射字符”解决办法
- SCPPO(十七):Redis在项目中的使用及性能测试
- 【Tips】Java类似C的memset的方法
- iOS--NSURLSession请求总结
- XStream使用总结
- 多线段几何图形—— 简单几何图形(多边形三角形化)
- C#入门6.13——字符串的替换
- 【UNIX网络编程】五种I/O模型,阻塞非阻塞同步异步问题详解
- SCPPO(十八):Redis在项目中的使用及性能测试(续)
- Java I/O系统之Writer