秒杀项目之细节随笔记录————

摘要:
秒杀项目具有很多的重要知识点,本片博客记录在解决秒杀项目中产生的各种问题时,遇到的一些小知识点和问题以及解决方案。后面的参数,并匹配正则if(r!

秒杀项目具有很多的重要知识点,本片博客记录在解决秒杀项目中产生的各种问题时,遇到的一些小知识点和问题以及解决方案。

一、ssm框架中一些注解

1.@Component

根据项目中的使用和网上的一些贴子,我个人总结以下内容

@Component,就是把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>

如果在项目中遇到需要把一个类实例化注入到spring容器中,但是此类不在一些扫描的包下,比如controller、service,就可以加上次注解,进行注入

秒杀项目之细节随笔记录————第1张

此处是秒杀项目中,通过消息中间件获取消息的类GetMessageUtils,它不在被扫描的包下,加上此注解,就可注入spring容器中

  2.@ControllerAdvice

次注解作用的类是全局捕获异常类,只要作用在@RequestMapping上,所有的异常都会被捕获

项目中使用了异常捕获返回json给前端的方法,后台报异常,同时返回给前端,本项目中使用了自定义异常,包含各种失败信息,而使用次注解就能捕获所有异常类

秒杀项目之细节随笔记录————第2张

二、html页面中获取请求参数的方法

可以获取当前url中的参数,通过名称即可获取

function GetQueryString(name){

var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);//search,查询?后面的参数,并匹配正则
if(r!=null)return unescape(r[2]); return null;
}
项目使用前后端分离,页面在跳转时带有参数,就可以使用该方法,在获取是调用该方法,直接通过名称课可以获取  
秒杀项目之细节随笔记录————第3张

秒杀项目之细节随笔记录————第4张

三、倒计时插件countdown的使用

秒杀项目中会用到倒计时插件,在这里记录一下我使用的倒计时插件以及使用

引入js:    <script src="http://cdn.bootcss.com/jquery.countdown/2.1.0/jquery.countdown.min.js"></script>

秒杀项目之细节随笔记录————第5张

代码中使用:

seckillBox.countdown(beginTime, function (event) {    -----------此处beginTime为活动开始时间,从后台获取服务器时间
//时间格式
var format = event.strftime('秒杀倒计时: %D天 %H时 %M分 %S秒 ');   ---------------此处初始化倒计时时间格式
seckillBox.html(format);                    ------------------此处为把此时间格式添加到页面中
}).on('finish.countdown', function () {              -------------------此处为倒计时插件的倒计时结束后执行方法 ,倒计时结束执行此方法
seckillStart(itemPromo.id,itemPromo.itemId,token,username);  -----------此处为倒计时结束后执行的方法,可自己根据业务需求编写方法
});

四、获取商品详情使用guava cache作为一级缓存,redis作为二级缓存

在获取商品详情页面中,由于用户数量多,刷新页面频繁,导致访问量大,我们采取redis作为缓存,但是即使如此,访问量也是很大,所以采用guava cache作为一级缓存,缓存到本地,用户访问详情页面,先从本地获取,如果没有,在从redis缓存中获取,如果还没有,则访问数据库,点击此链接获取guava具体使用方法:https://www.cnblogs.com/blogofbin/p/11703685.html

具体代码:(该方法在service层中实现)

public ItemPromoDetail getItemById(int itemId) {
ItemPromoDetail promo = null;
//因为活动未开始时,用户会一直刷新详情页,所以加一个缓存
//Guava Cache 做一级缓存,用redis做二级缓存
//商品详情和库存分别存放
Object obj = localCacheService.getFromCommonCache("ITEMID:" + itemId);
if (obj == null) {
//从redis中获取
if (jedisClient.exists("ITEMID:"+ itemId )){
String jsonObj = jedisClient.get("ITEMID:"+itemId);
promo = JsonUtils.jsonToPojo(jsonObj, ItemPromoDetail.class);
}else {
promo = promoMapper.getItemById(itemId);
//将库存也存放如redis中
int stockNum = promo.getStock();
jedisClient.set("ITEM_STOCK:"+itemId,stockNum+"");
//获取商品时,根据库存可以设置大闸的数量
jedisClient.set("ITEM_DAZHA:"+itemId,(stockNum*5)+"");
String json = JsonUtils.objectToJson(promo);
jedisClient.set("ITEMID:"+itemId, json);
localCacheService.setCommonCache("ITEMID:"+itemId,promo);
}
}else {
promo = (ItemPromoDetail) obj;
}
promo.setStock(Integer.valueOf(jedisClient.get("ITEM_STOCK:"+itemId)));
return promo;
}

免责声明:文章转载自《秒杀项目之细节随笔记录————》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇转:HTML获取屏幕、浏览器、页面的高度宽度常见宏任务与微任务下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

MIPS学习笔记(一)

本章涉及MIPS变量声明、数据输入和输出、地址获取、分支跳转语句,基本上对应于任何高级语言的最基本操作。该信息的确切形式因汇编程序而异。在MIPS程序集中,标签是后跟冒号的符号名称。)syscall程序的结尾与C类似,可以调用exit函数来停止程序的执行。停止MIPS程序的一种方法是使用类似于在C中调用exit的方法。MIPS中有一个移动指令,它将一个寄存器...

【转载】SecureCRT配色推荐和永久设置

2.配置文件夹和其他颜色选项==“全局选项==”终端==“外观==”ANSI颜色单击第二行中的第五个色块以修改文件夹颜色:对第二个色块执行相同的操作以修改压缩包和jar包的颜色:如果设置后文件夹和其他的颜色无效,您可以对第二行中设置背景色和字体颜色的颜色块执行相同的操作!...

unity, 设置帧率上限

使用unity制作演示,并移除所有昂贵的特效。在真正的机器上运行仍然会导致问题。最大显示帧速率为30。默认情况下,IOS设备上统一的原始帧速率限制为30。应用targetFrameRate=60;更改为最大值60。请注意,此设置对编辑器没有影响。...

SQL SERVER 查看数据库执行过哪些语句(SQL历史语句记录)

SQLSERVER查看数据库已执行的语句(SQL历史语句记录)1.查看SQL执行效率和语句SelectTOP1000ST。textAS“SQL语句已执行”,QS。execution_CountAS'执行次数',QS。total_ elapsed_timeAS“耗时”,QS。total_logical_ReadsAS“逻辑读取次数”,QS。total_logi...

Linux系统glibc库版本信息查看

有时我们经常需要检查当前系统的glibc版本。您可以按如下方式进行检查:/lib/libc。所以。6有时:/lib/x86-64-linux/libc。因此6.将文件作为命令执行。为什么库可以直接运行?Glibc是gnu发布的libc库,即c运行时。glibc是linux系统中最低级别的api,几乎任何其他运行时都将依赖glibc。Gcc和libc是相互依赖...

beego

Charset=utf8“)56//参数4(可选)设置最大空闲连接7//参数5modelorm.RegisterModelRegisterModelWithPrefix。使用表名前缀orm.RegisterModelWithPrefixbeego自动创建表。1//参数1使用默认数据库ORM接口使用1//查询操作2funread(){3o:=ORM.NewOr...