redis事务理解

[b]redis事务理解[/b]


1.redis是以单进程的形式运行的,命令是一个接着一个执行的.
2.其实redis本事是不会存在并发问题的,因为他是单进程的,再多的command都是one by one执行的。我们应用的时候,
可能会出现并发问题.(如读了再更改,读写之间如果有别的应用进行了写就会出现并发问题)


[b]redis中的事务[/b]
redis中也是有事务的,不过这个事务没有mysql中的完善,只保证了一致性和隔离性,不满足原子性和持久性。
edis事务使用multi、exec命令
1.原子性,在redis事务中如果有某一条命令执行失败,其后的命令仍然会被继续执行,并不会自动回滚。
kill信号、宿主机宕机等导致事务执行失败,redis也不会进行重试或者回滚。
2.持久性,redis事务的持久性依赖于redis所使用的持久化模式,遗憾的是各种持久化模式也都不是持久化的(也可能会丢失数据)。
3.隔离性,redis是单进程,开启事务之后,会执行完当前连接的所有命令直到遇到exec命令,才处理其他连接的命令。


[b]持久化模式(AOF,RDB)[/b]
[b]AOF[/b]
1.AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。
2.AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后台对 AOF 文件进行重写(rewrite),
使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小。
3.这种保存是由后台线程进行的,主线程不会阻塞直到保存成功,所以从命令执行成功到数据保存到硬盘之间,还是有一段非常小的间隔,所以
这种模式下的事务也是不持久的。

[b]AOF的优点:[/b]
1.使用 AOF 持久化会让 Redis 变得非常耐久(much more durable):你可以设置不同的 fsync 策略,比如无 fsync ,
每秒钟一次 fsync ,或者每次执行写入命令时 fsync 。
2.AOF 的默认策略为每秒钟 fsync 一次,在这种配置下,Redis 仍然可以保持良好的性能,并且就算发生故障停机,也最多
只会丢失一秒钟的数据( fsync 会在后台线程执行,所以主线程可以继续努力地处理命令请求)。
3.AOF 文件是一个只进行追加操作的日志文件(append only log), 因此对 AOF 文件的写入不需要进行 seek , 即使日志
因为某些原因而包含了未写入完整的命令(比如写入时磁盘已满,写入中途停机,等等), redis-check-aof 工具也可以轻
易地修复这种问题。
4.Redis 可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写: 重写后的新 AOF 文件包含了恢复当前数据集所
需的最小命令集合。

[b]AOF 的缺点:[/b]
1.对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积。
2.根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB 。


[b]RDB[/b]
RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)

[b]RDB 的优点:[/b]
1.RDB 是一个非常紧凑(compact)的文件,它保存了 Redis 在某个时间点上(多长时间备份一次)的数据集。
2.它只有一个文件,并且内容都非常紧凑,可以(在加密后)将它传送到别的数据中心。
3.RDB 可以最大化 Redis 的性能:父进程在保存 RDB 文件时唯一要做的就是 fork 出一个子进程,然后这个子进程就会处理接下
来的所有保存工作,父进程无须执行任何磁盘 I/O 操作。
4.RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。

[b]RDB 的缺点:[/b]
如果你需要尽量避免在服务器故障时丢失数据,那么 RDB 不适合你。(有一个备份时间间隔)


[b]RDB与AOF选择的标准[/b]
选择的标准,就是看系统是愿意牺牲一些性能,换取更高的缓存一致性(aof),还是愿意写操作频繁的时候,不启用备份来换取更
高的性能,待手动运行save的时候,再做备份(rdb)。


[b]Jedis连接池[/b]
1.就是在开始的时候就建好多个连接并放入池中,当线程需要时就向池中申请一个回来,用完就释放回池中.
2.单一Jedis实例不是线程安全的(因为里面可能有公用部分存在)。
3.为了避免这些问题,可以使用JedisPool, JedisPool是一个线程安全的网络连接池。(因为每个线程都是从连接池中
得到一个Jedis实例,线程得中独占,所以上线程安全的)
4.当然每个线程也可以自己建一个Jedis实例,但每个线程都自己建一个Jedis实例就会建立很多sokcet连接,影响性能.


参考原文:[url]http://blog.csdn.net/jackpk/article/details/30073097[/url]
参考原文:[url]http://www.cnblogs.com/iforever/p/5796902.html[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jie310600

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值