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

济南装修公司口碑最好的是哪家邢台做网站建设优化制作公司

济南装修公司口碑最好的是哪家,邢台做网站建设优化制作公司,wordpress上传后设置密码,产品设计学什么目录 目录 1.redis事务介绍 2 事务出错的处理 3.Java如何使用redis事务 1.redis事务介绍 在前面我们介绍了redis的几种典型数据结构和应用#xff0c;本文我们来看一下redis的事务问题。事务也是数据库的重要主题#xff0c;熟悉关系型数据库的读者应该对事务比较了解本文我们来看一下redis的事务问题。事务也是数据库的重要主题熟悉关系型数据库的读者应该对事务比较了解简单地说事务表示一组动作要么全部执行要么全部不执行。例如在社交网站上用户 A关注了用户B那么需要在用户A的关注表中加入用户B并且在用户B的粉丝表中添加用户A这两个行为要么全部执行要么全部不执行否则会出现数据不一致的情况。 Redis提供了简单的事务功能将一组需要一起执行的命令放到 multi和exec两个命令之间。multi命令代表事务开始exec命令代表事务 结束它们之间的命令是原子顺序执行的例如下面操作实现了上述用户关注问题。 127.0.0.1:6379 multi OK 127.0.0.1:6379(TX) sadd user:a:follow user:b QUEUED 127.0.0.1:6379(TX) sadd user:b:fans user:a QUEUED 可以看到sadd命令此时的返回结果是QUEUED代表命令并没有真 正执行而是暂时保存在Redis中。如果此时另一个客户端执行 sismember user:a:follow user:b返回结果应该为0。 127.0.0.1:6379 sismember user:a:follow user:b (integer) 0 只有当exec执行后用户A关注用户B的行为才算完成如下所示返回的两个结果对应sadd命令。 第一个终端 127.0.0.1:6379(TX) exec 1) (integer) 1 2) (integer) 1第二个终端 127.0.0.1:6379 sismember user:a:follow user:b (integer) 1如果要停止事务的执行可以使用discard命令代替exec命令即可。 2 事务出错的处理 如果事务中的命令出现错误Redis的处理机制也不一样。 情况1.命令错误 例如下面操作错将set写成了sett属于语法错误会造成整个事务无法执行key和counter的值未发生变化。 比如说我们按照下面的方式来执行redis事务 127.0.0.1:6379 mget key counter 1) 2 2) 100 127.0.0.1:6379  127.0.0.1:6379 multi OK 127.0.0.1:6379(TX) sett key world (error) ERR unknown command sett, with args beginning with: key, world,  127.0.0.1:6379(TX) incr counter QUEUED 127.0.0.1:6379(TX) exec (error) EXECABORT Transaction discarded because of previous errors. 127.0.0.1:6379 mget key counter 1) 2 2) 100 127.0.0.1:6379  可以看到最后的counter并没有发生变化。 情况2.运行时错误 例如用户B在添加粉丝列表时误把sadd命令写成了zadd命令这种就是运行时命令因为语法是正确的redis是无法察觉到这种错误的。例如 127.0.0.1:6379 multi OK 127.0.0.1:6379(TX) sadd user:a:follow user:b QUEUED 127.0.0.1:6379(TX) zadd user:b:fans 1 user:a QUEUED 127.0.0.1:6379(TX) exec 1) (integer) 0 2) (error) WRONGTYPE Operation against a key holding the wrong kind of value 127.0.0.1:6379 sismember user:a:follow user:b (integer) 1 127.0.0.1:6379  可以看到Redis并不支持回滚功能sadd user:a:follow user:b命令已经执行成功开发人员需要自己修复这类问题。 有些应用场景需要在事务之前确保事务中的key没有被其他客户 端修改过才执行事务否则不执行(类似乐观锁)。Redis提供了watch命令来解决这类问题下表展示了添加watch之后两个客户端执行命令的时序。 可以看到“客户端-1”在执行multi之前执行了watch命令“客户 端-2”在“客户端-1”执行exec之前修改了key值造成事务没有执行(exec 结果为nil)整个代码如下所示: 客户端1 127.0.0.1:6379 set key java OK 127.0.0.1:6379 watch key OK 127.0.0.1:6379 multi OK 此时客户端2执行 append key python 然后回到客户端1 127.0.0.1:6379(TX) append key jedis QUEUED 127.0.0.1:6379(TX) exec (nil) 127.0.0.1:6379 get key javapython 127.0.0.1:6379 Redis提供了简单的事务之所以说它简单主要是因为它不支持 事务中的回滚特性同时无法实现命令之间的逻辑关系计算当然也体现了Redis的“keep it simple”的特性下一小节介绍的Lua脚本同样可以实现事务的相关功能但是功能要强大很多。 3.Java如何使用redis事务 我们前面通过redis客户端命令来学习了事务在程序中我们一定是让java调用某个api来实现这些功能的。 我们介绍过jedis的用法使用jedis来实现事务功能的代码也非常简单 import redis.clients.jedis.Jedis; import redis.clients.jedis.Transaction;public class JedisTransactionDemo {public static void main(String[] args) {Jedis jedis new Jedis(localhost, 6379);Transaction transaction jedis.multi(); // 开启事务try {transaction.set(name, 哈哈);transaction.set(age, 18);transaction.exec(); // 提交事务} catch (Exception e) {transaction.discard(); // 回滚事务} finally {jedis.close(); // 关闭连接}} }
http://www.zqtcl.cn/news/94825/

相关文章:

  • 沈阳网站备案照相离婚证app制作软件
  • 唯品会一家做特卖的网站 分析那些网站可以做反链
  • 百度网站排名查询工具网站标签怎么做
  • 如何用ps做网站导航一个网站开发时间
  • 合肥城乡建设网站06628 网页制作与网站建设
  • 网站设计岗位的职责与要求北京网站建设 合一
  • 网站制作app开发公司网站建设 英文
  • 毕业设计网页制作网站建设网站预约挂号怎么做
  • 河东天津网站建设永州做网站的公司
  • 网页制作与网站建设填空题免费的企业邮箱怎么申请
  • 智慧农业网站建设沈阳建设信息网
  • 永久免费素材网站个人网站域名所有权
  • 做网站都需要什么工具网站开发培训哪里好
  • 做网站里面的图片像素要求安徽 网站建设
  • 电子商务推广网站wordpress小程序搭建
  • 张家港网站开发培训广告代理那些平台可以给网站做外链
  • 搞一个公司网站得多少钱中国航天空间站最新消息
  • php移动网站开发微商做图王官方网站
  • 制作网站中英文字体不能为网页设计与制作教程试题
  • 网站建设与管理案例柳洪轶wordpress学校站模板
  • 湖北省和住房建设厅官方网站自媒体专业
  • 榆林网站开发自己建设购物网站
  • 新材建设局网站百度提问首页
  • 网站优化网站建设栅格布局 网站设计
  • 网站建设销售前景网站手机开
  • 网站建站 用户注册北京网站建设方案报价
  • jsp做网站 案例网站模板 招聘
  • 德州建设银行兑换网站服务器网站跳转怎么做的
  • 金华专业做网站公司湖南网站建设服务
  • 企业网站设计沈阳苏宁电器网站建设特点分析