一、概述

最近在公司项目中,使用 Lua 脚本操作 Redis 数据库。期间遇到了一些问题,特辟文以记之,望给诸君以参考。

二、获取系统资源的问题

redis lua 为了安全考虑,屏蔽了很多的基本命令,比如 os.time(), Date, hash,loadfile函数等 。

三、小技巧

3.1 清空 list 内容,但不删除 list key

ltrim key 1 0

网上对这个问题进行了诸多讨论,最终我找到了这篇 帖子 给的解决方案。

3.2 获取系统时间

redis.call(“TIME”)

虽然 Redis Lua 屏蔽了获取时间的 os.data() 命令,但是我们还可以通过 redis.call(“TIME”) 可以拿到时间戳,但这个时间戳不能写入任务的一个键值里,只能提供比对的功能

在 stackoverflow 的一篇帖子 get-current-date-and-time-in-lua-in-redis 有提到这个方法,同时另外一篇帖子 how-to-determine-the-execution-time-of-a-lua-script-in-redis 对该问题的解决也有一定的帮助。

在 Redis 社区,我找到了一篇相关的帖子 How best to store time series values in Redis for caching

3.3 资源