Redis的事务性

news/2025/2/12 19:17:03

简介:

Redis我们常常称其为内存数据库,而在传统的关系型数据库中,事务性又是不得不面临的一个问题,所谓事物性,说简单点,就是一组数据库操作之间是有关联关系的,要么全部都执行成功,要不就都不执行

那么这里,我们就了解下Redis的事物是怎么处理的。


Reids事物

首先要清楚几个概念:

1、Redis的单条命令是保持原子性的,但是事物不保证原子性。

(Reids事物的本质:一组命令的集合,一个事物中的所有命令都会 被序列化,然后按照顺序执行,一次性、顺序性、排他性的执行一系列命令)。

2、Redis事物没有隔离级别的概念。

  所有在事物中的命令,并没有直接被执行,只有发起执行命令的时候才会执行。Exec

3、Redis事物过程

  • 开启事物(multi)
  • 命令入队(........)
  • 执行事物(exec)
127.0.0.1:6379> multi  #开启事物
OK
127.0.0.1:6379> set aa a
QUEUED
127.0.0.1:6379> set bb b
QUEUED
127.0.0.1:6379> get aa
QUEUED
127.0.0.1:6379> get bb
QUEUED
127.0.0.1:6379> exec #执行事物
1) OK
2) OK
3) "a"
4) "b"
127.0.0.1:6379>

如上,可以看到,命令先入队,然后在执行命令时,才依次执行。

放弃事物:

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set aa a
QUEUED
127.0.0.1:6379> set bb b
QUEUED
127.0.0.1:6379> set cc c
QUEUED
127.0.0.1:6379> discard  #放弃事物
OK

4、事物异常处理

  • 编译型异常,(代码有问题,命令错误)事物中所有命令都不执行。
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 ke
QUEUED
127.0.0.1:6379> set ke kek
QUEUED
127.0.0.1:6379> getset k3   # 命令有误
(error) ERR wrong number of arguments for 'getset' command
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> exec
(error) EXECABORT Transaction discarded because of previous errors. #抛出异常
  • 运行时异常(1/0),如果事物队列中存在语法性错误,那么执行命令时,其它命令是可以正常执行的。错误命令抛出异常。
127.0.0.1:6379> multi
OK
127.0.0.1:6379> incr k1  #这里对一个字符串+1,会出现错误
QUEUED
127.0.0.1:6379> set k2 kk
QUEUED
127.0.0.1:6379> set k3 ddd
QUEUED
127.0.0.1:6379> exec
1) (error) ERR value is not an integer or out of range   #只有这一条会抛错
2) OK
3) OK

 


https://dhexx.cn/news/show-4151897.html

相关文章

java 查询字符串中首个数字出现的位置

/*** 查询字符串中首个数字出现的位置* param str 查询的字符串* return 若存在,返回位置索引,否则返回-1;*/public static int findFirstIndexNumberOfStr(String str){int i -1;Matcher matcher Pattern.compile("[0-9]").matc…

Java 从List中删除空值

1. Java 7或更低版​​本&#xff1a;list.removeAll(Collections.singleton(null)); 2. Java 8或更高版本(推荐): public void removeAllNullsFromListWithJava8() {List<String> list new ArrayList<>(Arrays.asList("A", null, "B", nul…

nginx部署 上传文件提示413 Request Entity Too Large错误

现象&#xff1a; 在开发中&#xff0c;用nginx作为代理服务器进行web项目部署&#xff0c;在上传Excel文件时&#xff0c;出现如下错误&#xff1a; 原因&#xff1a; 这是因为nginx在默认的设置网页上传文件的最大值是1M client_max_body_size 1M #设置网页上传文件的最大…

nginx 报 upstream sent too big header while reading response header from upstream

场景&#xff1a; 以Nginx作为代理服务器进行负载均衡处理&#xff0c;发布项目为一个互联网项目&#xff0c;在进行一个接口调用时&#xff08;此接口为上传Excel并解析&#xff0c;解析的一部分数据会在后端存储到cookie中&#xff09;。 正常上传Excel是没问题的&#xff…

Java POI解析Excel的跨Sheet读取数据验证下拉值

存在一个Excel文件&#xff0c;其中有列数据是下拉选择&#xff0c;且下拉的来源是在另外一个Sheet中 这个时候&#xff0c;我们使用POI对其进行解析&#xff0c;想获得数据验证的个数&#xff1a;sheet.getDataValidations() public static void main(String[] args) throws E…

Java Excel 列号数字与字母互相转换

在工作中Excel解析时&#xff0c;常常需要将列号的字母转换成对应的数字序号。 package test;public class ExcelColumn {public static void main(String[] args) {String colstr "AA";int colIndex excelColStrToNum(colstr, colstr.length());System.out.print…

Nginx配置上传文件大小上限

在用Nginx做代理服务器时&#xff0c;上传文件&#xff0c;发现上传不了。 在nginx.conf配置文件中的http块中配置client_max_body_size参数 http {include mime.types;default_type application/octet-stream;client_header_buffer_size 512k;large_client_header_bu…

npm ERR! Response timeout while trying to fetch https://registry.npmjs.org/npm (over 30000ms)

问题&#xff1a; 如标题所示&#xff0c;在适用npm对vue-element-admin进行安装时执行命令 npm install 执行后报如下错误&#xff1a; npm ERR! Response timeout while trying to fetch https://registry.npmjs.org/npm (over 30000ms) 原因&#xff1a; 通过命令查询镜…

npm国内镜像及配置方法

npm全称Node Package Manager&#xff0c;是node.js的模块依赖管理工具。由于npm的源在国外&#xff0c;所以国内用户使用起来各种不方便。下面整理出了一部分国内优秀的npm镜像资源&#xff0c;国内用户可以选择使用。 国内优秀npm镜像 淘宝npm镜像 搜索地址&#xff1a;htt…

Vue computed vs methods

先看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><div id"app"><p>Original message: "{{ message…