View Javadoc
1   package org.apache.commons.jcs.engine.memory.behavior;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import org.apache.commons.jcs.engine.behavior.ICacheElement;
23  import org.apache.commons.jcs.engine.behavior.ICompositeCacheAttributes;
24  import org.apache.commons.jcs.engine.control.CompositeCache;
25  import org.apache.commons.jcs.engine.stats.behavior.IStats;
26  
27  import java.io.IOException;
28  import java.util.Map;
29  import java.util.Set;
30  
31  /** For the framework. Insures methods a MemoryCache needs to access. */
32  public interface IMemoryCache<K, V>
33  {
34      /**
35       * Initialize the memory cache
36       * <p>
37       * @param cache The cache (region) this memory store is attached to.
38       */
39      void initialize( CompositeCache<K, V> cache );
40  
41      /**
42       * Destroy the memory cache
43       * <p>
44       * @throws IOException
45       */
46      void dispose()
47          throws IOException;
48  
49      /**
50       * Get the number of elements contained in the memory store
51       * <p>
52       * @return Element count
53       */
54      int getSize();
55  
56      /**
57       * Returns the historical and statistical data for a region's memory cache.
58       * <p>
59       * @return Statistics and Info for the Memory Cache.
60       */
61      IStats getStatistics();
62  
63      /**
64       * Get a set of the keys for all elements in the memory cache.
65       * <p>
66       * @return a set of the key type
67       * TODO This should probably be done in chunks with a range passed in. This
68       *       will be a problem if someone puts a 1,000,000 or so items in a
69       *       region.
70       */
71      Set<K> getKeySet();
72  
73      /**
74       * Removes an item from the cache
75       * <p>
76       * @param key
77       *            Identifies item to be removed
78       * @return Description of the Return Value
79       * @throws IOException
80       *                Description of the Exception
81       */
82      boolean remove( K key )
83          throws IOException;
84  
85      /**
86       * Removes all cached items from the cache.
87       * <p>
88       * @throws IOException
89       *                Description of the Exception
90       */
91      void removeAll()
92          throws IOException;
93  
94      /**
95       * This instructs the memory cache to remove the <i>numberToFree</i>
96       * according to its eviction policy. For example, the LRUMemoryCache will
97       * remove the <i>numberToFree</i> least recently used items. These will be
98       * spooled to disk if a disk auxiliary is available.
99       * <p>
100      * @param numberToFree
101      * @return the number that were removed. if you ask to free 5, but there are
102      *         only 3, you will get 3.
103      * @throws IOException
104      */
105     int freeElements( int numberToFree )
106         throws IOException;
107 
108     /**
109      * Get an item from the cache
110      * <p>
111      * @param key
112      *            Description of the Parameter
113      * @return Description of the Return Value
114      * @throws IOException
115      *                Description of the Exception
116      */
117     ICacheElement<K, V> get( K key )
118         throws IOException;
119 
120     /**
121      * Gets multiple items from the cache based on the given set of keys.
122      * <p>
123      * @param keys
124      * @return a map of K key to ICacheElement&lt;K, V&gt; element, or an empty map
125      * if there is no data in cache for any of these keys
126      * @throws IOException
127      */
128     Map<K, ICacheElement<K, V>> getMultiple( Set<K> keys )
129         throws IOException;
130 
131     /**
132      * Get an item from the cache without effecting its order or last access
133      * time
134      * <p>
135      * @param key
136      *            Description of the Parameter
137      * @return The quiet value
138      * @throws IOException
139      *                Description of the Exception
140      */
141     ICacheElement<K, V> getQuiet( K key )
142         throws IOException;
143 
144     /**
145      * Spools the item contained in the provided element to disk
146      * <p>
147      * @param ce
148      *            Description of the Parameter
149      * @throws IOException
150      *                Description of the Exception
151      */
152     void waterfal( ICacheElement<K, V> ce )
153         throws IOException;
154 
155     /**
156      * Puts an item to the cache.
157      * <p>
158      * @param ce
159      *            Description of the Parameter
160      * @throws IOException
161      *                Description of the Exception
162      */
163     void update( ICacheElement<K, V> ce )
164         throws IOException;
165 
166     /**
167      * Returns the CacheAttributes for the region.
168      * <p>
169      * @return The cacheAttributes value
170      */
171     ICompositeCacheAttributes getCacheAttributes();
172 
173     /**
174      * Sets the CacheAttributes of the region.
175      * <p>
176      * @param cattr
177      *            The new cacheAttributes value
178      */
179     void setCacheAttributes( ICompositeCacheAttributes cattr );
180 
181     /**
182      * Gets the cache hub / region that uses the MemoryCache.
183      * <p>
184      * @return The cache value
185      */
186     CompositeCache<K, V> getCompositeCache();
187 }