如何使用 DEL 来排查延迟问题和偶发故障?

上次更新 2024 年 3 月 22 日

问题

如何使用 DEL 来排查延迟问题和偶发故障?

解答

在对大键使用 DEL 时,如果目标是大键,则可能会增加延迟。可能会看到零星的故障。

Exception information: Exception type: RedisConnectionException Exception message: SocketFailure on DEL at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) at StackExchange.Redis.RedisDatabase.KeyDelete(RedisKey key, CommandFlags flags) at Costco.OMS.Common.UtilityLibrary.Cache.RedisCache.ClearSession(String sessionId) at Costco.OMS.Web.UI.Global.Session_Start(Object sender, EventArgs e) at System.Web.SessionState.SessionStateModule.CompleteAcquireState() at System.Web.SessionState.SessionStateModule.BeginAcquireState(Object source, EventArgs e, AsyncCallback cb, Object extraData) at System.Web.HttpApplication.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

尝试用 UNLINK 替换 DEL,此命令与 DEL 非常相似:它会移除指定的键。就像 DEL 一样,如果键不存在则会被忽略。但是,命令在不同的线程上执行实际的内存回收,所以它是不会阻塞的,而 DEL 会。这就是命令名称的由来:该命令只是将键从键空间中取消链接。实际的移除操作稍后会异步执行。