面试题答案
一键面试Redis EVALSHA命令基本语法及参数含义
- 基本语法:
EVALSHA sha1 numkeys key [key ...] arg [arg ...]
- 参数含义:
sha1
:Lua脚本的SHA1摘要。在执行EVALSHA命令前,需要先使用SCRIPT LOAD命令将Lua脚本加载到Redis服务器,并获取其SHA1摘要。numkeys
:指定后续参数中键名参数的个数。key [key ...]
:一个或多个键名参数,在Lua脚本中可以通过KEYS
数组来访问这些键名。arg [arg ...]
:一个或多个附加参数,在Lua脚本中可以通过ARGV
数组来访问这些参数。
Lua脚本示例
假设用户信息存储在哈希表中,键名为user:{user_id}
,哈希表字段包含name
、age
等。下面是一个更新用户信息的Lua脚本:
-- 获取键名
local key = KEYS[1]
-- 获取要更新的字段名
local field1 = ARGV[1]
local value1 = ARGV[2]
local field2 = ARGV[3]
local value2 = ARGV[4]
-- 使用HSET命令更新哈希表字段
redis.call('HSET', key, field1, value1)
redis.call('HSET', key, field2, value2)
-- 返回更新后的哈希表
return redis.call('HGETALL', key)
使用EVALSHA命令执行该脚本
- 加载脚本并获取SHA1摘要:
在Redis客户端中执行以下命令加载Lua脚本,并获取其SHA1摘要。假设脚本内容保存在
update_user_info.lua
文件中:
redis-cli SCRIPT LOAD "$(cat update_user_info.lua)"
该命令会返回脚本的SHA1摘要,例如:7d86d2c1206c25c5e5c8c2d95f8f7a75b8c1c9f9
- 使用EVALSHA命令执行脚本:
假设用户ID为1,要更新的字段为
name
和age
,值分别为"new_name"
和25
。则执行以下命令:
redis-cli EVALSHA 7d86d2c1206c25c5e5c8c2d95f8f7a75b8c1c9f9 1 user:1 name new_name age 25
这里7d86d2c1206c25c5e5c8c2d95f8f7a75b8c1c9f9
是前面获取的SHA1摘要,1
表示键名参数个数,user:1
是键名,name
、new_name
、age
、25
是附加参数。