首页 > 数据库 >24. Redis---Lua脚本

24. Redis---Lua脚本

时间:2022-08-20 17:23:42浏览次数:99  
标签:24 事务 127.0 0.1 Redis --- 6379 key

1. 前言

Redis 事务的目的是方便用户一次执行多个命令。执行 Redis 事务可分为三个阶段:

  • 开始事务
  • 命令入队
  • 执行事务

2. Redis事务特性

Redis 事务具有两个重要特性:

1) 单独的隔离操作

事务中的所有命令都会被序列化,它们将按照顺序执行,并且在执行过的程中,不会被其他客户端发送来的命令打断。

2) 不保证原子性

在 Redis 的事务中,如果存在命令执行失败的情况,那么其他命令依然会被执行,不支持事务回滚机制。

注意:Redis 不支持事务回滚,原因在于 Redis 是一款基于内存的存储系统,其内部结构比较简单,若支持回滚机制,则让其变得冗余,并且损耗性能,这与 Redis 简单、快速的理念不相符合。

3. Redis事务命令

Redis事务命令
命令说明
MULTI 开启一个事务
EXEC 执行事务中的所有命令
WATCH key [key ...] 在开启事务之前用来监视一个或多个key 。如果事务执行时这些 key 被改动过,那么事务将被打断。
DISCARD 取消事务。
UNWATCH 取消 WATCH 命令对 key 的监控。

4. Redis事务应用

您可以把事务可以理解为一个批量执行 Redis 命令的脚本,但这个操作并非原子性操作,也就是说,如果中间某条命令执行失败,并不会导致前面已执行命令的回滚,同时不会中断后续命令的执行(不包含监听 key 的情况)。示例如下:

开启事务
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> INCR 1
QUEUED #命令入队成功
127.0.0.1:6379> SET num 10
QUEUED
#批量执行命令
127.0.0.1:6379> EXEC
1) (integer) 1
2) OK

若您在事务开启之前监听了某个 key,那么您不应该在事务中尝试修改它,否则会导致事务中断。

开启事务之前设置key/value,并监听
127.0.0.1:6379> set www.biancheng.net hello
OK
127.0.0.1:6379> WATCH www.biancheng.net
OK
127.0.0.1:6379> get www.biancheng.net
"hello"
#开启事务
127.0.0.1:6379> MULTI
OK
#更改key的value值
127.0.0.1:6379> set www.biancheng.net HELLO
QUEUED
127.0.0.1:6379> GET www.biancheng.net
QUEUED
#命令执行失败
127.0.0.1:6379> EXEC
(error) EXECABORT Transaction discarded because of previous errors.
#取消监听key
127.0.0.1:6379> UNWATCH 
OK 

在线练习工具:https://try.redis.io/
查看更多 Redis 命令:https://redis.io/commands

标签:24,事务,127.0,0.1,Redis,---,6379,key
From: https://www.cnblogs.com/jiajunling/p/16608182.html

相关文章

  • JAVA基础--类型转换--2022年8月20日
    第一节1、为什么要进行类型转换存在不同类型的变量给赋值给其他类型的变量2、自动类型转换是什么样的类型范围小的变量,可以直接赋值给类型范围大的变量 第......
  • 25. Redis---性能测试
    1.前言为了解Redis在不同配置环境下的性能表现,Redis提供了一种行性能测试工具redis-benchmark(也称压力测试工具),它通过同时执行多组命令实现对Redis的性能测试。性......
  • SQLAlchemy学习-10. validates()校验器
    前言向属性添加“验证”的一种快速方法是使用validates()装饰器。校验器属性验证器可以引发异常,停止改变属性值的过程,或者可以将给定值更改为不同的值。与所有属性扩......
  • 22. Redis---地理位置
    1.前言在Redis3.2版本中,新增了存储地理位置信息的功能,即GEO(英文全称geographic),它的底层通过Redis有序集合(zset)实现。不过RedisGEO并没有与zset共用一套的命令......
  • "蔚来杯"2022牛客暑期多校训练营1 G-Lexicographical Maximum
    问题描述EibwenisanewbieinPython.Youmightknowthatwhenyouinputanumberinthecommandline,yourPythonprogramwillreceiveastringcontainingth......
  • Objective-C的IDE开发集成环境
    AppCodeforMac是适用于Mac操作系统的全新智能Objective-C的IDE开发集成环境,帮助开发者来开发Mac、iphone和iPad等iOS系统的相关应用程序,是从事iOS开发工作者必不可少的工......
  • go protoc-gen-go 安装记录
    按照教程安装gogetgithub.com/golang/protobuf/protoc-gen-go报错如下错误  我使用的go版本是1.17。而Go1.17版使用goinstall安装依赖。所以应该按照......
  • Redis知识点总结
    Redis的淘汰策略有哪几种?volatile-lru从已设置过期时间的数据集中挑选最近最少使用的数据淘汰volatile-ttl从已设置过期时间的数据集中挑选将要过期的数据淘汰......
  • CSS3 响应式布局: @media (min/max-width:***) @font-face
    https://www.cnblogs.com/hualiu0/p/5319046.html 响应式布局responsivedesign@media属性bootstrap css分析:@media(min-width:768px){body{***}}use@me......
  • 一些关于Viewport与device-width的东西~
    https://www.cnblogs.com/koukouyifan/p/4066567.html进行移动web开发已经有一年多的时间了,期间遇到了一些令人很困惑的东西。比如:我们经常使用的<metaname="viewpor......