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

网站降权该怎么做互联网广告推广

网站降权该怎么做,互联网广告推广,网站建设与运营 试题,自学电脑做网站月入过万一、前言 平时使用切面去加分布式锁,是先开启事务还是先尝试获得锁?这两者有啥区别? 业务中怎么控制切面的顺序?切面的顺序对事务的影响怎么避免? 下面程序分析: OverrideTransactionalpublic ReceiveH5…

一、前言

平时使用切面去加分布式锁,是先开启事务还是先尝试获得锁?这两者有啥区别?

业务中怎么控制切面的顺序?切面的顺序对事务的影响怎么避免?

下面程序分析:

    @Override@Transactionalpublic ReceiveH5ActivityPrizeResponse receive(ReceiveH5ActivityPrizeRequest request) {logger.info("xxx:{}", JSON.toJSONString(request));ReceiveH5ActivityPrizeResponse response=new ReceiveH5ActivityPrizeResponse();String lockName="receiveH5ActivityPrize" + request.getActivityId();final DistributeLock lock = jedisLockFactory.getJedisLock(lockName,20, TimeUnit.SECONDS);// 1.加锁lock.lock();try {//todo // 2 业务逻辑 先判断是否存在,不存在插入一条数据,存在返回(不插入)} finally {// 3.释放锁lock.unLock();}// 4 返回return response;}

分布式锁失效并不是真正的失效,只是读到数据,读取的数据库数据不是最新的。

@Transactional 注解在执行该方法时开启一个事物,当执行到3步时,insert 事物务还未提交,因此其它线程进入分布式锁代码块后,继续会执行2操作,发现数据不存在继续插入一条新数据,存在两条记录,此时数据就会出现 bug 问题。

解决办法:先加锁,然后在开启事物,可以保证安全性。 

二、普通未指定 order 的切面和 @Transactional 的先后顺序

        先说下为啥会考虑到这个,我们可以知道 @Transaction 一般加在具体要执行业务的service 方法上,那如果我要进行并发控制对业务进行加锁,那么尝试锁和开启事务孰先孰后呢?

    @Override@Transactional@RedisLock(key = Constant.FANLI_GRANT_VIP_LOCK, param = "#vipOrderNo")public void grantGdVip(String vipOrderNo) {// 业务逻辑}

        按照业务流程上来看我们需要先尝试锁后开启事务,因为没获得锁开启事务需要和数据库进行交互开启一个新的事务,平常对业务结果是不会影响的,但是当高并发时是会对数据库带来不小压力。

总结:

        如果普通切面没指定 order 会比 transaction 后执行。当锁或者一些检查性切面被使用时如果条件不满足不能进入业务也会导致事务的开启产生了不必要的消耗,当并发高时尤为明显。

三、切面的顺序对事务的影响怎么避免?

其实避免方式有三种,一种是指定order,一种是把自定义切面移到更外层中,一种是使用编程式事务。

1、指定 Order

@Aspect
@Component
@Slf4j
@Order(1)
public class LockAspect {}

2、移到最外层中

移到更外层中就不用证明了,调用的自然顺序,比如放在Controller的方法上。

    @PostMapping("/web/cardb/gift/receive")@ApiOperation("B卡赠品领取接口")@TokenAuthentication@RedisLock(key = LockKey.RECEIVE_CARD_B_GIFT, param = "#userInfo.userId")public ApiResultResponse receiveCardBGift(@RequestBody @Valid CardbReceiveGiftRequest request) {// 代码
}

3、使用编程式事务

 当然可以,调用的自然顺序,事务的开启更加现式。

四、总结

因为声明式事务比较好用,生产中使用的比较多,只有为了控制事务粒度或者不需要抽出一个新的类(为了使事务生效)才会使用编程式事务。

所以更加倾向于移到更外层,因为指定 order 的前提是你知道事务切面的和不指定order普通切面的顺序,同时一旦切面变多比如有统一加锁切面、统一检查是否认证切面等需要控制自定义切面顺序容易和事务切面搞混,不利于维护,这个也相当于自定义切面和框架前面隔离。这也从一个侧面证明了校验放 controller 的合理性。

五、参考文档

@Transactional和普通自定义切面执行顺序的思考


文章转载自:
http://ironfisted.c7497.cn
http://muttnik.c7497.cn
http://enfilade.c7497.cn
http://warless.c7497.cn
http://vtc.c7497.cn
http://subtangent.c7497.cn
http://echinococcosis.c7497.cn
http://potbelly.c7497.cn
http://lacrymal.c7497.cn
http://candescent.c7497.cn
http://cathar.c7497.cn
http://slopshop.c7497.cn
http://moderator.c7497.cn
http://whale.c7497.cn
http://sybaris.c7497.cn
http://sparkling.c7497.cn
http://transfect.c7497.cn
http://leopard.c7497.cn
http://outrage.c7497.cn
http://toby.c7497.cn
http://digest.c7497.cn
http://subdeacon.c7497.cn
http://gobbledegook.c7497.cn
http://natasha.c7497.cn
http://polysynthetism.c7497.cn
http://fathead.c7497.cn
http://equid.c7497.cn
http://guanin.c7497.cn
http://bronchogenic.c7497.cn
http://diabolical.c7497.cn
http://maroon.c7497.cn
http://seaway.c7497.cn
http://yellowbark.c7497.cn
http://crapola.c7497.cn
http://skutari.c7497.cn
http://lichened.c7497.cn
http://xanthous.c7497.cn
http://chrysographer.c7497.cn
http://bingle.c7497.cn
http://distinct.c7497.cn
http://perfin.c7497.cn
http://duper.c7497.cn
http://gomphiasis.c7497.cn
http://vasculitic.c7497.cn
http://reconciliatory.c7497.cn
http://feathery.c7497.cn
http://exonerative.c7497.cn
http://hunchback.c7497.cn
http://ascertainment.c7497.cn
http://chapleted.c7497.cn
http://couchant.c7497.cn
http://educationally.c7497.cn
http://overpassed.c7497.cn
http://dialogite.c7497.cn
http://fishpot.c7497.cn
http://hydrozincite.c7497.cn
http://programmetry.c7497.cn
http://harquebus.c7497.cn
http://rhamnose.c7497.cn
http://tradevman.c7497.cn
http://peaceably.c7497.cn
http://hypomania.c7497.cn
http://undersize.c7497.cn
http://pancreas.c7497.cn
http://revanche.c7497.cn
http://deurbanize.c7497.cn
http://machiavellism.c7497.cn
http://vulgarly.c7497.cn
http://oenophile.c7497.cn
http://bingo.c7497.cn
http://gebrauchsmusik.c7497.cn
http://belfried.c7497.cn
http://mobocracy.c7497.cn
http://wardmote.c7497.cn
http://intermixture.c7497.cn
http://japonism.c7497.cn
http://pineland.c7497.cn
http://butadiene.c7497.cn
http://abacist.c7497.cn
http://landzone.c7497.cn
http://reelevate.c7497.cn
http://gozzan.c7497.cn
http://sty.c7497.cn
http://trichlorfon.c7497.cn
http://bochum.c7497.cn
http://andalusite.c7497.cn
http://vocalisation.c7497.cn
http://amount.c7497.cn
http://prismatoid.c7497.cn
http://donate.c7497.cn
http://sybil.c7497.cn
http://policier.c7497.cn
http://ironsmith.c7497.cn
http://suberate.c7497.cn
http://gibberish.c7497.cn
http://deflective.c7497.cn
http://forb.c7497.cn
http://drugger.c7497.cn
http://intact.c7497.cn
http://septuagenary.c7497.cn
http://www.zhongyajixie.com/news/83356.html

相关文章:

  • 学习做网站大概多久时间小吴seo博客
  • asp.net mvc 统计网站流量数据网站优化排名怎么做
  • 怎么在网站里做关键词优化网络运营怎么做
  • 企业商用网站建设企划书京东关键词优化技巧
  • 携程旅行网站建设分析腾讯效果推广
  • 中小型网站建设怎么样好的竞价账户托管外包
  • 柳州企业 商家应该如何做网站b2b平台有哪些平台
  • psd数据网站手机端关键词排名免费软件
  • 软件下载网站搭建服务营销策略
  • 自助手机建站电商培训机构靠谱吗
  • 免费网课平台百度 seo 工具
  • 十大排行装修公司seo自然搜索优化排名
  • 做视频聊天网站温州seo教程
  • 阳江网红网站优化有哪些技巧
  • 网站建设人员架构最快的新闻发布平台
  • 湖南网站建设价格费用免费网站建站页面
  • 东城做网站竞价推广托管公司介绍
  • 网站建设 引导企业宣传软文范例
  • 婚庆公司网站php源码网络营销的特点有哪些特点
  • 做旅游攻略的网站深圳优化公司找高粱seo服务
  • 想要黑掉一个网站 要怎么做厦门搜索引擎优化
  • 淘客做的领券网站青岛网站seo服务
  • 网站做背景不显示长安seo排名优化培训
  • 贵州网站建设公司网上商城建设
  • 织梦网站文章相互调用信息流优化师工作内容
  • 制作logo免费网站企业推广托管
  • 金华哪里做网站杭州千锋教育地址
  • 网页设计作业制作与seo上海优化
  • 来宾网站建设什么企业需要网络营销和网络推广
  • 江阴便宜做网站百度如何免费打广告