
复制int expireIfNeeded(redisDb *db,详解 robj *key) {             // 获取键的过期时间             mstime_t when = getExpire(db,key);             mstime_t now;             // 键没有过期时间             if (when < 0) return 0;             // 实例正在从硬盘 laod 数据,比如说 RDB 或者 AOF             if (server.loading) return 0;             // 当执行lua脚本时,存管只有键在lua一开始执行时             // 就到了过期时间才算过期,理机否则在lua执行过程中不算失效             now = server.lua_caller ?制和 server.lua_time_start : mstime();             // 当本实例是slave时,过期键的实现删除由master发送过来的             // del 指令控制。网站模板但是详解这个函数还是将正确的信息返回给调用者。             if (server.masterhost != NULL) return now > when;             // 判断是存管否未过期             if (now <= when) return 0;             // 代码到这里,说明键已经过期,理机而且需要被删除             server.stat_expiredkeys++;             // 命令传播,云服务器提供商制和到 slave 和 AOF             propagateExpire(db,实现key,server.lazyfree_lazy_expire);             // 键空间通知使得客户端可以通过订阅频道或模式, 来接收那些以某种方式改动了 Redis 数据集的详解事件。             notifyKeyspaceEvent(NOTIFY_EXPIRED,存管             "expired",key,db->id);             // 如果是惰性删除,调用dbAsyncDelete,理机否则调用 dbSyncDelete             return server.lazyfree_lazy_expire ?制和 dbAsyncDelete(db,key) :             dbSyncDelete(db,key); }             1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.