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

网站建设综合推荐月亮花园wordpress

网站建设综合推荐,月亮花园wordpress,汽车配件生产企业网站模板,泰安市住房和城乡建设局网站Redis 存在事务#xff0c;尽管它没有数据库那么强大#xff0c;但是它还是很有用的#xff0c;尤其是在那些需要高并发的网站当中。 使用 Redis 读/写数据要比数据库快得多#xff0c;如果使用 Redis 事务在某种场合下去替代数据库事务#xff0c;则可以在保证数据一致性…Redis 存在事务尽管它没有数据库那么强大但是它还是很有用的尤其是在那些需要高并发的网站当中。 使用 Redis 读/写数据要比数据库快得多如果使用 Redis 事务在某种场合下去替代数据库事务则可以在保证数据一致性的同时大幅度提高数据读/写的响应速度。 互联网和传统企业管理系统不一样互联网系统面向的是公众很多用户同时访问服务器的可能性很大尤其在一些商品抢购、抢红包等场合对性能和数据的一致性有着很高的要求而存储系统的读/写响应速度对于这类场景的性能的提高是十分重要的。 在 Redis 中也存在多个客户端同时向 Redis 系统发送命令的并发可能性因此同一个数据可能在不同的时刻被不同的线程所操纵这样就出现了并发下的数据一致的问题。为了保证异性数据的安全性Redis 为提供了事务方案。而 Redis 的事务是使用 MULTI-EXEC 的命令组合使用它可以提供两个重要的保证 事务是一个被隔离的操作事务中的方法都会被 Redis 进行序列化并按顺序执行事务在执行的过程中不会被其他客户端发生的命令所打断。事务是一个原子性的操作它要么全部执行要么就什么都不执行。在一个 Redis 的连接中请注意要求是一个连接所以更多的时候在使用 Spring 中会使用 SessionCallback 接口进行处理在 Redis 中使用事务会经过 3 个过程 开启事务。命令进入队列。执行事务。Redis事务命令 在 Redis 中开启事务是 multi 命令而执行事务是 exec 命令。multi 到 exec 命令之间的 Redis 命令将采取进入队列的形式直至 exec 命令的出现才会一次性发送队列里的命令去执行而在执行这些命令的时候其他客户端就不能再插入任何命令了这就是 Redis 的事务机制。 Redis 命令执行事务的过程。 从图中可以看到先使用 multi 启动了 Redis 的事务因此进入了 set 和 get 命令我们可以发现它并未马上执行而是返回了一个“QUEUED”的结果。 这说明 Redis 将其放入队列中并不会马上执行当命令执行到 exec 的时候它就会把队列中的命令发送给 Redis 服务器这样存储在队列中的命令就会被执行了所以才会有“OK”和“value1”的输出返回。 如果回滚事务则可以使用 discard 命令它就会进入在事务队列中的命令这样事务中的方法就不会被执行了使用 discard 命令取消事务如图所示。 当我们使用了 discard 命令后再使用 exec 命令时就会报错因为 discard 命令已经取消了事务中的命令而到了 exec 命令时队列里面已经没有命令可以执行了所以就出现了报错的情况。 在 Spring 中要使用同一个连接操作 Redis 命令的场景这个时候我们借助的是 Spring 提供的 SessionCallback 接口采用 Spring 去实现上述命令代码如下所示。 ApplicationContext applicationContext new ClassPathXmlApplicationContext(applicationContext.xml); RedisTemplate redisTemplate applicationContext.getBean(RedisTemplate.class); SessionCallback callBack (SessionCallback) (RedisOperations ops)- {ops.multi();ops.boundValueOps(key1).set(value1);//注意由于命令只是进入队列而没有被执行所以此处采用get命令而value却返回为nullString value (String) ops.boundValueOps(key1).get();System.out.println (事务执行过程中命令入队列而没有被执行所以value为空 valuevalue);//此时list会保存之前进入队列的所有命令的结果List list ops.exec(); //执行事务//事务结束后获取value1value (String) redisTemplate.opsForValue().get(key1);return value; }; //执行Redis的命令 String value (String)redisTemplate.execute(callBack); System.out.println(value);这里采用了 Lambda 表达式注意Java 8 以后才引入 Lambda 表达式来为 SessionCallBack 接口实现了业务逻辑。从代码看使用了 SessionCallBack 接口从而保证所有的命令都是通过同一个 Redis 的连接进行操作的。 在使用 multi 命令后要特别注意的是使用 get 等返回值的方法一律返回为空因为在 Redis 中它只是把命令缓存到队列中而没有去执行。使用 exec 后就会执行事务执行完了事务后执行 get 命令就能正常返回结果了。 最后使用 redisTemplate.execute(callBack); 就能执行我们在 SessionCallBack 接口定义的 Lambda 表达式的业务逻辑并将获得其返回值。执行代码后可以看到这样的结果如图所示 这里打印出来的 valuenull是因为在事务中所有的方法都只会被缓存到 Redis 事务队列中而没有立即执行所以返回为 null。如果我们希望得到 Redis 执行事务各个命令的结果可以用这行代码 List list ops.exec(); //执行事务这段代码将返回之前在事务队列中所有命令的执行结果并保存在一个 List 中我们只要在 SessionCallback 接口的 execute 方法中将 list 返回就可以在程序中获得各个命令执行的结果了。
http://wiki.neutronadmin.com/news/72398/

相关文章:

  • vue做的网站有什么搜索数据
  • 南京做网站具体需要多少钱桐城市美好乡村建设办公室网站
  • wordpress 建站后端大同百度做网站多少钱
  • 公司网站建设项目的成本计划管理员修改网站的参数会对网站的搜效果产生什么影响?
  • 网站系统建设项目北京seo优化诊断
  • 淘宝网站的建设与运营设计思路网络规划设计师如何复习
  • 武清网站开发tjniu2018网站流量怎么做
  • 深圳快速网站制南宁企业网站设计
  • 有没有专门做淘宝客的网站wordpress 主题版权
  • 网站原型设计流程wordpress可视化编辑器不显示
  • 岳阳建设公司网站建设网站公司电话销售话术
  • 企业网站优化方案范本wordpress开发网站
  • 花都建设局网站百度域名查询官网
  • 专业做网站官网服务器如何创建一个网站
  • 爱网站官网企业管理考研院校推荐
  • 红灰搭配网站模板平阴网络营销是什么
  • 音响网站模板免费下载wap网站多少钱
  • 公司网站建设 上海宜昌视频网站建设
  • 自己搞个网站网站注册免费
  • 万户网站管理系统4.0wordpress整站源码
  • 做网站服务器收费吗一手房哪个网站做信息效果好
  • 刷评论网站推广soho hotel 酒店 wordpress主题
  • 杭州网站设计公司电话区网站制作
  • 域名网站注册认证北京到太原
  • 大连专业做网站二级单位网站建设
  • seo案例网站公司网站制作方案
  • 行知智网站开发wordpress加载速度慢
  • 卢沟桥做网站的公司百度一下你知道
  • 广州做网站技术网站备案的幕布是什么意思
  • 有网站源码怎么上传深圳网站建设乐云seo