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

使用方式:

[java] view plain copy

  1. public static void main(String[] args) {
  2. TokyoTyrantDB.getInstance().save(key, value);
  3. TokyoTyrantDB.getInstance().getValueByKey(key);
  4. }

时间: 2024-08-03 03:15:53

ttServer缓存的简单使用的相关文章

Nginx专题: upstream模块和缓存的简单使用

Nginx专题: upstream模块和缓存的简单使用 前言: 本文接着上篇Nginx专题: 从编译安装到URL重写来介绍Nginx的负载均衡模块使用方法, 本文的实验没有考虑大多数情况, 例如两个web服务器之间的数据同步等, 主要写Nginx如何作为负载均衡器使用并且缓存 实验拓扑 实验环境 主机 IP地址 功用 lb.anyisalin.com 172.16.1.2 负载均衡并缓存静态资源 web1.anyisalin.com 172.16.1.3 提供web服务 web2.anyisal

ttserver搭建及简单操作

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

使用NSURLProtocol实现UIWebView的离线缓存的简单实现

文章介绍了使用NSURLProtocol实现UIWebView的离线缓存的简单实现,你可以在github上下载这个demo的代码. 无论是"MKNetworkKit"还是"AFCache"实现的缓存都过于复杂,而他想要的是一个简单机制: 1.你使用了UIWebView指向来显示一个有图像嵌入的网站. 2.当你的设备online时,你有正常的缓存算法. 3.当你的设备offline时,你可以显示页面的最后一个版本. 这个demo里做了一个很简单的测试:将cnn.com

缓存的简单实现

//此文基于<Java并发编程实践> 我们都知道在应用程序中合理地使用缓存,能更快的访问我们之前的计算结果,从而提高吞吐量.例如Redis和Memcached基于内存的数据存储系统等.此篇文章介绍如何实现简单缓存. 首先定义一个Computable接口A是输入,V是输出. 1 package simplecache; 2 3 /** 4 * Created by yulinfeng on 12/25/16. 5 */ 6 public interface Computable<A, V&

【Java/Android性能优 6】Android 图片SD卡缓存 使用简单 支持预取 支持多种缓存算法 支持不同网络类型 支持序列化

本文转自:http://www.trinea.cn/android/android-imagesdcardcache/ 本文主要介绍一个支持图片自动预取.支持多种缓存算法.支持数据保存和恢复的图片Sd卡缓存的使用.功能及网友反馈的常见问题解答. 需要二级缓存或ListView和GridView图片加载请优先使用ImageCache. 与Android LruCache相比主要特性:(1). 使用简单  (2). 轻松获取及预取新图片  (3). 可选择多种缓存算法(FIFO.LIFO.LRU.M

Mybatis缓存(1)--------系统缓存及简单配置介绍

前言 Mybatis的缓存主要有两种: 系统缓存,也就是我们一级缓存与二级缓存: 自定义的缓存,比如Redis.Enhance等,需要额外的单独配置与实现,具体日后主要学习介绍. 在这里主要记录系统缓存的一些简单概念, 并没有涉及原理.其中会涉及Mybatis的相关配置以及生命周期等. 主要参考资料:<深入浅出Mybatis基础原理与实战>,http://www.mybatis.org/mybatis-3/zh/index.html 1.Mybatis简单配置介绍 本文介绍的是基于XML的配置

缓存的简单实现方式

参考: <Java 并发实践> 李大狗大神的大作和源码非常值得分析阅读 1.String的hashCode:数据缓存在类变量中 字符串类维护了一个常量池-每当使用String str="xxx"创建对象,都会首先检查字符串是否在常量池中-有的话直接返回池中对象的实例引用,否则则创建一个对象返回并将对象放进池中. 没当调用 String.hashCode()方法时,字符串的hashCode便会缓存在String类变量中,下次查询是直接返回. 2.数据缓存在XXHashMap中

echache缓存的简单使用方法

1.需要echache的jar包 2.需要配置文件ehcache.xml和ehcache.xsd,主要是在ehcache.xml中进行配置 3.修改配置文件ehcache.xml  ,例如添加配置如下: <cache name="memoryCache" maxElementsInMemory="500" <!-- 最大缓存数量 --> eternal="true" <!-- 在内存中永久存在,由于此处设置为true,所以

缓存LruCache简单创建和使用

LruCache一般使用: /** * 总容量为当前进程的1/8,单位:KB * sizeOf():计算缓存对象的大小,单位要一致 * entryRemoved():移除旧缓存时调用 */ int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024); int cacheSize = maxMemory / 8; LruCache lruCache = new LruCache<String, Bitmap>(cacheSize