阿里云Redis LUA脚本功能上线——轻量嵌入,极速扩展,业务轻松跨平台

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 阿里云Redis云数据库,全面支持LUA脚本功能,助力企业轻松迁移自建Redis数据库的业务逻辑,实现业务的跨平台复用,快速驱动业务上云。
+关注继续查看

    阿里云Redis云数据库,全面支持LUA脚本功能,助力企业轻松迁移自建Redis数据库的业务逻辑,实现业务的跨平台复用,快速驱动业务上云。LUA语言作为目前最流行的轻量级嵌入式脚本语言,凭借其语法简单、高效稳定、支持复杂数据结构以及自动内存管理等特点,已经在众多著名的游戏程序中大量被使用,如:愤怒的小鸟、星际争霸、魔兽世界等。

112866b2d2cdb33a9fe5f6477857b5f0eea09810

Redis支持LUA脚本的主要优势 

    LUA脚本的融合将使Redis数据库产生更多的使用场景,迸发更多新的优势:
  • 高效性:减少网络开销及时延,多次redis服务器网络请求的操作,使用LUA脚本可以用一个请求完成
  • 数据可靠性:Redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。
  • 复用性:LUA脚本执行后会永久存储在Redis服务器端,其他客户端可以直接复用
  • 便捷性:实现程序热更新
  • 可嵌入性:可嵌入JAVA,C#等多种编程语言,支持不同操作系统跨平台交互
  • 简单强大:小巧轻便,资源占用率低,支持过程化和对象化的编程语言
  • 免费开源:遵循MIT Licence协议,可免费商用化

Redis LUA脚本应用场景

游戏开发:Lua大量用于游戏开发中,实现热升级,提升应用扩展性
  • 活跃用户判断:判断一个游戏用户是否属于活跃用户,如果符合标准,则活跃用户人数+1
    Lua脚本(sha: 089ccf077629d371793d5e928a3f06e9e483eb08)
if redis.call("EXISTS",KEYS[1]) == 1 then
  return redis.call("INCRBY",KEYS[1],ARGV[1])
else
  return nil
end
    游戏用户示例信息如下:
> evalsha f74dd5c086898b8a3d69655334b94fa7e006a9b1 1 activeusers 1  (nil)
> set activeusers 0 OK
> evalsha f74dd5c086898b8a3d69655334b94fa7e006a9b1 1 activeusers 1  (integer) 1
> evalsha f74dd5c086898b8a3d69655334b94fa7e006a9b1 1 activeusers 2  (integer) 3
  • 简单DDOS防护:限制n秒内同ip的访问次数
     Lua脚本(sha: 089ccf077629d371793d5e928a3f06e9e483eb08)
local cnt = redis.call('INCR', KEYS[1])
if cnt > tonumber(ARGV[1])
then
  return 1
end
if cnt == 1
then
  redis.call('PEXPIRE', KEYS[1], ARGV[2])
end
return 0
     示例信息如下:10秒内192.168.1.1访问是否超过了5次
> evalsha 089ccf077629d371793d5e928a3f06e9e483eb08 1 ratelimit:192.168.1.1 5 10000  (integer) 0
> evalsha 089ccf077629d371793d5e928a3f06e9e483eb08 1 ratelimit:192.168.1.1 5 10000  (integer) 0
> evalsha 089ccf077629d371793d5e928a3f06e9e483eb08 1 ratelimit:192.168.1.1 5 10000  (integer) 0
> evalsha 089ccf077629d371793d5e928a3f06e9e483eb08 1 ratelimit:192.168.1.1 5 10000  (integer) 0
> evalsha 089ccf077629d371793d5e928a3f06e9e483eb08 1 ratelimit:192.168.1.1 5 10000  (integer) 0
> evalsha 089ccf077629d371793d5e928a3f06e9e483eb08 1 ratelimit:192.168.1.1 5 10000  (integer) 1
  • 用户游戏社区判断:判断当前用户是否在多个游戏社区中
     Lua脚本(Sha:d7550c872f553141096d5134c027af5eeed283db)
for i=1,#KEYS do
  if redis.call('sismember', KEYS[i], ARGV[1]) == 1 then
    return 1
  end
end
return 0
      示例信息如下:
> sadd users alice bob  (integer) 2
> sadd admin jenny  (integer) 1
> evalsha d7550c872f553141096d5134c027af5eeed283db 2 users admin alice  (integer) 1
> evalsha d7550c872f553141096d5134c027af5eeed283db 3 users admin guests jenny  (integer) 1
> evalsha d7550c872f553141096d5134c027af5eeed283db 2 users admin abner  (integer) 0
  • 获取游戏商店中的货品:取出hash表中符合条件的对象
     Lua脚本(SHA:700c06c5ce9835bf9eef2198c8bc4d268b3b5095)
local fields = redis.call("SMEMBERS", KEYS[2])
local values = redis.call("HMGET", KEYS[1], unpack(fields))
local result = {}
for i,k in ipairs(fields) do result[i] = {k, values[i]} end
return result
     示例信息如下:取出所有在produce集合中的对象在hash表groceries中的值
> hset groceries bread 2  (integer) 1
> hset groceries apples 5  (integer) 1
> hset groceries oranges 6  (integer) 1
> hset groceries broccoli 1  (integer) 1
> sadd produce apples oranges broccoli  (integer) 3
> evalsha 700c06c5ce9835bf9eef2198c8bc4d268b3b5095 2 groceries produce
1) 1) "apples"
   2) "5"
2) 1) "broccoli"
   2) "1"
3) 1) "oranges"
   2) "6"

数据分析:通过Lua脚本实现数据格式化,提供给软件平台通用接口能力
  • 实时平均值统计
     Lua脚本(sha:399fddde578fd9cb924edce746c783e8340d8251)
local currentval = tonumber(redis.call('get', KEYS[1])) or 0
local count = redis.call('incr', KEYS[2])

currentval = tostring(currentval * (count - 1)/count + (ARGV[1]/count))

redis.call('set', KEYS[1], currentval)
return currentval
     示例如下:
> evalsha 399fddde578fd9cb924edce746c783e8340d8251 2 score:avg score:count 80  "80"
> evalsha 399fddde578fd9cb924edce746c783e8340d8251 2 score:avg score:count 100  "90"
> evalsha 399fddde578fd9cb924edce746c783e8340d8251 2 score:avg score:count 75  "85"
> evalsha 399fddde578fd9cb924edce746c783e8340d8251 2 score:avg score:count 98  "88.25"
> evalsha 399fddde578fd9cb924edce746c783e8340d8251 2 score:avg score:count 98  "90.2"
> evalsha 399fddde578fd9cb924edce746c783e8340d8251 2 score:avg score:count 98  "91.5"
> get score:avg  "91.5"
> get score:count  "6"


阿里云Redis LUA脚本安全保障
  • 全局环境保护:阿里云Redis对Lua环境中的全局环境进行保护,禁止用户添加全局变量到Lua环境中
  • 外部代码防护:为了防止用户从外部文件引入不安全的代码,阿里云Redis不提供Loadfile等函数
  • 沙箱机制防护:阿里云Redis Lua不提供访问外部系统或者执行系统调用功能
  • 开通功能限制:为保证用户数据安全,阿里云Redis 仅对申请用户开通Lua脚本功能,用户可以通过工单开通
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4月前
|
弹性计算
阿里云提供了弹性扩展的能力
阿里云提供了弹性扩展的能力
83 1
|
5月前
|
存储 机器学习/深度学习 文件存储
在PAI-EAS(阿里云机器学习平台扩展智能计算服务)上使用存储在NAS中的模型
在PAI-EAS(阿里云机器学习平台扩展智能计算服务)上使用存储在NAS中的模型
183 0
|
11月前
|
监控 前端开发 中间件
阿里云互联网中间件五剑客之——业务实时监控服务 ARMS
阿里云互联网中间件五剑客之——业务实时监控服务 ARMS自制脑图, 业务实时监控服务 (Application Real-Time Monitoring Service, 简称ARMS) 是一款集前端监控,应用监控,自定义监控为一体的端到端一体化实时监控产品。通过该产品,用户可以基于海量的数据迅速便捷地通过定制化为企业打造集前端体验,应用性能和异常,以及特定业务属性监控为一体的立体化监控方案和响应能力。
905 0
阿里云互联网中间件五剑客之——业务实时监控服务 ARMS
|
12月前
|
机器学习/深度学习 人工智能 弹性计算
阿里云国际站代理商:阿里云启用第三座日本数据中心,加快海外市场扩展
专业防护TG飞机:@luotuoemo 在日本市场,阿里云已先后于2016年和2019年启用第一、二座数据中心,成立本地公司,用本地团队服务本地市场,已服务于游戏、制造、零售和汽车等多个领域企业。在去年的东京奥运会上,阿里云与奥林匹克广播服务公司(OBS)联手打造了OBS Cloud,支持奥运历史上首次实现云上转播,让东京奥运现场的转播中心面积缩小25%,工作人员减少27%。   近期,阿里云宣布与日本JP Games和服装企业TSI达成合作,支持JP Games打造元宇宙引擎PEGASUS WORLDKIT,并在其中设置云上虚拟空间,搭建街道、店铺、广场等设施,让消费者可以通过VR等方式在
阿里云国际站代理商:阿里云启用第三座日本数据中心,加快海外市场扩展
|
12月前
|
云计算
阿里云业务连续性最佳实践线下沙龙 邀你参加啦!
阿里云业务连续性最佳实践线下沙龙将于12月29日于阿里巴巴西溪园区A区访客中心-204 东林书院举行,期待您的到来!
345 0
阿里云业务连续性最佳实践线下沙龙  邀你参加啦!
|
存储 运维 安全
阿里云发布SaaS数据本地化服务,助力企业跨国扩展与合规
阿里云SaaS数据本地化服务(Alibaba Cloud InCountry Service,简称ACIS) 由阿里云和 InCountry合作推出,为使用海外SaaS或者应用的企业客户提供了一种将受管制数据在境内存储和处理,以实现合规的SaaS服务。
964 0
阿里云发布SaaS数据本地化服务,助力企业跨国扩展与合规
|
供应链 安全 物联网安全
阿里云物联网安全服务示范系统边缘版 率先通过等保2.0物联网安全扩展要求技术评估
近日,物联网安全服务示范系统边缘版(阿里云IoT安全管理一体机)率先通过公安部信息安全等级保护评估中心的安全评估,能够为物联网系统提供等保2.0第三级物联网安全扩展要求所需的技术合规能力。
168 0
阿里云物联网安全服务示范系统边缘版 率先通过等保2.0物联网安全扩展要求技术评估
|
分布式计算 运维 监控
MaxCompute日常工作及实践扩展|阿里云产品内容精选(三十二)
本文内容取自开发者社区阿里巴巴大数据计算技术圈,为大家提供相关技术思考。
|
存储 Serverless 网络安全
阿里云-云开发平台网络篇——扩展应用提供的网络链路
阿里云-云开发平台网络篇——扩展应用提供的网络链路
207 0
阿里云-云开发平台网络篇——扩展应用提供的网络链路
|
供应链 安全 物联网安全
阿里云物联网安全服务示范系统边缘版率先通过等保2.0物联网安全扩展要求技术评估
阿里云物联网安全服务示范系统边缘版率先通过等保2.0物联网安全扩展要求技术评估
376 0
阿里云物联网安全服务示范系统边缘版率先通过等保2.0物联网安全扩展要求技术评估
相关产品
云数据库 Redis 版
推荐文章
更多