redis是一个内存数据库,必然就存在比较多的内存释放,然而内存释放又是一个比较重的操作,这样就会
影响redis的正常运转效率。所以,redis对于部分内存的释放采取了懒释放。空间懒释放就是将内存的释放交由
专门的线程进行释放操作。
redis懒释放的空间主要包括三种:
1)对象空间的释放
2)DB空间的异步释放
3)slots-keys空间释放
对象空间的释放
对象释放的场景主要有del命令,过期键删除,内存淘汰等三种。对象释放是否采用懒释放取决于相关配置:
1)del命令——server.lazyfree_lazy_server_del
2) 过期键删除——server.lazyfree_lazy_expire
3)内存淘汰——lazyfree_lazy_eviction
del操作
int dbDelete(redisDb *db, robj *key) {
return server.lazyfree_lazy_server_del ? dbAsyncDelete(db,key):dbSyncDelete(db,key);
}
过期键删除
int activeExpireCycleTryExpire(redisDb *db, dictEntry *de, long long now) {
long long t = dictGetSignedIntegerV