【redis】事务与Lua

1.事务与Lua

为了保证多条命令组合的原子性,redis提供了简单的事务功能以及集成Lua 
脚本来解决这个问题。

2.事务 

redis提供了简单的事务功能,将一组执行的命令放到multi 和exec 两个命令
之间。multi命令代表事务开始,exec命令代表事务结束。

multi 
sadd user:a:follow user:b 
sadd user:b:fans  user:a 
exec 

192.168.1.7:6380> multi 
OK
192.168.1.7:6380> sadd user:a:follow user:b 
QUEUED
192.168.1.7:6380> sadd user:b:fans  user:a 
QUEUED
192.168.1.7:6380> exec 
1
1

--只有执行完exec ,整个命令才会真正执行。
--redis事务回滚:discard 

192.168.1.7:6380> smembers user:b:fans 
user:a
192.168.1.7:6380> smembers user:a:follow
user:b
192.168.1.7:6380> multi 
OK
192.168.1.7:6380> sadd user:a:follow user:a user:c user:b user:d user:e
QUEUED
192.168.1.7:6380> sadd user:b:fans user:a user:c user:b user:d user:e
QUEUED
192.168.1.7:6380> discard
OK
192.168.1.7:6380> smembers user:b:fans
user:a
192.168.1.7:6380> smembers user:a:follow
user:b

--由此可见discard确实回滚了事务。
--即丢弃了事务。

--由于redis无法真正回滚事务,需要使用watch命令来解决这个问题。
在执行multi ..exec命令之前先执行watch; 
这样当同一时刻有别的会话正在更新当前会话中的key时,当前会话中的事务将
被回滚。无法更新成功。而另外的事务可以更新成功。

3.Lua用法简述 

Lua语言是在1993年由巴西一个大学研究小组发明,其设计目标是作为嵌入式程序
移植到其他应用程序。

lua提供了几种数据类型:booleans(布尔),numbers(数值),
strings(字符串),tables(表格)。

(1)字符串 
--定义局部变量,没有local就是全局变量。
local strings val="world"
print(val)

[root@oracle1 data]# which lua
/usr/bin/lua
[root@oracle1 data]# lua
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> 
> 
> local strings val="world"
> print(val)
world

--通过脚本执行lua;
[root@oracle1 data]# cat 1.lua 
local strings val="world"
print(val)


[root@oracle1 data]# lua -i 1.lua 
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
world



(2)数组 
local tables myArray = {"redis","jedis","true",88.0 }
print(myArray[3])

[root@oracle1 data]# cat 1.lua 
local strings val="world"
print(val)
local tables myArray = {"redis","jedis","true",88.0 }
print(myArray[3])
[root@oracle1 data]# lua 1.lua 
world
true
(3)for 
local int sum=0 
for i=1,100 
do 
sum=sum+i 
end 
print(sum)

[root@oracle1 data]# cat 1.lua 
local strings val="world"
print(val)
local tables myArray = {"redis","jedis","true",88.0 }
print(myArray[3])
local int sum=0 
for i=1,100 
do 
sum=sum+i 
end 
print(sum)
[root@oracle1 data]# lua 1.lua
world
true
5050

--遍历myArray ;
for i=1,#myArray 
do 
print(myArray[i])
end 

[root@oracle1 data]# cat 1.lua
local strings val="world"
print(val)
local tables myArray = {"redis","jedis","true",88.0 }
print(myArray[3])
--计算1到100的和
local int sum=0 
for i=1,100 
do 
sum=sum+i 
end 
print(sum)
--遍历myArray ;
for i=1,#myArray 
do 
print(myArray[i])
end 


[root@oracle1 data]# lua 1.lua
world
true
5050
redis
jedis
true
88


--lua提供了ipairs内置函数,遍历出索引下标和值。
for index,value in ipairs(myArray)
do 
print(index)
print(value)
end 

[root@oracle1 data]# cat 1.lua 
local strings val="world"
print(val)
local tables myArray = {"redis","jedis","true",88.0 }
print(myArray[3])
--计算1到100的和
local int sum=0 
for i=1,100 
do 
sum=sum+i 
end 
print(sum)
--遍历myArray ;
for i=1,#myArray 
do 
print(myArray[i])
end 
--lua提供了ipairs内置函数,遍历出索引下标和值。
for index,value in ipairs(myArray)
do 
print(index)
print(value)
end 

[root@oracle1 data]# lua 1.lua
world
true
5050
redis
jedis
true
88
1
redis
2
jedis
3
true
4
88

--while用法:求0到100的和
local int sum=0 
local int i =0 
while i<=100 
do 
sum=sum+i 
i=i+1 
end 
print(sum)

[root@oracle1 data]# cat 1.lua 
local strings val="world"
print(val)
local tables myArray = {"redis","jedis","true",88.0 }
print(myArray[3])
--计算1到100的和
local int sum=0 
for i=1,100 
do 
sum=sum+i 
end 
print(sum)
--遍历myArray ;
for i=1,#myArray 
do 
print(myArray[i])
end 
--lua提供了ipairs内置函数,遍历出索引下标和值。
for index,value in ipairs(myArray)
do 
print(index)
print(value)
end 

--while用法:求0到100的和
local int sum=0 
local int i =0 
while i<=100 
do 
sum=sum+i 
i=i+1 
end 
print(sum)

[root@oracle1 data]# lua 1.lua 
world
true
5050
redis
jedis
true
88
1
redis
2
jedis
3
true
4
88
5050


--lua脚本if else用法。
--要确定数组中是否包含了jedis,有则打印true,注意if以end结尾,if后紧跟then 
local tables myArray ={"redis","jedis",true,88}
for i=1,#myArray
do 
 if myArray[i]=="jedis"
 then 
   print("true")
   break 
 else 
 end 
end 	


[root@oracle1 data]# cat 1.lua 
local strings val="world"
print(val)
local tables myArray = {"redis","jedis","true",88.0 }
print(myArray[3])
--计算1到100的和
local int sum=0 
for i=1,100 
do 
sum=sum+i 
end 
print(sum)
--遍历myArray ;
for i=1,#myArray 
do 
print(myArray[i])
end 
--lua提供了ipairs内置函数,遍历出索引下标和值。
for index,value in ipairs(myArray)
do 
print(index)
print(value)
end 

--while用法:求0到100的和
local int sum=0 
local int i =0 
while i<=100 
do 
sum=sum+i 
i=i+1 
end 
print(sum)

--lua脚本if else用法。
--要确定数组中是否包含了jedis,有则打印true,注意if以end结尾,if后紧跟then 
local tables myArray ={"redis","jedis",true,88}
for i=1,#myArray
do 
 if myArray[i]=="jedis"
 then 
   print("true")
   break 
 else 
 end 
end 	


[root@oracle1 data]# lua 1.lua 
world
true
5050
redis
jedis
true
88
1
redis
2
jedis
3
true
4
88
5050
true
[root@oracle1 data]# 


--hash用法。必须有两个点:表示连接。
local tables user_1={age=28,name="tome"}
print("user_1 age is ".. user_1["age"])
print("user_1 name is ".. user_1["name"])

user_1 age is 28
user_1 name is tome

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值