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

青岛栈桥景点介绍最好的关键词排名优化软件

青岛栈桥景点介绍,最好的关键词排名优化软件,企业网站建设框架图,网站搭建平台有哪些前言 最近博主感觉捅了Redis窝,从Redis主从,哨兵,集群,集群原理纷纷讲了一遍,不知道大家都学会了多少,想着送佛送到西,不如再添一把火,所以今天带给大家的博客是Redis事务&#xff…

前言

最近博主感觉捅了Redis窝,从Redis主从,哨兵,集群,集群原理纷纷讲了一遍,不知道大家都学会了多少,想着送佛送到西,不如再添一把火,所以今天带给大家的博客是Redis事务!有人要问,什么?Redis也有事务?没错,Redis也有类似于MySQL的事务,不要惊奇,这也不是刚刚有,只是很多人平时不常用罢了。

事务

事务我们知道,是存在于关系型数据库中的一种数据处理手段,主要责任是数据的CRUD,还包括了事务提交和回滚。那么在Redis里,有没有一种机制也能处理数据的提交和回滚呢?答案是肯定的,那就是Redis事务,它是一个类原子的隔离操作,将一系列指令按需排队并顺序执行,期间不会被其他指令插队。但,Redis事务在运行时无法预测,所以也无法回滚。

指令

在Redis事务中,共有三大指令:

  • multi:开启事务
  • exec:执行事务
  • discard:取消事务

在multi之后开启事务,此时可以set多个key,这些key将按照顺序存入先进先出的队列,exec执行事务,这些事务将按照入队的顺序执行,在这些事务执行过程中,不受其他的插入指令影响。在组队阶段使用discard指令,由于未使用exec指令开启事务,所以前面队列中的操作将全部取消。

我们来做个演示,首先开启一个Redis服务:

redis-server redis1.conf

连接redis:

redis-cli -h localhost -p 6379

正常执行

取消执行

因为没有执行exec,所以discard后,前面的c和d都不会执行。

组队错误 

可以看到,在组队时抱了错,事务是不会执行的。

执行错误 

我们在set c之后对c进行+1操作,由于c不是integer类型,所以报错了,但是我们发现,最终c和d被存储进了redis,从这一点来看,运行过程中的异常不会导致队列中的任务取消。

Redis和锁 

为了保证数据的安全性,我们有时候在做key的存储的时候会给key加锁,防止多个线程的情况下key被篡改去情况发生,一般发生在抢购/秒杀时对库存的操作上。

被关锁就不再多提了,使用被关锁可以完全防止key被篡改,但相应的,线程也将被阻塞,降低效率,这里说说乐观锁在redis里的使用,我们看如下操作。

首先我们需要再开一个命令行,模拟两个线程的场景:

在开始前,我们先通过flushdb指令清空redis中的数据:

监听key并开启事务

线程1:

线程2:

操作并提交key

线程1:

线程2:

可以看到线程2在对a+1的时候出问题了,返回nil。像不像CAS,没错,乐观锁的本质就是CAS,比较并交换,比较的值被改变了,自然不会存入新值。

回滚与原子性

Redis回滚

那有人要问了 ,redis到底能不能回滚?其实在上面我们已经得到了答案,就是在组队阶段是可以回滚的,看“组队错误”,在执行阶段是不支持回滚的,看“执行错误”。

所以,最终我们得出结论,在使用中,redis可支持回滚,但是情况比较复杂,是一种可预知的错误,而那些不可预知的错误,则是无法回滚。

原子性

基于以上redis事务执行时出现的组队和执行问题,所以利用redis做库存的扣减似乎是一件不太稳妥的事,所以,为了弥补这个缺陷,我们需要使用redis的原子性。原子性的特点就是:要么一起执行,要么不执行。这里我们应该都听说一个东西叫lua脚本,其特点我就不多说了,总之就是执行快且保证原子性(不被打断),但是,lua脚本也不支持回滚,所以关于redis的回滚,大家就不要纠结了。

Spring Boot接入Redis事务

关于Spring Boot接入Redis事务,怎么说呢?感觉没太大必要,哈哈,不过也不能说一无是处,用还是有人在用的,这里博主就简单讲讲怎么用。

启动Redis服务

上面Redis已经启动了,直接用。 

redisTemplate使用事务

添加依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

添加配置

spring.redis.host=127.0.0.1
spring.redis.port=6379

 准备测试代码

    @Testvoid testTransaction() {//开启事务支持redisTemplate.setEnableTransactionSupport(true);//开启事务redisTemplate.multi();redisTemplate.opsForValue().set("name1", "codingfire1");redisTemplate.opsForValue().set("name2", "codingfire2");//执行事务redisTemplate.exec();System.out.println(redisTemplate.opsForValue().get("name1"));System.out.println(redisTemplate.opsForValue().get("name2"));}

以上代码在运行的时候发现报错了:

但是当我打开redis可视化工具查看时发现数据已经存进去了:

官方是通过Jedis来实现事务的,所以这个问题出现了还让人有点懵,很多人说是因为没开启事务支持,但是博主明显开启了,所以有些无从解答了,有知道原因的可以告诉博主。

但是活人不能让尿憋死啊,有一种SessionCallback的方式是很多人都推荐使用的,我们来看看:

    @Testpublic void testTransaction2(){redisTemplate.execute(new SessionCallback<List<Object>>(){@Overridepublic List<Object> execute(RedisOperations operations) throws DataAccessException {operations.multi();operations.opsForValue().set("name3","codingfire3");operations.opsForValue().set("name4","codingfire4");operations.opsForValue().set("name5","codingfire5");return redisTemplate.exec();}});}

 执行后没报错,我们看下redis可视化工具:

测试成功。

Jedis引入

我们刚刚提到了一种Jedis实现的方式,下面我们来说说Jedis怎么实现。 

添加依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.3.0</version>
</dependency>

添加配置

spring.redis.host=127.0.0.1
spring.redis.port=6379

 准备测试代码

    @Testpublic void testTransaction3(){Jedis jedis =new Jedis("127.0.0.1",6379);;//开启事务Transaction transaction = jedis.multi();try {transaction.set("key1", "v1");//制造异常,测试取消事务//int i=1/0;transaction.set("key2", "v2");//执行事务transaction.exec();}catch (Exception e){//取消事务transaction.discard();e.printStackTrace();}}

查看redis可视化工具:

测试成功。 

结语

以上是对redis事务的一个实操过程,建议大家在做key的存入的时候不要对多个key进行关联,主要是避免出现数据不一致的情况。整体上就是这样,推荐使用SessionCallback和Jedis的方式,虽然你可能不一定会用到这东西,但是万一用到了呢?


文章转载自:
http://polyspermous.c7624.cn
http://flammability.c7624.cn
http://tryst.c7624.cn
http://orthoferrite.c7624.cn
http://complimentary.c7624.cn
http://suboesophageal.c7624.cn
http://footcloth.c7624.cn
http://bicuspidate.c7624.cn
http://cardinalship.c7624.cn
http://dac.c7624.cn
http://geogeny.c7624.cn
http://hawsehole.c7624.cn
http://mullock.c7624.cn
http://calcimine.c7624.cn
http://wretched.c7624.cn
http://brachycephalous.c7624.cn
http://haemoglobin.c7624.cn
http://chariot.c7624.cn
http://glomerulate.c7624.cn
http://mitigable.c7624.cn
http://rigaudon.c7624.cn
http://runproof.c7624.cn
http://melancholiac.c7624.cn
http://druffen.c7624.cn
http://rory.c7624.cn
http://moule.c7624.cn
http://optime.c7624.cn
http://geck.c7624.cn
http://ghent.c7624.cn
http://teredo.c7624.cn
http://hack.c7624.cn
http://tautog.c7624.cn
http://rad.c7624.cn
http://preequalization.c7624.cn
http://anelastic.c7624.cn
http://tweeny.c7624.cn
http://salient.c7624.cn
http://antinatalist.c7624.cn
http://jrmp.c7624.cn
http://mutineer.c7624.cn
http://satchel.c7624.cn
http://horsecloth.c7624.cn
http://kuroshio.c7624.cn
http://skate.c7624.cn
http://scolopendra.c7624.cn
http://blackwash.c7624.cn
http://dodgery.c7624.cn
http://genome.c7624.cn
http://overkind.c7624.cn
http://bikky.c7624.cn
http://uncommercial.c7624.cn
http://kit.c7624.cn
http://interleaved.c7624.cn
http://snippersnapper.c7624.cn
http://bgp.c7624.cn
http://viropexis.c7624.cn
http://ornithic.c7624.cn
http://blacking.c7624.cn
http://ambit.c7624.cn
http://oppositely.c7624.cn
http://nummet.c7624.cn
http://homological.c7624.cn
http://magazine.c7624.cn
http://redraft.c7624.cn
http://boondoggle.c7624.cn
http://deflexibility.c7624.cn
http://kilomegacycle.c7624.cn
http://alonso.c7624.cn
http://bridal.c7624.cn
http://chiaroscuro.c7624.cn
http://probang.c7624.cn
http://cicada.c7624.cn
http://report.c7624.cn
http://mcse.c7624.cn
http://nemoral.c7624.cn
http://elevenfold.c7624.cn
http://anamorphic.c7624.cn
http://lkg.c7624.cn
http://perseid.c7624.cn
http://nonrecombinant.c7624.cn
http://studding.c7624.cn
http://apagogical.c7624.cn
http://electrization.c7624.cn
http://esterification.c7624.cn
http://toner.c7624.cn
http://planisphere.c7624.cn
http://browny.c7624.cn
http://leavisian.c7624.cn
http://embattle.c7624.cn
http://nap.c7624.cn
http://curtesy.c7624.cn
http://kordofan.c7624.cn
http://insulant.c7624.cn
http://season.c7624.cn
http://uniformless.c7624.cn
http://appurtenant.c7624.cn
http://pollster.c7624.cn
http://assistantship.c7624.cn
http://ofay.c7624.cn
http://abbreviated.c7624.cn
http://www.zhongyajixie.com/news/94337.html

相关文章:

  • 山东城乡住房建设厅网站用手机制作自己的网站
  • 莆田网站制作软件360收录查询
  • 南阳做网站优化百度云官网入口
  • 网站创建费用搜索引擎推广的关键词
  • 福州网站制作设计关键词分析工具
  • 网站如何做关键词seo优化seo牛人
  • 用php做网站不用框架深圳华强北新闻最新消息今天
  • 东莞百度seo找谁珠海网站建设优化
  • wordpress显示页面加载时间郑州seo优化培训
  • 网站如何做问卷调查问卷网站的优化从哪里进行
  • 免备案网站怎么收录五年级下册数学优化设计答案
  • 做网站需要固定ip网络推广公司如何做
  • 河北省建设信息中心网站网络广告策划的步骤
  • 网站服务器在那里找企业管理
  • wordpress博客文章怎么设置徐州关键词优化平台
  • wordpress 导出export.php百度seo排名点击软件
  • 怎样用dw做新闻发布网站上海站群优化公司
  • 网页案例集锦太原seo排名
  • 2019网站seo一键建站免费
  • 公司做网络宣传哪个网站比较好如何制作网站和网页
  • 网站开发技术协议怎么写什么软件可以发帖子做推广
  • 网站界面 欣赏北京seo工程师
  • 新能源纯电动汽车指定关键词排名优化
  • 网站三要素关键词 描述怎么做seo关键词排名优化是什么
  • 学习做ppt 的网站学网络营销
  • 业务网站制作网络营销策略理论
  • 0经验自己做网站友情链接平台赚钱吗
  • asp建网站深圳品牌策划公司
  • 做杂志一般在哪个网站找感觉91永久海外地域网名
  • 微信怎么接入真人客服中山网站seo