前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis的Lua扩展

Redis的Lua扩展

作者头像
lpe234
发布2020-07-27 17:22:56
9470
发布2020-07-27 17:22:56
举报
文章被收录于专栏:若是烟花

基本环境

代码语言:javascript
复制
# redis
➜  ~ redis-server -v
Redis server v=3.2.6

# lua
➜  ~ lua -v
Lua 5.2.4  Copyright (C) 1994-2015 Lua.org, PUC-Rio

参考文档:

概要

Redis从2.6版本开始引入了对Lua脚本的支持,通过在服务器中嵌入Lua环境,Redis客户端可以使用Lua脚本,直接在服务器端执行多个Redis命令。

使用脚本的好处

  • 较少网络开销。可将多个请求通过脚本的形式一次性发送,较少网络时延
  • 原子操作。Redis会将整个脚本作为一个整体执行,中间不会插入其他命令。因此脚本编写过程无需担心出现竞态条件,无需使用事务
  • 复用。客户端发送的脚本会永久存在Redis中。这样其他客户端可复用这一脚本而无需使用代码完成相同逻辑

使用脚本的限制

  • 不支持集群。
  • 原子操作。如果脚本执行耗时,会对其他操作造成影响

使用

调用Lua脚本的语法

传入脚本文件
代码语言:javascript
复制
# KEYS 与 ARGV 中间使用 “ , ” 逗号分隔,前后有空格
$ redis-cli --eval path/to/redis.lua KEYS[1] KEYS[2] , ARGV[1] ARGV[2] ...

    * --eval,告诉redis-cli读取并运行后面的lua脚本
    * path/to/redis.lua,是lua脚本的位置,也可以直接为脚本字符串。是一个Lua 5.1 script。
    * KEYS[1] KEYS[2],是要操作的键,可以指定多个,在lua脚本中通过KEYS[1], KEYS[2]获取
    * ARGV[1] ARGV[2],参数,在lua脚本中通过ARGV[1], ARGV[2]获取。
传入脚本字符串
代码语言:javascript
复制
127.0.0.1:6379> eval script numkeys key [key ...] arg [arg ...]
    
    * eval: 将要执行脚本
    * script: 脚本字符串
    * numkeys: KEY参数个数
    * key ... : 操作的键
    * arg ... : 参数

使用示例

KEYS ARGV
代码语言:javascript
复制
# xx.lua
return {KEYS, ARGV}
代码语言:javascript
复制
➜  ~ redis-cli --eval xx.lua k1 k2 k3 , a1 a2 a3
1) 1) "k1"
   2) "k2"
   3) "k3"
2) 1) "a1"
   2) "a2"
   3) "a3"
代码语言:javascript
复制
➜  ~ redis-cli
127.0.0.1:6379> eval "redis.call('set', 'name', 'xx')" 0
(nil)
127.0.0.1:6379> eval "redis.call('get', 'name')" 0
(nil)
127.0.0.1:6379> eval "return redis.call('get', 'name')" 0
"xx"
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概要
    • 使用脚本的好处
      • 使用脚本的限制
      • 使用
        • 调用Lua脚本的语法
          • 传入脚本文件
          • 传入脚本字符串
        • 使用示例
          • KEYS ARGV
      相关产品与服务
      云数据库 Redis®
      腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档