debug - redis过期时间

前言

接手的C#工程中,用到了redis。
前端展示的数据时有时无。开始怀疑时插入redis中的数据过期引起的。

key过期时间的查询

为啥要查这个呢? 程序中有个bug, 过一会,存到redis中的数据是有效的,但是读出来,一会就无效了。
开始怀疑是不是数据存的时候,key过期时间短了,结果不是。
因为插入数据时,指定了key的过期时间为1小时。

bool b = false;
b = RedisBase.Item_Set("my_key_" + my_key.id.ToString(), jsonData);
        public static bool Item_Set<T>(string key, T t)
        {
            try
            {
                using (IRedisClient redis = prcm.GetClient())
                {
                    //return redis.Set<T>(key, t);
                    return redis.Set<T>(key, t, new TimeSpan(1, 0, 0)); // 参数3指定了key过期时间为1小时
                }
            }
            catch (Exception ex)
            {
                log.Error("RedisBase--Item_Set Exception:",ex);
            }
            return false;
        }

用win版的redis客户端查询, 也可以看到过期时间接近1个小时(这时数据刚插入redis, 马上查询)
查询命令格式 ttl <key_name>

redis 127.0.0.1:6379> ttl my_key
(integer) 3583
redis 127.0.0.1:6379> ttl my_key
(integer) 3600
redis 127.0.0.1:6379> ttl my_key
(integer) 3599

最后查到的bug原因

存储同一个key的程序有2个,一个新版,一个旧版。
新版和旧版和设备通讯的协议不同。
新版得到设备的有效数据,写入redis数据库.
旧版得到的设备无效数据,也写入了redis数据库。
旧版数据盖掉了新版数据. 导致使用数据的前端程序上,导致数据时有时无。

解决方法

不运行旧版程序,只运行新版程序来存数据。

发布了436 篇原创文章 · 获赞 126 · 访问量 175万+

猜你喜欢

转载自blog.csdn.net/LostSpeed/article/details/95611246
今日推荐