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

网站建设公司有多少当地信息网站建设资质

网站建设公司有多少,当地信息网站建设资质,网络运营和网络营销的区别,源码论坛有哪些概述 Redis事务提供一种将多个命令打包#xff0c;然后一次性、按顺序地执行的机制#xff0c;在事务执行的期间不会主动中断#xff0c;服务器在执行完事务中的所有命令之后#xff0c;才会继续处理其他客户端的其他命令。 三个重要的保证#xff1a; 批量操作在发送E…概述 Redis事务提供一种将多个命令打包然后一次性、按顺序地执行的机制在事务执行的期间不会主动中断服务器在执行完事务中的所有命令之后才会继续处理其他客户端的其他命令。 三个重要的保证 批量操作在发送EXEC命令前被放入队列缓存收到EXEC命令后进入事务执行事务中任意命令执行失败其余的命令依然被执行在事务执行过程其他客户端提交的命令请求不会插入到事务执行命令序列中 Redis中的事务是一组命令的集合事务也是Redis最小的执行单位一个事务中的命令要么都执行要么都不执行。 Redis事务由5个命令来实现 MULTI标记一个事务块的开始。开启Redis事务置客户端为事务态EXEC提交事务执行从MULTI到此命令前的命令队列置客户端为非事务态DISCARD取消事务置客户端为非事务态WATCH监视键值对作用时如果事务提交EXEC时发现监视的监视对发生变化事务将被取消UNWATCH取消WATCH命令对所有Key的监视 事务从开始到执行会经历以下三个阶段 开始事务命令入队执行事务 MULTI标记事务的开始将客户端状态的flags属性的REDIS_MULTI选项打开让客户端从非事务状态切换到事务状态。 命令入队 Redis客户端处理非事务状态时命令会立即被服务端执行。但是事务状态下如果客户端发送的命令是上面四个命令其一则服务器立即执行除此之外服务器并不立即执行命令而是将命令放入事务队列里面向客户端返回QUEUED回复。 WATCH Redis使用WATCH命令监视给定的Key当EXEC时如果监视的Key从调用WATCH后发生过变化则整个事务会失败。也可以调用WATCH多次监视多个Key这样就可以对指定的Key加乐观锁。注意WATCH的Key是对整个连接有效的事务也一样。如果连接断开监视和事务都会被自动清除。当然EXECDISCARDUNWATCH命令都会清除连接中的所有监视。 实战 本文使用的Redis版本为Windows下7.4.0版本。 empty array 执行MULTI命令后没有其他命令直接输入EXEC命令不报错 127.0.0.1:6379 multi OK 127.0.0.1:6379(TX) exec (empty array)WATCH 可用于实现类似于乐观锁效果即CAScompare and set。 WATCH用于监视Key是否被改动过支持同时监视多个Key只要还没真正触发事务WATCH都会尽职尽责的监视。当多个线程更新同一个Key值时会跟原值做比较一旦发现它被修改过则拒绝执行命令执行EXEC时就会返回nil表示事务无法触发。 双击redis-cli.exe打开一个命令行窗口依次执行如下命令 127.0.0.1:6379 watch age OK 127.0.0.1:6379 multi OK 127.0.0.1:6379(TX) set age 31 QUEUED双击redis-cli.exe打开另一个命令行窗口执行如下命令 127.0.0.1:6379 set age 32 OK回到第一个窗口客户端提交EXEC命令 127.0.0.1:6379(TX) exec (nil)命令返回(nil)表示事务无法触发。因为另外一个客户端通过set命令更新过Key。 哪怕是值不变有过set key动作就会更新更新时间戳字段猜测和MVCC机制比较类似Redis源码待调研。 客户端一执行 127.0.0.1:6379 set age 11 OK 127.0.0.1:6379 watch age OK 127.0.0.1:6379 multi OK 127.0.0.1:6379(TX) set age 12 QUEUED客户端二执行 127.0.0.1:6379 get age 11 # 在客户端一执行set后可get获取 127.0.0.1:6379 set age 11 OK # 在客户端一执行watch后尝试set更新到相同的年龄客户端一执行 127.0.0.1:6379(TX) exec (nil)执行结果也是(nil)。 事务错误 两类错误 调用EXEC之前的错误调用EXEC之后的错误 EXEC执行前出错如语法有误内存不足导致。只要出现某个命令无法成功写入缓冲队列的情况Redis都会进行记录在客户端调用EXEC时Redis会拒绝执行这一事务。 127.0.0.1:6379 multi OK 127.0.0.1:6379(TX) he (error) ERR unknown command he, with args beginning with: 127.0.0.1:6379(TX) set he he QUEUED 127.0.0.1:6379(TX) exec (error) EXECABORT Transaction discarded because of previous errors.EXEC执行后出错Redis不会理睬这些错误而是继续向下执行事务中的其他命令。对于应用层面的错误并不是Redis需要考虑和处理的问题所以事务中如果某一条命令执行失败并不会影响接下来的其他命令的执行。 127.0.0.1:6379 multi OK 127.0.0.1:6379(TX) set age 34 QUEUED 127.0.0.1:6379(TX) sadd age 35 QUEUED 127.0.0.1:6379(TX) set age 35 QUEUED 127.0.0.1:6379(TX) exec 1) OK 2) (error) WRONGTYPE Operation against a key holding the wrong kind of value 3) OK (0.53s) 127.0.0.1:6379 get age 35这里可以得出一个很重要的结论在执行事务时某个命令执行失败并不会影响其他命令的执行即Redis 的事务并不会回滚。 Lua集成 Lua脚本集成参考Redis系列之Lua脚本整合。 ACID 传统事务四个核心特性即ACID。为了保持简单Redis事务保证其中的一致性和隔离性不满足原子性和持久性 原子性 在执行事务命令时在命令入队时Redis检测事务里的命令是否正确即是否有语法错误如果不正确则会产生错误。事务里的命令是批量提交执行的也就是命令还没执行当然也就不存在回滚一说 当命令格式正确而因为操作数据结构引起的错误则该命令执行时才会出现错误而其之前和之后的命令都会被正常执行。 参考You Don’t Need Transaction Rollbacks in Redis以及Redis Transactions Redis does not support rollbacks of transactions since supporting rollbacks would have a significant impact on the simplicity and performance of Redis. 翻译支持回滚会对 Redis 的简单性和性能产生重大影响。 一致性 一致性指的就是事务执行前后的数据符合数据库的定义和要求。 Redis符合要求不论是发生语法错误还是运行时错误错误的命令均不会被执行。 隔离性 多个事务并发执行各个事务之间不会互相影响。原因Redis事务不会中断且是单线程执行事务。 持久性 对于事务的执行来说如果Redis开启AOF持久化那么一旦事务被成功执行事务中的命令就会通过write命令一次性写到磁盘中去如果在向磁盘中写的过程中恰好出现断电、硬件故障等问题可能出现只有部分命令进行AOF持久化这时AOF文件就会出现不完整的情况这时可使用redis-check-aof工具将AOF文件中不完整的信息移除确保AOF文件完整可用。 原理 Redis中每个客户端都有记录当前客户端的事务状态multiState客户端client定义在server.h源码里 typedef struct client {uint64_t id; // 客户端唯一idmultiState mstate; // MULTI和EXEC状态(即事务状态)// 省略其他属性 } client;multiState定义如下 typedef struct multiState {multiCmd *commands; // 存储命令的FIFO队列int count; // 命令总数// 省略其他属性 } multiState;multiCmd是一个队列用来接收并存储开启事务之后发送的命令定义如下 typedef struct multiCmd {robj **argv; // 用来存储参数的数组int argv_len; // 数组长度int argc; // 参数的数量struct redisCommand *cmd; // 命令指针 } multiCmd;类结构图 拓展 Redis事务在真实业务场景中的应用 批量操作如果你需要对多个键进行原子性修改Redis事务可以确保这些操作在没有被中断的情况下执行。例如批量更新用户积分、库存等乐观锁场景在高并发环境下使用WATCH可以监控某些关键键的变化防止并发修改带来的数据不一致问题复杂多键操作在需要对多个键进行依赖性操作时比如从一个账户扣款同时向另一个账户转账Redis事务可以确保这类操作的完整性。 局限性 缺乏回滚机制如果事务中的某个命令执行失败Redis不会回滚已经执行的命令这在某些需要严格数据一致性的场景中是个问题命令执行顺序无法调整事务中的命令执行顺序是固定的无法在运行时调整如果某些条件改变无法动态改变执行顺序性能开销由于事务的执行需要在内存中排队如果队列中的命令较多可能导致阻塞和性能问题。 参考 Redis事务Redis事务
http://www.pierceye.com/news/655766/

相关文章:

  • 泸州市往建局建设银行网站名称广州网站建设 推广公司哪家好
  • 运维网站制作dw设计个人网页
  • 南城网站建设公司信息吉林省建设招标网站
  • 怎么把自己的网站上传到百度wordpress 文章拆分
  • 南湖网站建设公司百度app推广方法
  • 做海报用的图片网站数据库端口 wordpress
  • js面向对象网站开发工业控制软件开发
  • 做网站的时候说需求的专业术语app开发定制外包26
  • 辽源网站建设公司做网站有送企业邮箱吗
  • 哈尔滨网站建设可信赖惠州网站制作专业
  • 中法电商网站建设石家庄手机网站建站
  • 北京pk10做号网站官方网站怎么写
  • 半路出家去学计算机网站开发团购做的好的网站
  • 没有网站怎么做CPC模板网站一天建好
  • 淘客网站模版北京网站优化指导
  • 网站域名更改后怎么做映射石家庄新闻主持人
  • 网站报404错误怎么解决办法禹城市建设局网站
  • asp网站建设运用的技术哪里有做商城的网站
  • 沈阳的网站制作公司哪家好七七鱼竞价托管
  • 网站如何做流量赚钱地推公司
  • 众筹网站建设需要多少资金知己图书网站建设策划书
  • 开源房产网站源码网站建设需要数学
  • 网站建设云技术公司推荐企业内部管理软件
  • 网站建设与维护案列北京梵客装饰
  • 网站建设电销话术海口h5建站
  • 网站建设怎么搭建服务器梧州本地网站
  • 佛山哪个做网站的好天津建设工程信息网怎么报名的
  • 专注扬中网站建设无锡免费建设网站
  • 中国建设银行门户网站企业wordpress如何禁止注册
  • 网站 模块wordpress极简风