SSDB 现在已经支持 Java 语言了! 先看一个例子:
SSDB ssdb = new SSDB("127.0.0.1", 8888); ssdb.set("a", "123"); byte[] val = ssdb.get("a");
SSDB Java 的 API 和 PHP, Cpy, Python 等动态脚本语言的 API 有很大不同, 首先 SSDB Java 用异常展示出错, 用 null 或者 Double.NaN 表示 not_found. 另外, 对于列表数据的结果, 返回的是 Response 结构.
具体使用的时候就知道了, API Doc 地址: http://www.ideawu.com/ssdb/java-doc/
我有一个javaweb的项目需要用到ssdb去做数据存储,那么就面对一个问题:
前台每次请求过来我都要调用下get方法判断某个键下面是否有值,没有的话再set一个;
然后在这一系列操作指定完之后我是否要去执行close()关闭链接呢?
因为是一个web项目,需要长期运行在线上,所以我很难拿捏何时去close()一个db链接,劳烦作者能提供一个建议,是否有必要每次动作执行完毕都去执行close(这样在高并发时开销大不大),还是说有某一种机制可以让它自动关闭链接 Reply
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at main.java.com.udpwork.ssdb.MemoryStream.write(MemoryStream.java:108)
at main.java.com.udpwork.ssdb.Link.recv(Link.java:92)
at main.java.com.udpwork.ssdb.Link.request(Link.java:71)
at main.java.com.udpwork.ssdb.Link.request(Link.java:51)
at main.java.com.udpwork.ssdb.SSDB.request(SSDB.java:36)
at demo.java.Demo.main(Demo.java:16)
源码就是在网上下载的javassdb-master 如下:
package demo.java;
import main.java.com.udpwork.ssdb.*;
/**
* SSDB Java client SDK demo.
*/
public class Demo {
public static void main(String[] args) throws Exception {
SSDB ssdb = null;
Response resp;
byte[] b;
ssdb = new SSDB("192.168.124.1", 139);
System.out.println("—- connected —–");
resp = ssdb.request("qpush", "q", "a");
for(int i=1; i<resp.raw.size(); i+=2){
String s = new String(resp.raw.get(i));
System.out.println(s);
} Reply
https://github.com/ssdb/javassdb
另外,推荐一个第三方的SSDB的Java Client
https://github.com/nutzam/ssdb4j/ Reply
在stable-1.6.8.8 中没有看到java API就用stable-1.6.8.6中的, 少量测试没有发现异常,大量测试之后,发现有时候会报错:
java.lang.NumberFormatException: For input string: "headers"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at db.ssdb.Link.parse(Link.java:121)
at db.ssdb.Link.recv(Link.java:88)
at db.ssdb.Link.request(Link.java:73)
at db.ssdb.Link.request(Link.java:45)
at db.ssdb.SSDB.hset(SSDB.java:134)
at db.ssdb.SSDB.hset(SSDB.java:142)
说明: 我的代码: ssdb.hset(url_hash, "headers", headers);
这里的headers是gzip压缩过的http请求头(http请求头结束符:\r\n\r\n)
不知道是我保存的数据的问题还是? Reply
Java客户端有没有计划实现连接池机制呢? Reply