疑点如下伪代码中//其中con客户端redis链接,key1,key2分别是两个键funchandler(con,key1,key2){con.mutl()con.set(key1,value1)//我的疑问是在这里:当本事务执行的过程中,也就是被redis-server执行的过程中,//key2的值没有没有可能被改变?在什么情况下才会变?谢谢您的回答con.exec()}MUTL/EXEC执行事务中redis是不是还可以同时改变其他的键值?概念理解redis事务的作用:1.保证被事务包含的命令要么全部执行,要么全部不执行(注意:在执行事务的过程中遇到错误可能会导致有些命令不能执行).2.保证被事务包含的命令执行时不被打断.对于第二点来说,于任何客户端来说启用多线程来执行被事务包含的代码没多大效果;因为redis是一个进程(没有多线程),也就是说执行体只有一个;同时又因为事务的存在,同一时刻只有一个事务在执行(事务包含命令没有并行执行),所以说客户端通过多线程方式执行被redis事务包含的命令作用不大;同时也说明被事务包含的代码可以防止资源的竞争.伪代码说明fori=0;i<3;i++{//启用新的线程执行命令newThread.doTaskBackground(doTransTask);}doTransTask(){MULTI;//事务开始//othercommandssetkey1value1//因为事务执行过程不被打断,对于key1的设置不存在竞争EXEC;//事务结束}以上是自己的理解,有错误的地方还请指出.如果您有什么心得也可以告知与我.谢谢!
慕码人2483693
千万里不及你
相关分类