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. }

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

  1. [原创]关于mybatis中一级缓存和二级缓存的简单介绍

    关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...

  2. 使用Spring缓存的简单Demo

    使用Spring缓存的简单Demo 1. 首先创建Maven工程,在Pom中配置 <dependency> <groupId>org.springframework</g ...

  3. 关于mybatis中一级缓存和二级缓存的简单介绍

    关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...

  4. java项目中ehcache缓存最简单用法

      java项目中ehcache缓存最简单用法: 1.下载ehcache-core-2.4.3.jar复制到项目的lib目录下 2.新建ehcache.xml文件,放置在项目src目录下的resour ...

  5. android APP是否需要缓存?+简单架构

    问题的由来 昨天,当我写完我的第一篇博客之后,我便百无聊赖的玩起了手机!当我打开Google自带的一些app的时候,发现他们直接叫我连接网络,并没有缓存上次从网络获取的数据.这就让我感到很奇怪!于是我 ...

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

    前言 Mybatis的缓存主要有两种: 系统缓存,也就是我们一级缓存与二级缓存: 自定义的缓存,比如Redis.Enhance等,需要额外的单独配置与实现,具体日后主要学习介绍. 在这里主要记录系统缓 ...

  7. Android 多用户多缓存的简单处理方案

    需求:1.在缓存中记录用户登录信息.例如:用户名,密码 2.记录用户操作数据.例如:是否记住用户名密码.设置7天内自动登录等 简单设计:1)使用sqlite设计一张用户数据表,有用户名.密码.操作数据 ...

  8. C#中缓存的简单方法及使用Sql设置缓存依赖项

    概述 使用Cache高速缓存可以提高数据的读取速度,减少服务器与客户端之间的数据交互.因为Cache一经创建就会占用服务器上的资源,所以Cache并不是越多越好,一般用于数据较固定,使用较频繁的地方. ...

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

    本文转自:http://www.trinea.cn/android/android-imagesdcardcache/ 本文主要介绍一个支持图片自动预取.支持多种缓存算法.支持数据保存和恢复的图片Sd ...

随机推荐

  1. 孤荷凌寒自学python第二十八天python的datetime.date模块

     孤荷凌寒自学python第二十八天python的datetime.date模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.toordinal() 此方法将访问从公元1年1月1日至当 ...

  2. Opencv3.4.5安装包

    这个资源是Opencv3.4.5安装包,包括Windows软件包,Android软件包,IOS软件包,还有opencv的源代码:需要的下载吧. 点击下载

  3. c#中获得MD5字符串方法

    在用户登录的过程中,我们会遇到要查询对比用户名密码的是否存在或者是否正确,但是数据库中存放的是通过MD5加密的字符串,所有我们可以先把用户输入的用户名或者是密码先转为DM5字符串再跟数据库查出的MD5 ...

  4. weex & web app & vue

    weex & web app & vue https://weex-project.io/tools/playground.html https://weex.apache.org/ ...

  5. 第八篇:python基础_8 面向对象与网络编程

    本篇内容 接口与归一化设计 多态与多态性 封装 面向对象高级 异常处理 网络编程 一. 接口与归一化设计 1.定义 (1)归一化让使用者无需关心对象的类是什么,只需要知道这些对象都具备某些功能就可以了 ...

  6. deeplearning4j——卷积神经网络对验证码进行识别

    一.前言 计算机视觉长久以来没有大的突破,卷积神经网络的出现,给这一领域带来了突破,本篇博客,将通过具体的实例来看看卷积神经网络在图像识别上的应用. 导读 1.问题描述 2.解决问题的思路 3.用DL ...

  7. BZOJ2743 [HEOI2012]采花 【离线 + 树状数组】

    题目 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于公主采 ...

  8. mysql慢查询工具

    GeorgeHao 安装过程: [root@localhost-centos6 ~]# wget percona.com/get/pt-query-digest [root@localhost-cen ...

  9. vue刨坑(二)

    vue实例 vue实例 每一个应用都是通过vue这个构造函数创建根实例(root instance),启动 new vue(选项对象) 需要传入选项对象,对象包含挂载元素,数据,模板,方法等. el: ...

  10. C 随机不重复元素~转

    随机产生不重复元素:如何高效产生m个n范围内的不重复随机数(m<=n) 如何产生不重复的随机数?最容易想到的方法,是逐个产生这些随机数,每产生一个,都跟前面的随机数比较,如果重复,就重新产生.这 ...