캐시 클래스 설계

캐시는 데이터 읽기의 효율을 높이기 위해 클라이언트가 서버에 접근할 때 먼저 캐시에 같은 요청 정보가 있는지 확인하고, 있으면 캐시에서 직접 읽고, 그렇지 않으면 데이터베이스에서 읽기 때문에 캐시 클래스를 설계할 때 데이터를 얻는 방법이 있어야 한다.
CacheClassTest2.java
package cn.itcast.thread;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;


public class CacheClassTest2<T> {

	Map<String, T> cache = new HashMap<String, T>();
	ReadWriteLock rwLock = new ReentrantReadWriteLock();
	public T get(String key) {
		rwLock.readLock().lock();
		T value = cache.get(key);
		try {	
			if (value == null) {
					rwLock.readLock().unlock();
					rwLock.writeLock().lock();
					value = (T)" ";
					cache.put(key, value);
					rwLock.writeLock().unlock();
					rwLock.readLock().lock();
				}
		} finally {
			rwLock.readLock().unlock();
		}
		return value;
	}

}

캐시 클래스에 저장할 수 있는 유형은 여러 가지가 있어야 하기 때문에 여기서 클래스 범주를 사용하고 읽기와 쓰기 자물쇠를 추가하면 읽을 때 내용을 수정할 수 없습니다.
생각: 읽기와 쓰기 자물쇠에서 쓰기 자물쇠는 반드시 풀어야 한다. 그렇지 않으면 읽을 방법이 없다. 그러나 읽기 자물쇠는 왜 마지막에 풀어야 합니까?여러 개의 자물쇠가 서로 배척하지 않는 이상, 왜finally에서 자물쇠를 잠그고 해제해야 합니까? 
개인적으로는 여기서 자물쇠를 풀지 않아도 되고, 자물쇠가 없는 상황에서 읽는 것은 막힘이 없고, 읽는 자물쇠를 방출하는 것은 데이터 읽는 효율을 높이기 위해서라고 생각한다.

좋은 웹페이지 즐겨찾기