Webmaster, Security und Technik Blog
  • Home
  • Tutorials und Anleitungen
  • Webmaster-Forum
  • Gastautor werden
  • Über den Autor
  • Impressum und Datenschutz

Archiv » 2011



[Java] LRU Cache mit Hilfe einer LinkedHashMap

Oftmals benötigt man als Java-Entwickler eine kleine, feine Cache-Klasse, um verschiedene Objekte zwischenzuspeichern und die Datenbank zu schonen. Oftmals wird dann selber mit Arrays, Maps und Listen rumgefuchtelt. Viele kennen nämlich gar nicht die praktische Klasse java.util.LinkedHashMap.

Dabei ist es mit Hilfe dieser Klasse extrem einfach, einen sogenannten LRU-Cache aufzubauen, also einen Least-Recently-Used-Cache. Sprich einen Cache, der die n letzten Objekte speichert. Man gibt also eine feste Cachegröße vor, zum Beispiel 100 und der Cache sorgt dann selber dafür, das Objekte mit einer hohen Zugriffsanzahl weiterhin gecached bleiben und Objekte mit wenigen Zugriffen aus dem Cache entfernt werden. Altes fliegt also nach hinten raus, in dem Fall wenn es mehr als 100 Elemente sind.

Christian d’Heureuse hat dazu jetzt auf Basis der genannten Klasse einen Cache geschrieben, den ich selber leicht abgewandelt so schon benutzt habe. Auf seiner Seite source-code.biz findet sich der entsprechende Source-Code dazu. BTW: Der Trick daraus einen LRU Cache zu machen, ist das Überschreiben der Methode removeEldestEntry der Klasse LinkedHashMap. Damit hat man einen relativ performanten Cache, ohne selber Iterationen einbauen zu müssen, um ggf. veraltete Elemente zu erkennen.

/**
* An LRU cache, based on <code>LinkedHashMap</code>.
*
* <p>
* This cache has a fixed maximum number of elements (<code>cacheSize</code>).
* If the cache is full and another entry is added, the LRU (least recently used) entry is dropped.
*
* <p>
* This class is thread-safe. All methods of this class are synchronized.
*
* <p>
* Author: Christian d'Heureuse, Inventec Informatik AG, Zurich, Switzerland<br>
* Multi-licensed: EPL / LGPL / GPL / AL / BSD.
*/
public class LRUCache<K,V> {
 
private static final float   hashTableLoadFactor = 0.75f;
 
private LinkedHashMap<K,V>   map;
private int                  cacheSize;
 
/**
* Creates a new LRU cache.
* @param cacheSize the maximum number of entries that will be kept in this cache.
*/
public LRUCache (int cacheSize) {
   this.cacheSize = cacheSize;
   int hashTableCapacity = (int)Math.ceil(cacheSize / hashTableLoadFactor) + 1;
   map = new LinkedHashMap<K,V>(hashTableCapacity, hashTableLoadFactor, true) {
      // (an anonymous inner class)
      private static final long serialVersionUID = 1;
      @Override protected boolean removeEldestEntry (Map.Entry<K,V> eldest) {
         return size() > LRUCache.this.cacheSize; }}; }
 
/**
* Retrieves an entry from the cache.<br>
* The retrieved entry becomes the MRU (most recently used) entry.
* @param key the key whose associated value is to be returned.
* @return    the value associated to this key, or null if no value with this key exists in the cache.
*/
public synchronized V get (K key) {
   return map.get(key); }
 
/**
* Adds an entry to this cache.
* The new entry becomes the MRU (most recently used) entry.
* If an entry with the specified key already exists in the cache, it is replaced by the new entry.
* If the cache is full, the LRU (least recently used) entry is removed from the cache.
* @param key    the key with which the specified value is to be associated.
* @param value  a value to be associated with the specified key.
*/
public synchronized void put (K key, V value) {
   map.put (key, value); }
 
/**
* Clears the cache.
*/
public synchronized void clear() {
   map.clear(); }
 
/**
* Returns the number of used entries in the cache.
* @return the number of entries currently in the cache.
*/
public synchronized int usedEntries() {
   return map.size(); }
 
/**
* Returns a <code>Collection</code> that contains a copy of all cache entries.
* @return a <code>Collection</code> with a copy of the cache content.
*/
public synchronized Collection<Map.Entry<K,V>> getAll() {
   return new ArrayList<Map.Entry<K,V>>(map.entrySet()); }
 
} // end class LRUCache

Benutzen könnt ihr die Klasse dann wie folgt:

import java.util.Map;
 
public class UseCache {
	// Test routine for the LRUCache class.
	public static void main(String[] args) {
		LRUCache<String, String> c = new LRUCache<String, String>(3);
		c.put("1", "one"); // 1
		c.put("2", "two"); // 2 1
		c.put("3", "three"); // 3 2 1
		c.put("4", "four"); // 4 3 2
		if (c.get("2") == null)
			throw new Error(); // 2 4 3
		c.put("5", "five"); // 5 2 4
		c.put("4", "second four"); // 4 5 2
		// Verify cache content.
		if (c.usedEntries() != 3)
			throw new Error();
		if (!c.get("4").equals("second four"))
			throw new Error();
		if (!c.get("5").equals("five"))
			throw new Error();
		if (!c.get("2").equals("two"))
			throw new Error();
		// List cache content.
		for (Map.Entry<String, String> e : c.getAll())
			System.out.println(e.getKey() + " : " + e.getValue());
	}
}

Eine echt praktische Klasse die einem mit Java-Standard-Mitteln eine nette kleine Caching-Funktion bietet.

More

Die 5 beliebtesten Artikel 2011

Ich habe mich mal durch die Jahresstatistiken gewühlt und für euch die 5 beliebtesten Artikel des Jahres 2011 herausgesucht. Dabei sind eigentlich die gleichen Artikel wie auch im letzten Jahr aufgetaucht. Ihr scheint euch immer nur für das gleiche zu interessieren ;). Dabei kann ich auch durchaus mit guten neuen Artikel punkten, zum Beispiel lege ich euch das SOPA Video von Dan Bull ans Herz. Ebenso sind Aktenvernichter ein gutes Weihnachtsgeschenk wie ich finde, warum, das lest ihr in dem entsprechenden Artikel! Aber jetzt zur versprochenen Liste, die folgenden fünf Punkte sind absteigend nach den Besucherzahlen im Jahr 2011 sortiert. Viel Spaß beim stöbern und nicht vergessen sich auch mal durchs Archiv aus dem Jahr 2011 zu klicken, das kann sich durchaus lohnen!

  1. Rubik Cube (Zauberwürfel) leicht lösen – Die Videos mit den Erklärungen zum Lösen des Rubik Cubes (auch Zauberwürfel genannt) sind wie jedes Jahr am beliebtesten. Nicht nur diese einfache Methode, auch die komplexere Fridrich Methode ist weit vorne mit dabei!
  2. Erstaunlich aber wahr, Let me google that for you! ist weiterhin auf Platz 2! Die Webseite um nervenden Fragern den Weg zu Google zu erklären. Schön dass das immer noch viele nicht wissen ;)
  3. Personen anhand der E-Mail Adresse finden, ebenfalls sehr beliebt. Die Neugierde der Leute wird also allgemein unterschätzt, jeder wollte sowas doch schon mal wissen ;)
  4. Wie man sich eine eigene Adresse in den USA einrichtet wollen auch viele wissen. Paketweiterleitung und ein weltweiter Versand ist also weiterhin ein Thema!
  5. Kostenlose CeBit Tickets auf Platz 5, damals noch zur CeBit 2011, im kommenden Jahr natürlich auch wieder zur aktuellen CeBit!
More

Frohes Fest 2011

Ich wünsche allen Bloglesern ein frohes und entspanntes Weihnachtsfest 2011.


(Foto von paparutzi)

More

SOPA Cabana Rap Song

Via netzpolitik.org habe ich einen Rap Song über den SOPA gefunden, der Stop Online Piracy Act soll dafür sorgen, dass Rechteinhaber alles mögliche im Internet sperren können. Ähnlich unserem Stopschild. Passt auf fast jede Situation, in der die Regierung eine solche Zensur durchbringen will. Einfach mal reinhören!

YouTube Preview Image More

Programmierer-Jargon oder was Yoda und Pokémon gemeinsam haben!

Vor kurzem habe ich auf StackOverflow eine sehr schöne Zusammenfassung von verschiedenen Ausdrücken gefunden, die Entwickler/Programmierer gerne benutzen, um oftmals schlecht gemachte Codestellen oder Konstrukte zu beschreiben, gerne auch humorvoll ;).

Falls ihr also selber programmiert oder euch mal grundsätzlich damit auseinandersetzen wollt, was man lieber nicht tun sollte, dann seid ihr auf StackOverflow genau richtig!. Und natürlich solltet ihr versuchen solche Bad Smells zu vermeiden und sauberen Code erstellen. Dabei kann auch StackOverflow ebenso helfen, grundsätzlich handelt es sich dabei nämlich um ein Forum für jegliche Programmiersprachen. In der weltweit vernetzten Community bekommt man auf fast jede Frage eine gute Antwort!

Meine “Favoriten” sind auf jeden Fall:

  • Yoda Conditions / Yoda Code: Der Code liest sich so wie Yoda spircht, nicht gerade sofort verständlich!
  • Pokémon Exception Handling: Getreu dem Motto “Gotta Catch ‘Em All”! Wer z.B. Java-Entwickler ist versteht was gemeint ist ;).
  • Sehr schön sind auch die verschiedenen Arten an Error-Reports, die man so zu Gesicht bekommt.

Schaut euch mal die Seite an, ihr werdet noch mehr amüsantes und bekanntes finden!

More
Seite: 1 2 3 4 5 6 ... 20 21 >>
  • RSS-Feed
  • Twitter
  • Xing

Kategorien

  • Beruf
  • Blogging
  • C
  • Comic
  • Datenbanken
  • Datenschutz
  • Design
  • Etymologie
  • Film
  • Gewinnspiele
  • HTML und CSS
  • Internet
  • Java
  • LaTeX
  • Mathematik
  • Musik
  • Numerik
  • PHP
  • Politik
  • Projektmanagement
  • Rätsel
  • Recht
  • SEO
  • Sicherheit
  • Software
  • Technik

Archiv

  • Juni 2013
  • Mai 2013
  • April 2013
  • März 2013
  • Februar 2013
  • Januar 2013
  • Dezember 2012
  • November 2012
  • Oktober 2012
  • September 2012
  • August 2012
  • Juli 2012
  • Juni 2012
  • Mai 2012
  • April 2012
  • März 2012
  • Februar 2012
  • Januar 2012
  • Dezember 2011
  • November 2011
  • Oktober 2011
  • September 2011
  • August 2011
  • Juli 2011
  • Juni 2011

Suche

Werbung

Online Cloud Backup   Textlinks verkaufen
Backlinks kaufen   RankSider

Artikel

  • Wie Sie einen Prozesswechsel angenehmer für Ihre Angestellten machen
  • DSL-Flatrate – wer bietet noch echte Flatrates?
  • Besonders schnelle Internetanschlüsse – welche Leistungen sind möglich?
  • Convertible Notebooks – Strohfeuer oder Zukunftstrend?
  • Tools für die Homepage: Disclaimer-Baukasten, Impressumsgenerator und Homepage-Check

Kommentare

  • lisa bei Personen anhand der E-Mail Adresse finden
  • Anaks bei Anonym Surfen – Ein Vergleich
  • Andi bei Eigene Adresse in den USA? Paketweiterleitung und weltweiter Versand inklusive
  • AppleDroid bei Eigene Adresse in den USA? Paketweiterleitung und weltweiter Versand inklusive
  • Lisa bei “Subscribe to Comments” mit Double-Opt-In Prüfung

Tipps

  • Aktenvernichter kaufen
  • Canon Kopierer vergleichen
  • Cross Browser Testing
  • EasyTopia
  • Erfolgreiche Blogs
  • Hardware News
  • iPhone APP Berichte
  • KFZ-Werkstatt Gütersloh
  • Quad-Tour Paderborn
  • Softwareentwicklung
  • Sushi Paderborn
  • Webmaster Tutorials

Blog über IT, Security und Technik

Webmaster, Technik, Security und IT Blog - Ein Blog über aktuelle IT-Nachrichten, Programmierung (Java), Datenbanken, Security und Technik.

Gerne können Sie auf meinem Blog Werbeanzeigen oder Sponsored Posts schalten. Bitte setzen Sie sich dafür einfach mit mir in Verbindung. Entsprechende Kontaktdaten finden Sie im Impressum.

Copyright © by sjmp.de

Free HTML-Templates