MST
星途 面试题库

面试题:Redis EVALSHA命令在缓存应用中的基础使用

请阐述Redis EVALSHA命令的基本语法及参数含义。假设你在一个简单的Web应用缓存场景中,要使用EVALSHA命令来更新缓存中的某个用户信息(以哈希表存储用户信息),请编写对应的Lua脚本示例,并说明如何使用EVALSHA命令执行该脚本。
41.2万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

Redis EVALSHA命令基本语法及参数含义

  1. 基本语法EVALSHA sha1 numkeys key [key ...] arg [arg ...]
  2. 参数含义
    • sha1:Lua脚本的SHA1摘要。在执行EVALSHA命令前,需要先使用SCRIPT LOAD命令将Lua脚本加载到Redis服务器,并获取其SHA1摘要。
    • numkeys:指定后续参数中键名参数的个数。
    • key [key ...]:一个或多个键名参数,在Lua脚本中可以通过KEYS数组来访问这些键名。
    • arg [arg ...]:一个或多个附加参数,在Lua脚本中可以通过ARGV数组来访问这些参数。

Lua脚本示例

假设用户信息存储在哈希表中,键名为user:{user_id},哈希表字段包含nameage等。下面是一个更新用户信息的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命令执行该脚本

  1. 加载脚本并获取SHA1摘要: 在Redis客户端中执行以下命令加载Lua脚本,并获取其SHA1摘要。假设脚本内容保存在update_user_info.lua文件中:
redis-cli SCRIPT LOAD "$(cat update_user_info.lua)"

该命令会返回脚本的SHA1摘要,例如:7d86d2c1206c25c5e5c8c2d95f8f7a75b8c1c9f9

  1. 使用EVALSHA命令执行脚本: 假设用户ID为1,要更新的字段为nameage,值分别为"new_name"25。则执行以下命令:
redis-cli EVALSHA 7d86d2c1206c25c5e5c8c2d95f8f7a75b8c1c9f9 1 user:1 name new_name age 25

这里7d86d2c1206c25c5e5c8c2d95f8f7a75b8c1c9f9是前面获取的SHA1摘要,1表示键名参数个数,user:1是键名,namenew_nameage25是附加参数。