Redis事务那些事

这篇博客探讨了Redis中的事务处理,重点介绍了通过Lua脚本来实现事务的方法。文章首先简要介绍了Lua语言的基本数据类型和控制结构,然后讲解了如何在Redis中使用Lua脚本,包括原子性执行、脚本加载以及一个查询Hash类型Key中特定Field数据的示例脚本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    redis实现事务有两种方式:1、通过Redis自带的命令multi和exec来实现;2、通过lua脚本,因为redis服务器实现了对lua脚本的解析,本文主要对第二种方式进行学习总结。

    先简单学习一下lua脚本语言

    lua脚本支持字符串strings,数值numbers,布尔booleans和数组tables这几种数据类型,相比其他语言比较单一。

    如定义一个整数变量 local number = 0,这里local表示该变量是局部变量,如果没有local则为全局变量。

    如定义一个数组变量 local arrays = {"this", "is", "lua", "script", 12}

    那如何遍历数组中的值呢?可以使用for或者while循环

    for i = 0, #arrays

        do

            print(arrays[i])

       end

   或者

   for index, value in ipairs(arrays)

      do

         print(arrays[index])

      end

   if语句的使用

      if i == 0

         then

             print("true")

         else

             print("false")

       end

   lua也提供了一些内置函数,如将字符串转换成数值tonumber()等

Redis Lua使用

redis提供eval和evalsha两个工具来运行lua脚本,lua脚本执行过程中是原子行动,但是他不会在发生错误后回滚已经执行的命令。

redis提供script load "$(cat filename)"来将lua脚本加载到redis服务器中,然后使用evalsha命令调用

local arrays = {}
local length = tonumber(ARGV[1])
for i = 1, length
    do
      arrays[i] = redis.call("hget", KEYS[i], ARGV[2])
  end

  return arrays
上面是一个简单的脚本,查询hash类型key中某一field的数据。

EVALSHA d3f7e84c1423cba2a93836f21b020b1330388960 4 zhuocongbin zhangsan lisi wangmazi 4 pid

上面的意思是,查询zhuocongbin zhangsan lisi wangmaz这四个key中pid的值。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值