当前位置: 首页 > wzjs >正文

网站建设入门到精通视频制作软件排行榜

网站建设入门到精通,视频制作软件排行榜,网站头像有啥做会清晰,cms管理手机网站模板下载商户查询缓存 什么是缓存 实际开发过程中数据量可以达到几千万,缓存可以作为避震器防止过高的数据访问猛冲系统,避免系统内的操作线程无法及时处理信息而瘫痪 缓存(Cache)就是数据交换的缓冲区(储存临时数据的地方),我们俗称的"缓存"实际就是缓冲区内的数据(一般从…

商户查询缓存

什么是缓存

实际开发过程中数据量可以达到几千万,缓存可以作为避震器防止过高的数据访问猛冲系统,避免系统内的操作线程无法及时处理信息而瘫痪

缓存(Cache)就是数据交换的缓冲区(储存临时数据的地方),我们俗称的"缓存"实际就是缓冲区内的数据(一般从数据库中获取存储于本地)

  • Static修饰: 随着类的加载而被加载到内存之中从而作为本地缓存
  • final修饰: 其引用和对象之间的关系是固定的不能改变,因此不用担心赋值时导致缓存失效
// 本地用于高并发
Static final ConcurrentHashMap<K,V> map = new ConcurrentHashMap<>(); // 用于redis等缓存
static final Cache<K,V> USER_CACHE = CacheBuilder.newBuilder().build(); // 本地缓存
Static final Map<K,V> map =  new HashMap(); 

缓存的优点和缺点

  • 优点: 缓存数据存储于代码中而代码又运行在内存中(读写性能远高于磁盘),从而大大降低用户访问的并发量给服务器带来的读写压力
  • 缺点: 需要维护原数据和缓存数据一致性,这就需要增加代码复杂度(维护起来比较麻烦)和运维成本(缓存需要搭建集群模式)

实际开发中,会构筑多级缓存来使系统运行速度进一步提升,如本地缓存与Redis中的缓存并发使用

  • 浏览器缓存: 主要是存在于浏览器端的缓存(css文件和js文件等静态资源)
  • 应用层缓存: 可以分为tomcat本地缓存,比如使用map集合或者redis作为缓存
  • 数据库缓存: 在数据库中有一片空间是buffer pool(缓存索引),增改查的数据都会先加载到mysql的缓存中
  • CPU缓存: 当代计算机最大的问题是cpu性能提升了,但内存读写速度没有跟上,所以为了适应当下的情况,增加了cpu的L1,L2,L3级的缓存

在这里插入图片描述

添加商户缓存

在Service层创建queryById方法, 然后在ServiceImpl中重写该方法,在Controller中调用该方法

当我们使用浏览器发送请求访问一个商户信息时如果直接从数据库中查询商户信息效率很慢,所以一般在客户端与数据库之间加上一个Redis缓存

@GetMapping("/{id}")
public Result queryShopById(@PathVariable("id") Long id) {// 这里是直接调用Mybaits-Plus提供的方法查询数据库return shopService.queryById(id);
}

在这里插入图片描述

重启服务器访问商户信息,观察控制台日志输出然后刷新页面, 控制台不会出现查询商户信息的SQL语句,在Redis图形化界面中也可以看到缓存的商户信息数据

// Redis中缓存店铺的key前缀
public static final String CACHE_SHOP_KEY = "cache:shop:";
@GetMapping("/{id}")
public Result queryShopById(@PathVariable("id") Long id) {// 先从Redis中查询店铺数据,如果缓存里有数据直接返回,如果缓存中没有则去查询数据库并存入Redisreturn shopService.queryById(id);
}
public interface IShopService extends IService<Shop> {Result queryById(Long id);
}
public class ShopServiceImpl extends ServiceImpl<ShopMapper, Shop> implements IShopService {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Overridepublic Result queryById(Long id) {// 先从Redis中查询对应的店铺缓存信息,这里的key是店铺固定的前缀+查询的店铺idString shopJson = stringRedisTemplate.opsForValue().get(CACHE_SHOP_KEY + id);// 如果在Redis中查询到了店铺信息(String类型的JSON字符串)则转为Shop类型直接返回if (StrUtil.isNotBlank(shopJson)) {Shop shop = JSONUtil.toBean(shopJson, Shop.class);return Result.ok(shop);}// 在Redis中没查询到店铺信息则根据店铺Id去数据库中查Shop shop = getById(id);// 在数据库中也查不到则返回一个错误信息或者返回空if (shop == null){return Result.fail("店铺不存在!!");}// 在数据库中查到了则把shop对象转为json字符串String jsonStr = JSONUtil.toJsonStr(shop);// 将转换后的json字符串存入RedisstringRedisTemplate.opsForValue().set(CACHE_SHOP_KEY + id, jsonStr);// 最终把查询到的店铺信息返回给前端return Result.ok(shop);}
}

添加商户类型数据缓存

当我们访问首页时,会自动发起shop-type/list请求,查询不同商户类型的信息,由于这部分数据几乎是不变动的,所以我们可以将其一直存入Redis缓存

在这里插入图片描述

使用foreach循环将查询到的多个店铺类型信息从JSON和Bean之间相互转换,Redis中存储所有店铺类型的信息可以使用List类型

data:[0: {id: 1, name: "美食", icon: "/types/ms.png", sort: 1}
1: {id: 2, name: "KTV", icon: "/types/KTV.png", sort: 2}
2: {id: 3, name: "丽人·美发", icon: "/types/lrmf.png", sort: 3}
3: {id: 10, name: "美睫·美甲", icon: "/types/mjmj.png", sort: 4}
4: {id: 5, name: "按摩·足疗", icon: "/types/amzl.png", sort: 5}
5: {id: 6, name: "美容SPA", icon: "/types/spa.png", sort: 6}
6: {id: 7, name: "亲子游乐", icon: "/types/qzyl.png", sort: 7}
7: {id: 8, name: "酒吧", icon: "/types/jiuba.png", sort: 8}
8: {id: 9, name: "轰趴馆", icon: "/types/hpg.png", sort: 9}
9: {id: 4, name: "健身运动", icon: "/types/jsyd.png", sort: 10}]
// Redis中缓存所有店铺类型信息的List集合的key
public static final String CACHE_SHOP_TYPE_KEY = "cache:shop:type";
@GetMapping("list")
public Result queryTypeList() {return typeService.queryList();
}
public interface IShopTypeService extends IService<ShopType> {Result queryList();
}
@Override
public Result queryList() {// 先从Redis中查询缓存店铺类型信息的对应List集合中,这里的常量值Redis中缓存所有店铺类型信息的List集合的keyList<String> shopTypes = stringRedisTemplate.opsForList().range(CACHE_SHOP_TYPE_KEY, 0, -1);// 如果List集合不为空即查询到了店铺类型信息,则将List集合中每个String类型JSON字符串转为ShopType类型直接返回if (!shopTypes.isEmpty()) {List<ShopType> tmp = new ArrayList<>();for (String types : shopTypes) {ShopType shopType = JSONUtil.toBean(types, ShopType.class);tmp.add(shopType);}return Result.ok(tmp);}// 如果Redis中没有对应的List集合,则去数据库表中查询所有店铺类型的信息List<ShopType> tmp = query().orderByAsc("sort").list();if (tmp == null){return Result.fail("店铺类型不存在!!");}// 将查到的每个shopType类型的对象转换为JSON字符串,然后存入Redis中缓存店铺类型信息的List集合中for (ShopType shopType : tmp) {String jsonStr = JSONUtil.toJsonStr(shopType);shopTypes.add(jsonStr);}// 向Redis中存入查询到的List集合stringRedisTemplate.opsForList().leftPushAll(CACHE_SHOP_TYPE_KEY,shopTypes);// 最终把查询到的所有商户类型信息返回给前端return Result.ok(tmp);
}// 使用stream流简化代码
@Override
public Result queryList() {// 先从Redis中查询缓存店铺类型信息的对应List集合,这里的常量值Redis中缓存所有店铺类型信息的List集合的keyList<String> shopTypes = stringRedisTemplate.opsForList().range(CACHE_SHOP_TYPE_KEY, 0, -1);// 如果List集合不为空即查询到了店铺类型信息,则将List集合中每个String类型JSON字符串转为ShopType类型直接返回if (!shopTypes.isEmpty()) {List<ShopType> tmp = shopTypes.stream().map(type -> JSONUtil.toBean(type, ShopType.class)).collect(Collectors.toList());return Result.ok(tmp);}// 如果Redis中没有对应的List集合,则去数据库表中查询所有店铺类型的信息List<ShopType> tmp = query().orderByAsc("sort").list();if (tmp == null){return Result.fail("店铺类型不存在!!");}// 将查到的每个shopType类型的对象转换为JSON字符串,然后存入Redis中缓存店铺类型信息的List集合中shopTypes = tmp.stream().map(type -> JSONUtil.toJsonStr(type)).collect(Collectors.toList());// 向Redis中存入查询到的List集合stringRedisTemplate.opsForList().leftPushAll(CACHE_SHOP_TYPE_KEY,shopTypes);// 最终把查询到的所有商户类型信息返回给前端return Result.ok(tmp);
}
http://www.dtcms.com/wzjs/784773.html

相关文章:

  • 给别人做网站如何收费WordPress添加内容评论可见
  • vps新建网站微信公众号怎么做好看
  • 南宁网站建公司吗南京建设网站公司
  • 做药公司的网站前置审批阳江招聘网最新招聘信息网兼职
  • 智慧团建系统官方网站网站建设合同属于
  • 全站加速 wordpress天津网站建设制作开发公司
  • 怎么做属于自己的网站wordpress判断使用不同模板
  • 一六八互联网站建设音乐网站建设教程视频教程
  • 长沙网站排名kol合作推广
  • 做阿里巴巴好还是网站好百度首页网址是多少
  • 沈阳网站建设服务平台新媒体广告代理加盟
  • 辽宁省高等级公路建设局网站手机网站dedecms
  • 密山网站西安企业门户网站建设
  • 制作企业网站的南宁网站建设价格
  • 商务网站开发的基本原则wordpress怎样发邮件
  • 有关做美食的网站乐餐饮网站建设网站
  • 佛山搜索引擎推广服务好成都网站优化平台
  • 手机网站建设西安长沙建网站速成班
  • 深圳有多少网站建设公司网页设计与网站建设试卷
  • 手表网站起名常见的网站开发语言
  • 做创业网站赚钱谷歌seo最好的公司
  • 厦门网站建设建设公司做网站都用什么软件
  • 星空传媒有限公司网站外贸免费建设网站制作
  • 番禺网站建设服务怎么提升网站流量
  • 工程中标公示查询怎么查网络优化工程师能干一辈子吗
  • 阜阳专业网站建设wordpress虚拟主机
  • 三创大赛网站建设徐州网站建设费用
  • 网站建设成功案例书籍景区网站开发
  • 石家庄网站建设电商网站开发使用的工具
  • 网站建设程序开发过程上海 高端 网站建设