华为云云耀云服务器L实例评测|使用redis事务和lua脚本

文章目录

云服务器的类型

云服务器类型分为三种:公有云服务器,私有云服务器,专用云服务器

公有云服务器:公有云服务器具有成本效益、弹性扩展、可靠性、高可用性、管理简便、安全性、全球化服务和技术支持等优势,适用于各种规模和类型的企业和个人需求。

私有云服务器:私有云服务器是一种用于构建和管理私有云环境的服务器。它可以提供类似于公有云的弹性计算、存储和网络资源,但是这些资源完全掌控在用户自己的控制下。私有云服务器可以部署在用户自己的数据中心。使用私有云服务器可以满足一些特定需求,例如企业有对数据安全性和隐私性的特别要求,对公有云环境不太适应。

专用云服务器:专用云服务器提供了许多优势,包括更高的性能和可扩展性、更高的安全性和隐私性,以及更大的灵活性和控制权。客户可以根据自己的需求自定义和管理专用云服务器,包括操作系统、应用程序和网络配置等。

云服务优点

  • 成本效益:云服务允许企业根据需求动态地增加或减少计算资源,避免过度投资设备和维护费用,降低运营成本。
  • 易于管理和维护:云服务提供商通常具有强大的技术团队和经验,可以为企业提供技术支持和维护服务,减轻企业管理和维护负担。
  • 灵活性和可扩展性:在云计算环境中,资源是按需分配的,企业可以根据需要随时添加或删除计算资源,以适应业务增长或下降的需要。
  • 安全性:云服务提供商通常具有专门的安全措施来保护用户的数据和隐私,例如备份、加密、网络隔离等,同时由于云计算服务集中在一个地方,采取统一的安全措施能够更有效地保护企业的数据安全。
  • 全球化服务:云服务提供商在全球范围内建立了多个数据中心,可以提供全球化的服务,满足用户在不同地域的业务需求,实现全球范围内的数据传输和访问。
  • 技术支持:云服务提供商通常提供全天候的技术支持和服务,用户可以随时获得专业的帮助和解决方案,提高了用户使用公有云服务器的便利性和可靠性。

redis

一,关系型数据库(sqlserver,mysql,oracle)的事务隔离机制说明:

下面是设置mysql数据库事务隔离机制的sql语句

set global transaction isolation level read uncommitted;

下面是事务隔离的几个机制:

  1. read uncommitted(读取未提交的数据)
    缺点:如果数据最终rollback了,那么读取的数据就错误了
  2. read committed(读取已提交的数据)
    缺点:如果在一个事务中,对通过一个数据进行了多次的读取。在多次读取的过程中,有人提交数据。那么多次读取的数据结果就会出现不一致
  3. repeatable read(重复读)
    缺点:会出现幻读
  4. serializable(串行)
    缺点:太慢

redis事务机制

  1. MULTI与EXEC命令
    以MULTI开始一个事务,然后将多个命令入队到事务中,最后由EXEC命令触发事务,一并执行事务中的所有命令
  2. DISCARD命令
    DISCARD命令用于取消一个事务,她清空客户端的整个事务队列,然后将客户端从事务状态调整回非事务状态,最后返回字符串OK给客户端,说明事务已被取消。

乐观锁:一个版本控制 update table set age=13 where v=1

悲观锁:

  1. WATCH(类似乐观锁)
    WATCH命令用于在事务开始之前监视任意数量的键:当调用EXEC命令执行事务时,如果任意一个被监视的键已经被其他用户端修改了,那么整个事务不再执行,直接返回失败。

例子一:这个例子中没有出现异常,所以所有的命令都成功了。

例子二:这个例子中,在事务开启后,有一个命令执行出错了,那么所有的命令都不会执行

例子三:这个例子中出现了两个事务,两个事务都表示自己执行成功了,但是有一个发现值并不是自己设置的,被别人覆盖了。

例子四:加上Wathch age后,再来执行事务。

左边的在开启事务之后,exec执行之前,右边有另外一个事务对age进行改进。那么左边的事务将执行失败

lua

lua脚本好处:

  • 减少网络开销。可以将多个请求通过脚本的形式一次发送,减少网络时延。
  • 原子操作。redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。因此在编写脚本过程中无需担心会出现竟态条件,无需使用事务。
  • 复用。客户端发送的脚本会永久存在redis中,这样,其他客户端可以复用这一变量类型,声明变量。控制语句,循环语句。函数

一,怎么在redis中使用lua脚本

命令格式:
EVAL script numkeys key [key...] arg [arg...]

说明:

  • script 是第一个参数,为lua5.1脚本。该脚本不需要定义Lua函数(也不应该)
  • 第二个参数numkeys指定后续参数有几个key
  • key [key...],是要操作的键,可以指定多个,在lua脚本中通过KEYS[1],KEYS[2]获取
  • arg [age...],参数,在lua脚本中通过ARGV[1],ARGV[2]获取。

使用eval命令 简单示例:

java 复制代码
eval "return ARGV[1]" 0 100
java 复制代码
eval "return {ARGV[2],ARGV[1]}" 0 100 200
java 复制代码
eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second

上面是使用EVAL命令执行lua脚本的简单示例,没有和redis结合起来。

下面我们使用redis.call来执行redis的命令。

说明:...是字符串连接符。local是声明一个局部变量

java 复制代码
eval 'local val = ARGV[1].." "..redis.call("get",KEYS[1]) return val' 1 age niuniu

二,脚本内容比较多,我们可以创建一个脚本文件。把脚本内容写入文件中。

注意:

  • 这里执行脚本文件,不是在交互模式下执行的。
    先创建一个脚本文件,在/home目录下
java 复制代码
# touch test01.lua

通过vi命令,把脚本内容写进去

执行找个脚本,注意,前后的空格

java 复制代码
# ./redis-cli -a 123456 --eval /usr/local/src/redis6/lua/test01.lua age , xiaolin

三,脚本文件上传到redis中,然后仍然在交换模式中执行这个脚本。

上传脚本,返回一个hash值,f52a1be1e0dc6ce2813d1890a39dc993cab5527b

在交换模式中,使用EVALSHA命令执行脚本

java 复制代码
EVALSHA f52a1be1e0dc6ce2813d1890a39dc993cab5527b 1 age xiaozh
相关推荐
煎饼小狗21 分钟前
Redis五大基本类型——Zset有序集合命令详解(命令用法详解+思维导图详解)
数据库·redis·缓存
我言秋日胜春朝★24 分钟前
【Linux】进程地址空间
linux·运维·服务器
繁依Fanyi1 小时前
简易安卓句分器实现
java·服务器·开发语言·算法·eclipse
C-cat.1 小时前
Linux|环境变量
linux·运维·服务器
m51271 小时前
LinuxC语言
java·服务器·前端
运维-大白同学1 小时前
将django+vue项目发布部署到服务器
服务器·vue.js·django
烦躁的大鼻嘎2 小时前
【Linux】深入理解GCC/G++编译流程及库文件管理
linux·运维·服务器
乐大师2 小时前
Deepin登录后提示“解锁登陆密钥环里的密码不匹配”
运维·服务器
ac.char2 小时前
在 Ubuntu 上安装 Yarn 环境
linux·运维·服务器·ubuntu
敲上瘾2 小时前
操作系统的理解
linux·运维·服务器·c++·大模型·操作系统·aigc