/* * * * Copyright 2014 Orient Technologies LTD (info(at)orientechnologies.com) * * * * Licensed under the Apache License, Version 2.0 (the "License"); * * you may not use this file except in compliance with the License. * * You may obtain a copy of the License at * * * * http://www.apache.org/licenses/LICENSE-2.0 * * * * Unless required by applicable law or agreed to in writing, software * * distributed under the License is distributed on an "AS IS" BASIS, * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * * See the License for the specific language governing permissions and * * limitations under the License. * * * * For more information: http://www.orientechnologies.com * */ package com.orientechnologies.orient.core.cache; import com.orientechnologies.orient.core.id.ORID; import com.orientechnologies.orient.core.record.ORecord; import java.util.Collection; /** * Generic cache interface that should be implemented in order to plug-in custom cache. Also implementing class has to have public * one-arg constructor to set cache limit. For example, next class can be safely used as plug-in cache: * * <pre> * public class CustomCache implements OCache { * public CustomCache(int initialLimit) { * // some actions to do basic initialization of cache instance * ... * } * * //implementation of interface * ... * } * </pre> * * As reference implementation used {@link ORecordCacheWeakRefs} * * @author Maxim Fedorov */ public interface ORecordCache { /** * All operations running at cache initialization stage */ void startup(); /** * All operations running at cache destruction stage */ void shutdown(); /** * Tell whether cache is enabled * * @return {@code true} if cache enabled at call time, otherwise - {@code false} */ boolean isEnabled(); /** * Enable cache * * @return {@code true} - if enabled, {@code false} - otherwise (already enabled) */ boolean enable(); /** * Disable cache. None of record management methods will cause effect on cache in disabled state. Only cache info methods * available at that state. * * @return {@code true} - if disabled, {@code false} - otherwise (already disabled) */ boolean disable(); /** * Look up for record in cache by it's identifier * * @param id * unique identifier of record * @return record stored in cache if any, otherwise - {@code null} */ ORecord get(ORID id); /** * Push record to cache. Identifier of record used as access key * * @param record * record that should be cached * @return previous version of record */ ORecord put(ORecord record); /** * Remove record with specified identifier * * @param id * unique identifier of record * @return record stored in cache if any, otherwise - {@code null} */ ORecord remove(ORID id); /** * Remove all records from cache */ void clear(); /** * Total number of stored records * * @return non-negative number */ int size(); /** * Keys of all stored in cache records * * @return keys of records */ Collection<ORID> keys(); }