首页 > 代码库 > ttServer缓存的简单使用

ttServer缓存的简单使用

ttserver是一款 DBM 数据库,该数据库读写非常快,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒,是 Berkeley DB 等 DBM 的几倍。利用Tokyo Tyrant构建兼容Memcached协议、支持故障转移、高并发的分布式key-value持久存储系统。key-value分布式存储系统查询速度快、存放数据量大、支持高并发,非常适合通过主键进行查询,但不能进行复杂的条件查询。

[java] view plain copy
  1. import java.util.Properties;  
  2.   
  3. import org.apache.commons.logging.Log;  
  4. import org.apache.commons.logging.LogFactory;  
  5. import org.springframework.core.io.ClassPathResource;  
  6.   
  7. import tokyotyrant.MRDB;  
  8. import tokyotyrant.networking.NodeAddress;  
  9. import tokyotyrant.transcoder.StringTranscoder;  
  10. /** 
  11.  * 和ttServer服务端连接的工具类 
  12.  * 使用jar包:tokyotyrant-0.11.jar 
  13.  * @author 7q 
  14.  */  
  15. public class TokyoTyrantDB {  
  16.   
  17.     private static TokyoTyrantDB db = new TokyoTyrantDB();  
  18.     //默认值  
  19.     private String IP = "127.0.0.1";  
  20.     private String PORT = "8888";  
  21.     MRDB rdb = null;  
  22.     private Log logger = LogFactory.getLog(TokyoTyrantDB.class);  
  23.       
  24.     /** 
  25.      * 创建对象的时候,加载配置文件,创建和ttServer服务器的连接 
  26.      */  
  27.     private TokyoTyrantDB() {  
  28.         try {  
  29.             /* 
  30.              * 读取配置文件(配置文件放在src下,或者放在src下的META-INF文件夹下,没有这个文件夹可以创建一个) 
  31.              * ip=192.168.0.100 
  32.              * port=99 
  33.              */  
  34.             ClassPathResource resource = new ClassPathResource("tt.properties");  
  35.             Properties properties = new Properties();  
  36.             properties.load(resource.getInputStream());  
  37.             if (properties.getProperty("ip") != null) {  
  38.                 IP = properties.getProperty("ip");  
  39.             }  
  40.             //System.out.println(IP);  
  41.             if (properties.getProperty("port") != null) {  
  42.                 PORT = properties.getProperty("port");  
  43.             }  
  44.             //System.out.println(PORT);  
  45.             rdb = new MRDB();  
  46.             //创建连接  
  47.             rdb.open(NodeAddress.addresses("tcp://" + IP + ":" + PORT));  
  48.               
  49.         } catch (Exception e) {  
  50.             logger.error(e.getMessage(), e);  
  51.         }  
  52.     }  
  53.   
  54.     public static TokyoTyrantDB getInstance() {  
  55.         return db;  
  56.     }  
  57.     /** 
  58.      * 保存数据到ttServer 
  59.      * @param key 
  60.      * @param value 
  61.      * @return  保存成功,返回true,保存失败,返回false 
  62.      */  
  63.     public boolean save(String key, String value) {  
  64.         try {  
  65.             if (rdb.put(key, value).get()) {  
  66.                 return true;  
  67.             } else {  
  68.                 return false;  
  69.             }  
  70.         } catch (Exception e) {  
  71.             logger.error(e.getMessage(), e);  
  72.             //如果保存数据出异常,重试再连接一次  
  73.             try {  
  74.                 if (rdb == null) {  
  75.                     rdb = new MRDB();  
  76.                     rdb.open(NodeAddress.addresses("tcp://" + IP + ":" + PORT));  
  77.                 }  
  78.             } catch (Exception ex) {  
  79.                 logger.error(ex.getMessage(), ex);  
  80.             }  
  81.             return false;  
  82.         }  
  83.     }  
  84.       
  85.     /** 
  86.      * 通过key获取value 
  87.      * @param key 
  88.      * @return  通过key获取value 
  89.      */  
  90.     public String getValueByKey(String key) {  
  91.         try {  
  92.             Object object = rdb.get(key, new StringTranscoder()).get();  
  93.             if (object != null) {  
  94.                 return object.toString();  
  95.             }  
  96.             return null;  
  97.         } catch (Exception e) {  
  98.             logger.error(e.getMessage(), e);  
  99.             try {  
  100.                 if (rdb == null) {  
  101.                     rdb = new MRDB();  
  102.                     rdb.open(NodeAddress.addresses("tcp://" + IP + ":" + PORT));  
  103.                 }  
  104.                   
  105.             } catch (Exception ex) {  
  106.                 logger.error(ex.getMessage(), ex);  
  107.             }  
  108.             return null;  
  109.         }  
  110.     }  
  111. }  
使用方式:
[java] view plain copy
  1. public static void main(String[] args) {  
  2.     TokyoTyrantDB.getInstance().save(key, value);  
  3.     TokyoTyrantDB.getInstance().getValueByKey(key);  
  4. }  


ttServer缓存的简单使用