java 页面级缓存_java实现秒杀业务之页面级高并发优化(页面缓存)

1、并发的瓶颈在于数据库(mysql),那如何减少对数据库的访问呢?

1421fcde213cc52fe465bc8527251efd.png

d59d0b1e351cda5a7bf38a00e19a43d7.png

页面缓存:

package com.jack.seckill.redis;

public class GoodsKey extends BasePrefix{

private GoodsKey(int expireSeconds,String prefix) {

super(expireSeconds,prefix);

}

//页面缓存有效期都比较短,设置为60s,防止数据发生变化,页面还没有变

public static GoodsKey getGoodsList=new GoodsKey(60,"gl");

}

import com.jack.seckill.redis.RedisService;

import com.jack.seckill.service.GoodsService;

import com.jack.seckill.service.SeckillUserService;

import com.jack.seckill.vo.GoodsVo;

/**

* 跳转到商品页

*

*/

@Controller

@RequestMapping("/goods")

public class GoodsController {

@Autowired

SeckillUserService userService;

@Autowired

RedisService redisService;

@Autowired

GoodsService goodsService;

@Autowired

ThymeleafViewResolver thymeleafViewResolver;

@Autowired

ApplicationContext applicationContext;

@RequestMapping("/to_list")

@ResponseBody

public String list(HttpServletRequest request,HttpServletResponse response,Model model,SeckillUser seckillUser) {

model.addAttribute("user123", seckillUser);

// return "goods_list";

//使用页面缓存技术

//第一步:从redis里面取缓存,看能否取到

String html=redisService.get(GoodsKey.getGoodsList, "", String.class);

if(!StringUtils.isEmpty(html)) {

return html;

}

//查询商品列表

ListgoodsList=goodsService.listGoodsVo();

model.addAttribute("goodsList", goodsList);

//第二步:没有从缓存取出,就手动进行渲染[ctrl+shift+T 打开open type ctrl+T打开看继承关系]

SpringWebContext ctx=new SpringWebContext(request,response,request.getServletContext(),request.getLocale(),model.asMap(),applicationContext);

html=thymeleafViewResolver.getTemplateEngine().process("goods_list", ctx);

if(!StringUtils.isEmpty(html)) {

//第三步:保存到缓存里面去

redisService.set(GoodsKey.getGoodsList, "", html);

}

return html;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本工程用于研究如何借助Ehcache缓存框架实现页面缓存 本工程编码方式:UTF-8 本工程开发工具:MyEclipse 说明: 1、ehcache.xml和ehcache.xsd两个文件可以在下在下载下来的名为“ehcache-core-x.x.x-distribution.tar.gz”压缩文件中找到 2、由于要实现Ehcache缓存页面,所以必须要添加“ehcache-web-2.0.4.jar” jar包,该jar包主要用于辅助Ehcache实现页面缓存 注意: 本web工程的发布不要使用Tomcat7,否则会出现如下异常: 2015-3-25 9:53:50 org.apache.catalina.loader.WebappClassLoader loadClass 信息: Illegal access: this web application instance has been stopped already. Could not load net.sf.ehcache.store.disk.DiskStore$KeySet. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact. java.lang.IllegalStateException at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1600) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) at net.sf.ehcache.store.disk.DiskStore.keySet(DiskStore.java:560) at net.sf.ehcache.store.disk.DiskStorageFactory$DiskExpiryTask.run(DiskStorageFactory.java:838) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619) 相关jar包下载地址: Ehcache 对象、数据缓存:http://ehcache.org/downloads/destination?name=ehcache-core-2.5.2-distribution.tar.gz&bucket=tcdistributions&file=ehcache

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值