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);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值