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

用ps做企业网站分辨率是多少网站空间会过期吗

用ps做企业网站分辨率是多少,网站空间会过期吗,河池网站建设公司,WordPress知更鸟lts文章目录 前言缓存菜品问题分析和实现思路缓存菜品数据清理缓存数据功能测试 SpringCache介绍入门案例 缓存套餐购物车功能添加购物车需求分析和产品原型测试 前言 本章节主要是进行用户端的购物车功能开发 和redis作为mysql缓存的应用以及SpringCache的介绍 因为很多人查询数… 文章目录 前言缓存菜品问题分析和实现思路缓存菜品数据清理缓存数据功能测试 SpringCache介绍入门案例 缓存套餐购物车功能添加购物车需求分析和产品原型测试 前言 本章节主要是进行用户端的购物车功能开发 和redis作为mysql缓存的应用以及SpringCache的介绍 因为很多人查询数据库会导致mysql的查询效率降低可以通过redis作为缓存来解决 实现产品原型 基本可以看出一些功能 添加购物车 查看购物车 清空购物车 以及我们进行redis应用的缓存菜品和套餐 还有一个自己的作业 就是增减购物车内商品的功能 缓存菜品 问题分析和实现思路 缓存菜品数据 这个挺简单的 就是根据redis中有无对应数据来进行操作 注意redis返回的数据类型存入时是什么取出来就是什么 redis中的string可以对应java中的任意类型 RestController(userDishController) RequestMapping(/user/dish) Slf4j Api(tags C端-菜品浏览接口) public class DishController {Autowiredprivate DishService dishService;Autowiredprivate RedisTemplate redisTemplate;/*** 根据分类id查询菜品** param categoryId* return*/GetMapping(/list)ApiOperation(根据分类id查询菜品)public ResultListDishVO list(Long categoryId) {//构造redis中的key规则: dish_分类id(以分类形式存储菜品)String key dish_categoryId;//查询redis是否存在菜品数据ListDishVO list (ListDishVO) redisTemplate.opsForValue().get(key);if(list ! null list.size() 0){//如果存在直接返回无需查询数据库return Result.success(list);}Dish dish new Dish();dish.setCategoryId(categoryId);dish.setStatus(StatusConstant.ENABLE);//查询起售中的菜品list dishService.listWithFlavor(dish);//如果不存在查询数据库讲查询到的数据库放入redis中redisTemplate.opsForValue().set(key,list);return Result.success(list);}}清理缓存数据 有可能我们管理端会修改/删除/新增菜品 你们上一次的查询到redis的要跟着更新 要不然sql和redis中数据不一致管理端作出的更改用户端如果还是去查redis就看不到 这里就只写 admin中DishController中修改的方法 PostMappingApiOperation(新增菜品)public Result save(RequestBody DishDTO dishDTO){log.info(新增菜品:{},dishDTO);dishService.saveWithFlavor(dishDTO);//清理缓存数据cleanCache(dish_dishDTO.getCategoryId());return Result.success();}DeleteMappingApiOperation(菜品的批量删除)public Result delete(RequestParam ListLong ids){//传参为1,2,3这种,想要mvc帮我们自动封装需要用到RequestParam否则只能字符串接收自己解析log.info(菜品批量删除:{},ids);dishService.deleteBatch(ids);//这个比较复杂所以直接全部删除 dish_*就表示以dish_开头的key//需要先将对应全部key取出然后再删除cleanCache(dish_*);return Result.success();}PutMappingApiOperation(修改菜品)public Result update(RequestBody DishDTO dishDTO) {log.info(修改菜品,对应信息为:{},dishDTO);dishService.updateWithFlavor(dishDTO);//仔细想想更改 可以设计一个分类只更改名称价格什么的 也可以涉及两个菜品分类的变更//所以这里也清理掉所有缓存cleanCache(dish_*);return Result.success();}PostMapping(/status/{status})ApiOperation(起售,停售菜品)public Result startOrStop(PathVariable Integer status,Long id){log.info(起售停售菜品:{},{},status,id);dishService.startOrStop(status,id);//这里也全部清理掉,需要查表对应分类id情况有点复杂cleanCache(dish_*);return Result.success();}这个是新增方法/*** 清理缓存数据* param pattern*/private void cleanCache(String pattern){Set keys redisTemplate.keys(pattern);redisTemplate.delete(keys);}功能测试 略 看对应更换分类后有没有sql语句输出 和修改分类菜品后对应的分类菜品情况 SpringCache 介绍 admin增删改数据只需要清除缓存CachePut是user那边查询数据时同步缓存用的 只有需要查才会放入缓存 Cacheable用于select查询 CachePut一般用于新增 CacheEvict就是用户端的更改删除等等 入门案例 导入依赖 redis和springcache 其他正常的那些依赖就不介绍了 再进行一下文件配置 controller里面提起写好了方法主要是学一下springcache 往下就是使用springcache的正常流程了 1.再springboot启动类开启缓存注解 比如这个请求 我们存储用户一般是希望同时存储到缓存中 所以我们用CachePut修饰 对应的属性 cacheNames和key是与redis中的key有关的 redis中的keycacheNames::key key一般是动态获取使不同用户对应不同key可以获取user的id 格式是 key #user(参数).id 有人可能问刚开始还没传id怎么获取对应iduser参数和user返回值是一个然后其实操作是先插入到sql数据库然后再进行缓存的mybatis进行操作返回id给user对象 也可以这样写result引用方法的返回值 其实还有很多用法 但是还是最推荐第一种 查询相关的语句先看redis有没有没有查数据库的然后存到redis中 用到Cacheable注解这里就不能用result具体可以看注解里有对应的注释说明 然后我们要查询的key就是userCache::id (因为我们新增就是用这个然后查询也要用这个可以) 删除一条数据 使用CaheEvict来进行缓存数据的删除保障数据库和缓存的数据一致性 删除所有的缓存的键值对 把key属性变为allEntries属性并且设为true 缓存套餐 改的不多 这是admin包下的setmealController RestController RequestMapping(/admin/setmeal) Api(套餐相关接口) Slf4j public class SetmealController {/*** 新增套餐*/Autowired SetmealService setmealService;PostMappingApiOperation(新增套餐)CacheEvict(cacheNames setmealCache,key #setmealDTO.categoryId)public Result save(RequestBody SetmealDTO setmealDTO){log.info(新增套餐信息:{},setmealDTO);setmealService.saveWithDish(setmealDTO);return Result.success();}/*** 根据id查询套餐* param id* return*/GetMapping(/{id})ApiOperation(根据id查询套餐)public ResultSetmealVO getById(PathVariable Long id){SetmealVO setmealVO setmealService.getByIdWithDish(id);return Result.success(setmealVO);}/*** 分页查询* param setmealPageQueryDTO* return*/GetMapping(/page)ApiOperation(分页查询)public ResultPageResult page(SetmealPageQueryDTO setmealPageQueryDTO){log.info(套餐分页查询:{},setmealPageQueryDTO);PageResult pageResult setmealService.pageQuery(setmealPageQueryDTO);return Result.success(pageResult);}/*** 批量删除套餐* param ids* return*/DeleteMappingApiOperation(批量删除套餐)CacheEvict(cacheNames setmealCache,allEntries true)public Result delete(RequestParam ListLong ids){//让Spring自动处理字符串变成集合log.info(批量删除套餐{},ids);setmealService.deleteBatch(ids);return Result.success();}/*** 修改套餐* param setmealDTO* return*/PutMappingApiOperation(修改套餐)CacheEvict(cacheNames setmealCache,allEntries true)public Result update(RequestBody SetmealDTO setmealDTO){log.info(修改套餐信息:{},setmealDTO);setmealService.update(setmealDTO);return Result.success();}/*** 套餐起售停售* param status* param id* return*/PostMapping(/status/{status})ApiOperation(套餐起售停售)CacheEvict(cacheNames setmealCache,allEntries true)public Result startOrStop(PathVariable Integer status, Long id) {setmealService.startOrStop(status, id);return Result.success();}}购物车功能 添加购物车 需求分析和产品原型 菜品设置口味数据点击的是选择规格然后才能加入购物车 未设置口味数据直接加入 套餐直接加入 设置冗余字段可以增加查询速度不用查多表查单表即可 注意点非常多代码还是挺难实现的建议仔细看看不同情况 菜品 套餐的处理 菜品有无口味如果包含该菜品/套餐需要实现数量1而不是新增操作了 设计多个表 setmeal dish 等 且可能涉及回查操作 重点就是搞清我们插入需要什么数据什么数据还没有怎么进行获取 ShoppingCartController RestController RequestMapping(/user/shoppingCart) Slf4j Api(tags C端购物车相关接口) public class ShoppingCartController {Autowiredprivate ShoppingCartService shoppingCartService;/*** 添加购物车* param shoppingCartDTO* return*/PostMapping(/add)ApiOperation(添加购物车)public Result add(RequestBody ShoppingCartDTO shoppingCartDTO){log.info(添加购物车商品信息为:{},shoppingCartDTO);shoppingCartService.addShoppingCart(shoppingCartDTO);return Result.success();} } ShoppingCartMapper Mapper public interface ShoppingCartMapper {/*** 动态条件查询* param shoppingCart* return*/ListShoppingCart list(ShoppingCart shoppingCart);/*** 根据id修改商品数量* param shoppingCart*/Update(update shopping_cart set number #{number} where id #{id})void updateNumberById(ShoppingCart shoppingCart);/**** param shoppingCart*/Insert(insert into shopping_cart(name,user_id,dish_id,setmeal_id,dish_flavor,number,amount,image,create_time) values(#{name},#{userId},#{dishId},#{setmealId},#{dishFlavor},#{number},#{amount},#{image},#{createTime}) )void insert(ShoppingCart shoppingCart); }对应xml文件 mapper namespacecom.sky.mapper.ShoppingCartMapperselect idlist resultTypecom.sky.entity.ShoppingCartselect * from shopping_cartwhereif testuserId ! nulland user_id #{userId}/ifif testsetmealId ! nulland setmeal_id #{setmealId}/ifif testdishId ! nulland dish_id #{dishId}/ifif testdishFlavor ! nulland dish_flavor #{dishFlavor}/if/where/select /mapper 重量级ShoppingCartServiceImpl Service Slf4j public class ShoppingCartServiceImpl implements ShoppingCartService {Autowiredprivate ShoppingCartMapper shoppingCartMapper;Autowiredprivate DishMapper dishMapper;Autowiredprivate SetmealMapper setmealMapper;/*** 添加购物车* param shoppingCartDTO*/public void addShoppingCart(ShoppingCartDTO shoppingCartDTO) {//添加购物车两种情况1.本身就在购物车里面 就让对应的number1 不是的话就添加//判断是否已经存在ShoppingCart shoppingCart new ShoppingCart();BeanUtils.copyProperties(shoppingCartDTO,shoppingCart);//还少userIdLong currentId BaseContext.getCurrentId();shoppingCart.setUserId(currentId);ListShoppingCart list shoppingCartMapper.list(shoppingCart);//如果存在只需要将数量1//实际上只能查出来一条if (list ! null list.size()0){ShoppingCart cart list.get(0);cart.setNumber(cart.getNumber()1);//update shopping_cart set number ? where id ?shoppingCartMapper.updateNumberById(cart);}else {//如果不存在只需要插入一条购物车数据//然后是插入但是插入的话前段没提供nameimage等信息所以要先查一下//菜品差菜品表套餐查套餐表//判断是菜品还是套餐Long dishId shoppingCartDTO.getDishId();if(dishId ! null){//菜品Dish dish dishMapper.getById(dishId);shoppingCart.setName(dish.getName());shoppingCart.setImage(dish.getImage());shoppingCart.setAmount(dish.getPrice());//购物车价格是amount}else {Long setmealId shoppingCartDTO.getSetmealId();Setmeal setmeal setmealMapper.getById(setmealId);shoppingCart.setName(setmeal.getName());shoppingCart.setImage(setmeal.getImage());shoppingCart.setAmount(setmeal.getPrice());//购物车价格是amount}shoppingCart.setNumber(1);//第一次添加数量肯定为1shoppingCart.setCreateTime(LocalDateTime.now());shoppingCartMapper.insert(shoppingCart);}} }测试 略 自己去把套餐和对应的菜品都添加一下再看看数量变化一个菜品两次debug看一下对应语句对不对 再去数据库检查一下
http://wiki.neutronadmin.com/news/203184/

相关文章:

  • 建设网站域名的选择网站建设制作开发 小程序开发定制 软件系统开发
  • 网站后台源代码更改开发app软件的步骤
  • 嘉兴专业定制网站制作企业衡阳市建设网站
  • 微信公众号开发网站建设不改变网站怎么做关键词优化
  • wordpress個人網站域名免费做视频相册的网站
  • 长春网站外包房屋建筑图纸设计说明
  • 校园网站怎么做HTML济南网站制作搜到
  • 太原正规的做定制网站制作wordpress双语言设置
  • 秦淮网站建设建设网站合同范本
  • 广西建设网站邢台做移动网站价格
  • 网站备案协议网站如何快速推广
  • 罗湖网站建设 信科网络劳动仲裁案例100例
  • 商标设计注册wordpress秒开优化
  • 网站开发的工作经验要求网站做的好的公司名称
  • 广州做网站一般多少钱wordpress 3.9.2
  • 东莞高端模板建站html网站的规划与建设6
  • 建立自己的网站平台须多少钱返利网站开发一般要多少钱
  • 网站制作代理修改wordpress文章发布页面模板
  • 城厢区建设局网站海南网站建设及维护
  • 百度云做网站有优势吗网站搭建技术有哪些
  • 自动搭建网站wordpress 安装权限管理
  • 做整合营销的网站深圳平价的专业建站公司
  • 网站域名建设费进什么科目响应式 网站 设计软件
  • 铜仁住房和城乡建设局网站大连企业信息查询系统官网
  • 网站建设在线视频电商网站 手续
  • 网站后台管理怎么做友情链接微信公众号推广的方法
  • 好看的免费网站模板下载dede做网站
  • 系部网站建设需求分析运行需求wpf做的网站
  • 网站推荐你了解我意思吧官网设计比较好看的网站
  • 做虚假网站犯法吗电子商务网站建设作业案例