`
huangyongxing310
  • 浏览: 490414 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

redis事务理解

阅读更多
redis事务理解


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



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



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

AOF的优点:
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 文件包含了恢复当前数据集所
需的最小命令集合。

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


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

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

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


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



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



参考原文:http://blog.csdn.net/jackpk/article/details/30073097
参考原文:http://www.cnblogs.com/iforever/p/5796902.html
分享到:
评论

相关推荐

    springboot-redis事务

    本文将深入探讨“SpringBoot-Redis事务”这一主题,旨在帮助开发者理解如何在SpringBoot项目中利用Redis进行事务操作。 首先,SpringBoot是Spring框架的一种快速启动方式,它简化了配置,提供了自动配置的功能,...

    cpp-Redis分布式事务

    总结来说,要在C++中利用Redis实现分布式事务,我们需要理解Redis的基本命令和特性,如原子操作、发布/订阅、分布式锁和Lua脚本等。同时,选择合适的C++ Redis客户端库,并注意处理并发控制和数据一致性问题,是成功...

    记录redisson实现redis分布式事务锁

    本篇文章将详细探讨如何使用Redisson实现Redis分布式事务锁,以及在Spring Boot环境中如何进行集成。 首先,Redis作为一个内存数据库,其高速读写性能使其成为实现分布式锁的理想选择。分布式锁的主要作用是在多...

    redis事务处理:(error) EXECABORT

    然而,事务处理并非总是顺利进行,"redis事务处理:(error) EXECABORT" 是一个常见的错误提示,意味着在执行事务时遇到了问题。本文将深入探讨这个错误的原因以及如何解决。 一、Redis 事务基础 Redis 的事务机制...

    redis之相关理解分析以及面试问题总结

    - 事务:Redis支持简单事务,可以原子性地执行多个命令。 2. Redis存储机制: - 内存管理:Redis将所有数据存储在内存中,以实现高速访问。为避免内存耗尽,Redis使用LRU(最近最少使用)算法进行内存淘汰。 - ...

    redis事务常用操作详解

    在实际使用中,Redis事务适用于需要确保数据一致性的一系列操作,例如在更新用户余额时,需要同时增加用户的存款和减少其取款,这两个操作必须全部成功或全部失败,以防止数据不一致。通过事务,可以确保这样的操作...

    剖析!Redis事务实现原理

    所谓事务(Transaction),是指...事务执行以下是一个最简单的Redis事务流程:第一步跟其他的关系型数据库类似,也是需要开启一个事务,在Redis中的命令如下:Redis中使用MULTI命令标记事务的开始,可以理解为在传统关

    redis面试题之事务.zip

    Redis 是一个高性能的键值数据库,它在许多现代应用程序中被广泛使用,特别是在需要高速读写操作和数据持久化的场景下。...在面试中,对Redis事务的理解和使用经验通常是考察候选人技能的重要方面。

    Redis面试专题30道.zip

    1、什么是 Redis?...26、怎么理解 Redis 事务? 27、Redis 事务相关的命令有哪几个? 28、Redis key 的过期时间和永久有效分别怎么设置? 29、Redis 如何做内存优化? 30、Redis 回收进程如何工作的?

    C#实操控制并发之Lock和Redis分布式锁

    首先,让我们理解什么是并发控制。并发控制是指在多线程环境下确保数据的一致性和完整性,防止多个线程同时访问同一资源导致数据不一致。在C#中,Lock机制是一种常见的并发控制手段,它提供了独占访问,确保在同一...

    REDIS_redis的工具包_redisinlabview_labviewredis_labview调用redis_redis

    通过这些例子,开发者可以快速理解和学习如何在LabVIEW中有效利用Redis服务。 总结来说,`REDIS_redis的工具包`提供了在LabVIEW中无缝集成Redis的能力,使得LabVIEW程序能够利用Redis的强大功能,实现高效的数据...

    redis和redisdesktop

    5. **事务**:Redis提供了简单的事务功能,允许多个操作在原子性下执行,确保数据一致性。 6. **发布/订阅**:Redis的pub/sub(发布/订阅)模式可以实现消息传递,让多个客户端订阅同一个主题,当有新消息发布时,...

    redis win x64位 及 安装卸载RedisServer服务

    - Redis事务:通过`MULTI`、`EXEC`命令实现原子操作。 - Pub/Sub:发布/订阅模式支持实时消息传递。 - Lua脚本支持:可以在服务器端执行Lua脚本,实现复杂逻辑。 以上就是关于"redis win 64位 及 安装卸载Redis...

    redis 免安装 redis客户端 redis-desktop-manager-0.8.8.384

    Redis 是一个高性能的键值数据库,它以键值对的形式存储数据,广泛应用于缓存、消息中间件、...理解 Redis 的核心特性和如何在 Windows 环境下运行 Redis,将有助于开发者更好地利用 Redis 来提升应用的性能和可靠性。

    狂神说Redis笔记.pdf

    六、Redis事务 虽然Redis不支持ACID型事务,但提供了简单的事务功能,可以批量执行多条命令。通过MULTI、EXEC、DISCARD等命令,可以确保一组命令作为一个整体执行,提高了操作的原子性。 七、缓存策略 在使用...

    Redis_redis_

    Redis是一种高性能的键值对数据存储...例如,北京动力节点的Redis课程可能涵盖了Redis的基本概念、数据结构、持久化、复制、事务、安全等内容,杨利军老师的讲解能够帮助初学者快速上手Redis,并深入理解其工作原理。

    redis 和 redis 可视化工具

    4. **事务**:Redis 支持简单的事务,可以一次执行多个操作。 5. **发布/订阅**:支持发布订阅模式,可以用于实现消息传递。 6. **Lua 脚本**:通过内建的 Lua 解释器,可以在客户端执行脚本,实现更复杂的逻辑。 7....

    尚硅谷周阳Redis笔记

    【Redis事务】 Redis支持简单的事务功能,可以一次性执行多个命令,确保原子性。通过`MULTI`、`EXEC`命令组合实现,但不支持回滚。 【Redis主从复制】 主从复制是Redis高可用性的重要组成部分,一个主节点可以有...

    redis视图化工具

    6. 事务管理:支持Redis事务的执行和查看,确保操作的原子性。 7. 备份与恢复:方便地备份Redis数据,并在需要时进行恢复。 8. 配置管理:查看和修改Redis服务器的配置参数,优化性能。 总的来说,这款Redis视图化...

    redis-windows-Redis7.0.0.zip

    此外,Redis还支持事务(Transactions),确保一系列操作的原子性。 在Windows上安装Redis 7.0.0,你需要下载对应的zip压缩包“redis-windows-redis7.0.0”。解压后,你会看到包含`redis-server.exe`、`redis-cli....

Global site tag (gtag.js) - Google Analytics