ttServer緩存的簡單使用

ttserver是一款 DBM 數據庫,該數據庫讀寫非常快,哈希模式寫入100萬條數據只需0.643秒,讀取100萬條數據只需0.773秒,是 Berkeley DB 等 DBM 的幾倍。利用Tokyo Tyrant構建兼容Memcached協議、支持故障轉移、高併發的分佈式key-value持久存儲系統。key-value分佈式存儲系統查詢速度快、存放數據量大、支持高併發,非常適合通過主鍵進行查詢,但不能進行復雜的條件查詢。

import java.util.Properties;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.core.io.ClassPathResource;

import tokyotyrant.MRDB;
import tokyotyrant.networking.NodeAddress;
import tokyotyrant.transcoder.StringTranscoder;
/**
 * 和ttServer服務端連接的工具類
 * 使用jar包:tokyotyrant-0.11.jar
 * @author 7q
 */
public class TokyoTyrantDB {

	private static TokyoTyrantDB db = new TokyoTyrantDB();
	//默認值
	private String IP = "127.0.0.1";
	private String PORT = "8888";
	MRDB rdb = null;
	private Log logger = LogFactory.getLog(TokyoTyrantDB.class);
	
	/**
	 * 創建對象的時候,加載配置文件,創建和ttServer服務器的連接
	 */
	private TokyoTyrantDB() {
		try {
			/*
			 * 讀取配置文件(配置文件放在src下,或者放在src下的META-INF文件夾下,沒有這個文件夾可以創建一個)
			 * ip=192.168.0.100
			 * port=99
			 */
			ClassPathResource resource = new ClassPathResource("tt.properties");
			Properties properties = new Properties();
			properties.load(resource.getInputStream());
			if (properties.getProperty("ip") != null) {
				IP = properties.getProperty("ip");
			}
			//System.out.println(IP);
			if (properties.getProperty("port") != null) {
				PORT = properties.getProperty("port");
			}
			//System.out.println(PORT);
			rdb = new MRDB();
			//創建連接
			rdb.open(NodeAddress.addresses("tcp://" + IP + ":" + PORT));
			
		} catch (Exception e) {
			logger.error(e.getMessage(), e);
		}
	}

	public static TokyoTyrantDB getInstance() {
		return db;
	}
	/**
	 * 保存數據到ttServer
	 * @param key
	 * @param value
	 * @return  保存成功,返回true,保存失敗,返回false
	 */
	public boolean save(String key, String value) {
		try {
			if (rdb.put(key, value).get()) {
				return true;
			} else {
				return false;
			}
		} catch (Exception e) {
			logger.error(e.getMessage(), e);
			//如果保存數據出異常,重試再連接一次
			try {
				if (rdb == null) {
					rdb = new MRDB();
					rdb.open(NodeAddress.addresses("tcp://" + IP + ":" + PORT));
				}
			} catch (Exception ex) {
				logger.error(ex.getMessage(), ex);
			}
			return false;
		}
	}
	
	/**
	 * 通過key獲取value
	 * @param key
	 * @return  通過key獲取value
	 */
	public String getValueByKey(String key) {
		try {
			Object object = rdb.get(key, new StringTranscoder()).get();
			if (object != null) {
				return object.toString();
			}
			return null;
		} catch (Exception e) {
			logger.error(e.getMessage(), e);
			try {
				if (rdb == null) {
					rdb = new MRDB();
					rdb.open(NodeAddress.addresses("tcp://" + IP + ":" + PORT));
				}
				
			} catch (Exception ex) {
				logger.error(ex.getMessage(), ex);
			}
			return null;
		}
	}
}
使用方式:
public static void main(String[] args) {
	TokyoTyrantDB.getInstance().save(key, value);
	TokyoTyrantDB.getInstance().getValueByKey(key);
}


發佈了32 篇原創文章 · 獲贊 20 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章