valadmins=controller.getAll(users,User.serializer(),cacheKey="users:role:admin",){find(Filters.eq("role","admin")).toList()}// When any user is updated, the "users:role:admin" entry is invalidated automatically.controller.set(users,User.serializer()){findOneAndUpdate(filter,update,options)}
// lastSeen update does not affect any status or count queriescontroller.set(users,User.serializer(),invalidateVolatiles=false){findOneAndUpdate(Filters.eq("_id",userId),Updates.set("lastSeen",Instant.now()),FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER),)}
Capping cache size
// Do not cache if the result has more than 500 documentsvalresults=controller.getAll(users,User.serializer(),maxCacheSize=500,){find().toList()}
Write-behind
valcontroller=MongoKacheController(cache=cache,asyncWriteScope=CoroutineScope(Dispatchers.IO),onAsyncWriteError={logger.error("Async write failed",it)},)// Cache is updated immediately; DB write is queuedcontroller.setAsync(updatedUser,users,User.serializer()){user->replaceOne(Filters.eq("_id",user.id),user)}
varcacheOn=truevalcontroller=MongoKacheController(cacheEnabled={cacheOn},cache=cache,)// Disable cache for a request (e.g. admin bypass)cacheOn=falsevalfreshData=controller.getAll(users,User.serializer()){find().toList()}cacheOn=true