Den första publika open source versionen av AbstractCache är nu släppt. Jag utvecklade denna lösning då jag jobbade på Eniro. Dock så ville jag fortsätta utveckla denna lösning efter att jag lämnade och Eniro uppmuntrade mig att släppa den som ett Open Source projekt. Tack Linus!
Den är testad under ganska extrema förhållanden men behöver naturligtvis hela tiden förbättras.
AbstractCache är ett javaprojekt som satsar på att hantera lagring av data som är nyckel/värde baserad dvs kan ett värde kan letas upp med hjälp av en nyckel. Semantiskt ex. $cache->get($key)
För närvarande finns det stöd för Minnes, Disk och replikerade cachar.
Minnescacharna kan delas upp i tre grupper.
- LRU - Least Recent Used - Håller en MRU lista med LRU policy i minnet - Jag har i nuläget 4 implementationer men favoriserar två
- LFU - Least Frequently Used (bäst). De nycklar som används minst kastas först - 2 implementationer just nu.
- Hash - Obegränsad minneslagring - Ytterst snabb - En implementation som wrappar en HashMap.
De diskcachar som det finns stöd för idag.
- Btree - En b+tree lösning som använder sig av JDBM. Nycklarna är sorterade på samma sätt som en java.util.TreeMap och implementerar också SortedMap.
- Htree - En snabbare osorterad lösning som är hashbaserad.
- HashedDiskCache - En fil per nyckel/värde - Mycket stabil men inte lika snabb.
Distribuerade cachar
- MemCached - En wrapper kring Greg Whalin’s MemCached klient men följer java.util.Map interfacet
- Hdfs - En cache som använder sig av Hadoop Distributed File System som lagring. Mycket skalbar lösning men inte så snabb.
- Jgroups - Symmetrisk - En distributionsmekanism som ska garantera att alla noder som är anslutna har samma tillstånd i varje ögonblick.
- Jgroups - Assymmetrisk - Fungerar ungefär som MemCached men man kan ange hur många noder som skall innehålla samma nyckel/värde par.
+ en massa annat smått och stort bla.
- Stöd för Hibernate 2nd level cache.
- OsCache wrapper
- Timade cachar och mappar
- Cache som sparar dess tillstånd periodiskt och vid nedstängning.
- Acegi User Cache
TODO
- Förbättra Jgroups replikeringen.
- Bygga stöd för distribuerad Lucene indexering av det data som läggs i cachen.
- Lägga till en wrapper för EHCache
- Lägga till en wrapper för JBoss TreeCache
- Bygga en buffrad cache som kan öka prestanda på de diskbaserade lösningarna mångfalt.
- Bygga en cache som tar en lista av andra cachar och sparar tillståndet till/från dem i specificerad ordning. Tex en jgroupscache som backas av en minnescache som i sin tur backas av en diskbaserad.
- Slutligen wrappa ihop min CacheServer som använder sig av NIO. Detta är inte så hög prio då det finns andra serverlösningar som är ganska snabba.
- Plocka upp stöd igen för min rmilösning som jag slutade använda mig av för några år sen då det var så struligt att starta stoppa RMI processen inifrån webbapplikationer.