Hi Alan, It is entirely application dependent, as you noted, but I would suggest starting with the in-memory cache or EhCache for the webservice calls and an on-disk EhCache for the pictures/articles. There is also a filesystem-based cache you might try for the pictures and articles that I forgot to mention earlier (ManagedHttpCacheStorage):
http://hc.apache.org/httpcomponents-client-ga/httpclient-cache/apidocs/org/apache/http/impl/client/cache/ManagedHttpCacheStorage.html The streaming video is going to be highly dependent on the particular protocol you're using, but if it's streaming, I'm not sure what you'd get from a cache. Hope that helps, Jon On Sat, Mar 17, 2012 at 12:26 PM, Alan Ho <[email protected]> wrote: > Hi Jon, > > I'm using caching on an android client, and I have 3 major scenarios: > > Making small restful webservice calls (maximum 64 KB in Size), and second > making much larger calls for pictures and articles, and lastly streaming > video. > > Can you make a suggestion on cache configurations that would work for each > scenario ? I know that it's subject to implementation / how much ram or > storage I have / etc - but I'm hoping you can give me a starting point. > > Thanks, > Alan Ho > > On Mar 17, 2012, at 10:50 AM, Jon Moore <[email protected]> wrote: > > > Hi Robert, > > > > Naturally, the ultimate answer is: it depends on your scenario! However, > I > > can perhaps provide some ways of thinking about your cache configuration. > > > > First, one of your choices will be which HttpCacheStorage > implementation(s) > > you want to use; there are 3 supported in the distribution: > > 1. an in-memory cache; this is the default implementation if you don't > > specify an alternative > > 2. an EhCache backend; this can be used to build a tiered in-memory and > > on-disk cache, and the on-disk can be configured to persist across > > application invocations > > 3. a memcached backend; this can be used either to keep your JVM heap > size > > smaller by keeping the cache memory out-of-process, or as a shared > > memcached pool for a cluster of application servers, for example > > > > Now, because the CachingHttpClient is a decorator, you can actually use > > multiple of these at the same time by wrapping them one inside the other. > > So, for example, you can have a L1 in-memory cache backed by a L2 EhCache > > that spills to disk. > > > > In all cases, you will want to be concerned with the total storage > > resources you want to allocate to the cache; EhCache and memcached have > > their own configuration for this, but you may want to tweak this for the > > in-memory cache if that's what you use. One thing to look at is the > maximum > > response body size that you'll cache, which currently defaults to 8KB; if > > you plan on caching responses than that, you'll need to increase this > > setting via CacheConfig#setMaxObjectSizeBytes(). > > > > If your server(s) use the 'stale-while-revalidate' Cache-Control > directive, > > then you may want to play with > > CacheConfig#setAsynchronousWorkerIdleLifetimeSecs(), > > CacheConfig#setAsynchronousWorkersCore(), > > CacheConfig#setAsynchronousWorkersMax(), and > > CacheConfig#setRevalidationQueueSize(), all of which basically control an > > underlying thread pool configuration to handle the background validation > > requests. These have "safe" defaults, so you may not need to tweak these > > until you get into performance tuning. > > > > Finally, if your origin servers don't set proper Cache-Control headers > but > > you want to cache the responses anyway, you may want to change > > CacheConfig#setHeuristicDefaultLifetime(). Another option for this is to > > write another decorator to modify Cache-Control headers on specific > > responses that come through, wired up between the CachingHttpClient and > the > > "real" underlying HttpClient. > > > > That said, if you just drop an unconfigured CachingHttpClient in, for > say, > > an API client that gets relatively small, but cacheable responses, you > > should hopefully see some immediate benefit just from the in-memory > cache. > > > > Hope that helps, > > Jon > > > > On Sat, Mar 17, 2012 at 10:21 AM, Robert Naczinski < > > [email protected]> wrote: > > > >> Hello, > >> > >> I want my application use cache, as shown below > >> > http://hc.apache.org/httpcomponents-client-ga/tutorial/html/caching.html. > >> > >> Does anyone know the best settings or recommendations for the > >> configuration of the cache? > >> > >> Regards, > >> > >> Robert > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: [email protected] > >> For additional commands, e-mail: [email protected] > >> > >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > >
