您的位置:首页 > 数据库 > Redis

redis中的错误

2017-01-04 14:59 169 查看

实现事务的方法

multi(开启事务)+exec(提交)+discard(放弃事务)+watch(CAS乐观锁)
lua脚本

Redis事务的特点

事务中的所有方法串行执行,执行过程不会被其它client打断;
事务是原子的,命令全执行,或全不执行,但是,Redis的原子性和关系数据库的原子性不一致,Redis虽然能保证命令全执行,但是如果某条命令在执行时出错,Redis会忽略它,继续执行下一条命令。

事务中的错误处理

语法错误或系统错误:对于这种类型的错误,在client执行事务前就能发现(事务中命令成功提交会返回queued),多数client会选择discard事务。从Redis2.6.5开始,服务端会记录这样的错误,在客户端exec时报错并自动丢弃该事务;这个命令可能会有语法错误(参数的数量错误、命令名称错误,等等),或者可能会有某些临界条件(例如:如果使用maxmemory指令,为Redis服务器配置内存限制,那么就可能会有内存溢出条件)。

执行时报错:服务端会忽略该条语句的错误,直接执行事务中的下一跳语句。例如,我们对某个键执行了错误类型的操作(例如,对一个字符串(String)类型的键执行列表(List)类型的操作)。也就是说,执行时错误没有回滚的操作,官方的说法是这样有利于保持Redis简单高效。(1.Redis 命令只会因为错误的语法而失败(并且这些问题不能在入队时发现),或是命令用在了错误类型的键上面:这也就是说,从实用性的角度来说,
失败的命令是由编程错误造成的,而这些错误应该在开发的过程中被发现,而不应该出现在生产环境中。

2.因为不需要对回滚进行支持,所以 Redis 的内部可以保持简单且快速。

 

鉴于没有任何机制能避免程序员自己造成的错误,并且这类错误通常不会在生产环境中出现,所以 Redis 选择了更简单、更快速的无回滚方式来处理事务。

)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: