You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NRedisStack中为JSON键设置过期时间?

在NRedisStack中为JSON键原子设置过期时间的方案

因为NRedisStack的JSON.SetAsync方法未提供直接传入过期时间的重载,且常规事务无法同时原子执行JSON设置和KeyExpire操作,推荐使用Lua脚本实现原子化操作——Redis会将Lua脚本内的所有命令作为单个原子执行单元,完美解决一致性问题。

实现步骤

  1. 编写Lua脚本:同时执行JSON.SET和EXPIRE命令
  2. 在C#中调用该脚本,传入键名、序列化后的JSON数据、过期时间(秒数)

代码示例

// 定义Lua脚本
var setJsonWithExpiryScript = @"
redis.call('JSON.SET', KEYS[1], '$', ARGV[1])
redis.call('EXPIRE', KEYS[1], ARGV[2])
return 1
";

// 准备参数
var key = "exampleKey";
var jsonPayload = JsonSerializer.Serialize(exampleList); // 序列化对象为JSON字符串
var expireSeconds = (int)TimeSpan.FromDays(1).TotalSeconds;

// 执行脚本(_redis为IConnectionMultiplexer实例)
var db = _redis.GetDatabase();
await db.ScriptEvaluateAsync(setJsonWithExpiryScript, new RedisKey[] { key }, new RedisValue[] { jsonPayload, expireSeconds });

注意事项

  • 确保序列化后的JSON字符串格式正确,可根据需求选择System.Text.Json或Newtonsoft.Json
  • 如果需要毫秒级过期,可将EXPIRE替换为PEXPIRE,并传入总毫秒数作为参数

内容的提问来源于stack exchange,提问作者theuserthatpretendstobesmart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 00:52:11