 复制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++; // 命令传播,WordPress模板制和到 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. |