原子性是指事务是一个不可分割的工作单位 , 事务中的操作要么都发生 , 要么都不发生 。
一致性(Consistency)
事务前后数据的完整性必须保持一致 。
隔离性(Isolation)
多个事务并发执行时 , 一个事务的执行不应影响其他事务的执行
持久性(Durability)
持久性是指一个事务一旦被提交 , 它对数据库中数据的改变就是永久性的 , 接下来即使数据库发生故障也不应该对其有任何影响
Redis的事务总是具有ACID中的一致性和隔离性 , 其他特性是不支持的 。当服务器运行在AOF持久化模式下 , 并且appendfsync选项的值为always时 , 事务也具有耐久性 。
Redis事务支持隔离性吗
Redis 是单进程程序 , 并且它保证在执行事务时 , 不会对事务进行中断 , 事务可以运行直到执行完所有事务队列中的命令为止 。因此 , Redis 的事务是总是带有隔离性的 。
Redis事务保证原子性吗 , 支持回滚吗
Redis中 , 单条命令是原子性执行的 , 但事务不保证原子性 , 且没有回滚 。事务中任意命令执行失败 , 其余的命令仍会被执行 。
Redis事务其他实现
基于Lua脚本 , Redis可以保证脚本内的命令一次性、按顺序地执行 ,
其同时也不提供事务运行错误的回滚 , 执行过程中如果部分命令运行错误 , 剩下的命令还是会继续运行完
基于中间标记变量 , 通过另外的标记变量来标识事务是否执行完成 , 读取数据时先读取该标记变量判断是否事务执行完成 。但这样会需要额外写代码实现 , 比较繁琐
集群方案
哨兵模式

文章插图
哨兵模式
哨兵的介绍
sentinel , 中文名是哨兵 。哨兵是 redis 集群机构中非常重要的一个组件 , 主要有以下功能:
1、集群监控:负责监控 redis master 和 slave 进程是否正常工作 。
2、消息通知:如果某个 redis 实例有故障 , 那么哨兵负责发送消息作为报警通知给管理员 。
3、故障转移:如果 master node 挂掉了 , 会自动转移到 slave node 上 。
4、配置中心:如果故障转移发生了 , 通知 client 客户端新的 master 地址 。
哨兵用于实现 redis 集群的高可用 , 本身也是分布式的 , 作为一个哨兵集群去运行 , 互相协同工作 。
1、故障转移时 , 判断一个 master node 是否宕机了 , 需要大部分的哨兵都同意才行 , 涉及到了分布式选举的问题 。
2、即使部分哨兵节点挂掉了 , 哨兵集群还是能正常工作的 , 因为如果一个作为高可用机制重要组成部分的故障转移系统本身是单点的 , 那就很坑爹了 。
哨兵的核心知识
1、哨兵至少需要 3 个实例 , 来保证自己的健壮性 。
2、哨兵 + redis 主从的部署架构 , 是不保证数据零丢失的 , 只能保证 redis 集群的高可用性 。
3、对于哨兵 + redis 主从这种复杂的部署架构 , 尽量在测试环境和生产环境 , 都进行充足的测试和演练 。
官方Redis Cluster 方案(服务端路由查询)

文章插图
官方Redis Cluster 方案(服务端路由查询)
redis 集群模式的工作原理能说一下么?在集群模式下 , redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?
简介
Redis Cluster是一种服务端Sharding技术 , 3.0版本开始正式提供 。Redis Cluster并没有使用一致性hash , 而是采用slot(槽)的概念 , 一共分成16384个槽 。将请求发送到任意节点 , 接收到请求的节点会将查询请求发送到正确的节点上执行
方案说明
1、通过哈希的方式 , 将数据分片 , 每个节点均分存储一定哈希槽(哈希值)区间的数据 , 默认分配了16384 个槽位
2、每份数据分片会存储在多个互为主从的多节点上
3、数据写入先写主节点 , 再同步到从节点(支持配置为阻塞同步)
4、同一分片多个节点间的数据不保持一致性
推荐阅读
- 彻底理解Linux 进程调度所有知识点
- 整理的一些在使用Python中常用网页字符串处理方法
- Nginx配置知识点梳理
- 普洱茶科普扫盲,茶知识扫盲
- redis实现分布式锁天然的缺陷
- DockeFIile知识点总结和发布自己的镜像
- 窥探Tomcat整体架构,server.xml常用配置解析
- 法律知识|饮料界的常青藤:备受争议的椰树牌椰汁为什么能火34年?
- 西府海棠,你不知道的小知识
- 十大茉莉花茶排名,中国十大名茶及关知识
