关于redis集群和事务

最近为了核算项目的两个架构指标(可用性和伸缩性),需要对项目中使用的Redis数据库的集群部署进行一定程度的了解,当然顺便再学习一遍它的事务细节。

既然我在上面把Redis称之为数据库,那么在我们目前的项目里,它自然就需要持久化相关的数据,而不仅仅充当缓存而已!

在网上逛了一遍,看了不少关于redis集群搭建的文章,有一些把redis的主备当集群来讲的,也有一些讲的是以第三方代理方式搭建集群的,比较新的是讲的redis3.0beta提供的服务器端实现集群的~~

比较有代表型的一款中间代理方式实现redis集群的开源产品是Twitter推出的twemproxy。而这种方式的优劣,redis的作者早已经写过一篇分析的文章了,相信大家读过以后就能了解其中的好坏。

在这里,我主要是贴一下关于twemproxy对redis命令的支持情况的细节,相信有了这个数据,我们在设计使用redis时可以起到指导的作用。

另外,twemproxy中不少命令的支持与否需要依赖Hash Tags,简单粗暴解释的话,其实就是说twemproxy支持指定key中的某一部分用来做hash散列,这样就有助于把相关的一些数据分布在同一台服务器上,从而避免一些指令导致数据在多服务器之间不必要的迁移而影响了性能!

从这个表格中我们注意到,twemproxy不支持redis的事务操作,原因其实在上面给出的文章中已经解释了~这里我主要想来聊一下redis的事务到底是什么?记忆中看过一篇文章,模糊记得redis的事务和传统关系型数据库的事务是存在差异的。

先看一下这篇文章,写的已经非常之详细了,不是么?我们必须搞清楚: 原子性、一致性和回滚功能。这可能显得有一些过于纠结定义了,不过查了一下GG才发现,其实关于原子性和一致性的理解却是有很多种说法~~而我更偏向于下面这种解释:

  • **一致性:**如果事务启动时数据是一致的,那么当这个事务成功结束的时候数据库也应该是一致的;
  • **原子性:**事务的所有操作在数据库中要么全部正确反映,要么全部不反映。

分别举例子来说,一致性就是数据库的数据状态符合数据库所描述的业务逻辑和规则,比如最简单的一条一致性规则:银行账户存款余额不能是负值。

而原子性就是其字面解释:要么都执行,要么都取消!这时候就需要数据库事务有回滚能力。不难理解吧?

接下来我们再说redis的事务,上面的资料中提到:

当事务失败时,Redis 也不会进行任何的重试或者回滚动作。

也就是说,redis不具备事务原子性(非事务下的redis命令具备原子性)。看一个代码例子:

set name kazaff0  	//首先我们为key为name的键设置了一个值:kazaff0
multi				//开启事务
set name kazaff1	//事务里我们修改name的值为kazaff1
lpush name kazaff2	//故意造成一个执行错误
exec				//提交事务
get name			//?

可以猜出最后一条指令的返回结果应该:kazaff1。为什么?因为redis不支持事务失败后回滚!

但是需要注意的是,服务器在执行事务之前会先检查客户端的状态,如果发现不满足事务执行的条件的话服务器端会直接终止事务,也就是说任务队列中的指令一条都没有执行!

为什么要注意这一点呢?也就是说只有执行错误才会需要回滚,而watch,discard,入队错误等都不需要回滚,因为执行队列中的指令压根一条都没有执行过!

以前总是把redis的事务和pipe看成一个东西:打包执行指令~~但现在才发现,完全两码事儿嘛!!


参考:
理解事务的一致性和原子性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/42131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FreeRTOS 中delay、xtestdelay、xtestdelayUntil的区别

在 FreeRTOS 中,延迟功能对于任务调度至关重要。vTaskDelay、vTaskDelayUntil 和 xtestdelay 是常用的延迟函数,但它们在功能和适用场景上有所不同。本文将简要说明它们的区别,并通过示例代码展示每个函数的典型用法。每个函数的具体细节请参…

python爬虫入门(一)之HTTP请求和响应

一、爬虫的三个步骤(要学习的内容) 1、获取网页内容 (HTTP请求、Requests库) 2、解析网页内容 (HTML网页结构、Beautiful Soup库) 3、存储或分析数据 b站学习链接: 【【Python爬虫】爆肝两…

基于大象机器人UltraArm P340机械臂和传送带,实现教育场景中的自动化分拣系统!

引言 今天我们将展示一个高度自动化的模拟场景,展示多个机械臂与传送带协同工作的高效分拣系统。在这个场景中,机械臂通过视觉识别技术对物体进行分类,并通过精确的机械操作将它们放置在指定的位置。这一系统不仅提高了分拣的速度和准确性&am…

CH12_函数和事件

第12章:Javascript的函数和事件 本章目标 函数的概念掌握常用的系统函数掌握类型转换掌握Javascript的常用事件 课程回顾 Javascript中的循环有那些?Javascript中的各个循环特点是什么?Javascript中的各个循环语法分别是什么?…

java面试-java基础(中)

文章目录 一、面向对象OOP和面向过程OPP区别?二、面向对象有哪些特性?三、重载和重写区别?四、private,default,protected,public访问控制符范围五、抽象类和接口有什么区别?如何选用&#xff1…

什么是医学影像数据?

医学影像数据是指通过各种影像技术获取的人体内部结构和功能的可视化数据。这些影像技术包括但不限于X射线、计算机断层扫描(CT)、磁共振成像(MRI)、超声波(US)和正电子发射断层扫描(PET&#x…

【ue5】虚幻5同时开多个项目

正常开ue5项目我是直接在桌面点击快捷方式进入 只会打开一个项目 如果再想打开一个项目需要进入epic 再点击启动就可以再开一个项目了

Hadoop-16-Hive HiveServer2 HS2 允许客户端远程执行HiveHQL HCatalog 集群规划 实机配置运行

章节内容 上一节我们完成了: Metastore的基础概念配置模式:内嵌模式、本地模式、远程模式实机配置远程模式 并测试 背景介绍 这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。 之前已经在 V…

昇思25天学习打卡营第13天|K近邻算法实现红酒聚类

K近邻算法(K-Nearest-Neighbor, KNN)是一种用于分类和回归的非参数统计方法,是机器学习最基础的算法之一。它正是基于以上思想:要确定一个样本的类别,可以计算它与所有训练样本的距离,然后找出和该样本最接…

牛客链表题:BM1 反转链表(取头放尾法)

描述 给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 数据范围: 0≤𝑛≤10000≤n≤1000 要求:空间复杂度 &…

TA都可以使用哪些存储接口?分别都存放在了哪里?

思考: 如何开发一个TA? sdk又是什么?开发一个TA的流程是怎样的?How to do?有关TA的签名介绍TEE开发Secure driver介绍RPMB的简介以及开发流程共享内存的最大限制是什么?TA的栈内存/堆内存又有哪些限制TA都支持哪些密码学算法?TA都可以使用哪些存储接口?分别都存放在了哪…

数据埋点从入门到了解

想讲讲为什么有埋点,举个例子 目录 什么是埋点?用途小红书上 埋点的主要类型代码示例1. 代码埋点前端埋点后端埋点 (Node.js 示例) 2. 全埋点示例3. 可视化埋点示例 解释常见问题埋点管理系统结论 王五是一名数据分析师,负责分析公司产品的用…

C++语言相关的常见面试题目(三)

1. List底层实现原理 省流: list底层实现了一个双向循环链表。 每个元素(或节点)包含三个部分:数据域(_M_Storage)、前驱指针(_M_prev)、后继指针(_M_next)。 数据域:存储实际数据。 前驱指针:指向链表中…

Mysql 数据库主从复制-CSDN

查询两台虚拟机的IP 主虚拟机IP 从虚拟机IP服务 修改对应的配置文件 查询对应配置文件的命令 find / -name my.cnf编辑对应的配置文件 主 my.cnf (部分配置) [mysqld] ########basic settings######## server_id 1 log_bin /var/log/mysql/mysql-…

gnome 建议安装的扩展

安装 扩展管理器: sudo apt install gnome-shell-extension-manager在 扩展管理器 里搜索并添加 扩展 推荐 Applications Menu:自带。左上角显示 应用程序 按钮,以下拉菜单分类显示应用RunCat:状态栏里显示一只猫和 cpu 利用率…

[激光原理与应用-98]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 2 - 什么是激光器焊接? 常见的激光焊接技术详解

目录 一、什么是激光焊接 1.1 概述 1.2 激光焊接的优点 二、激光焊接的应用 2.1 哪些场合必须使用激光焊接 1. 汽车制造业 2. 航空航天领域 3. 电子行业:消费类电子3C 4. 医疗器械制造 5. 新能源锂电池行业 6. 其他领域 三、激光焊接的分类 3.1 按焊接…

【ONLYOFFICE8.1】ONLYOFFICE8.1版本桌面编辑器测评

有宝子说office太贵,不适合个人和学生,而WPS不仅贵广告还多,那么有没有一款软件可以替代office和WPS呢?...当然有喽。当当当当!它就是众望所归、备受好评的ONLYOFFICE。下面就和小编一起来探索和测评一下ONLYOFFICE8.1…

深入解析怀庄之醉酱酒的独特魅力

在众多美酒中,酱酒以其独有的风格和丰富的文化内涵,赢得了无数鉴赏家的青睐。本文旨在从专业角度深入探讨酱酒的空杯留香现象、典型色泽特性及品鉴技巧,揭示其背后的科学原理与艺术魅力,助您更全面地理解与欣赏这一中华传统佳酿。…

C++报错无法访问Private

严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C2248 “main::Person::~Person”: 无法访问 private 成员(在“main::Person”类中声明) #include<iostream> #include<ctime> int main() {using namespace std;class Person{//Per…

响应式设计的双璧:WebKit 支持 CSS Flexbox 和 Grid 布局深度解析

响应式设计的双璧&#xff1a;WebKit 支持 CSS Flexbox 和 Grid 布局深度解析 在现代网页设计中&#xff0c;响应式布局是实现跨设备兼容性的关键。CSS Flexbox 和 Grid 作为 CSS 布局的两大支柱&#xff0c;提供了强大的工具来构建灵活和复杂的用户界面。WebKit&#xff0c;作…