TT/TC 遍历Key解决方案_Java_第七城市
TT/TC 遍历Key解决方案
项目中要遍历,对Key进行处理,弄了N个方案,记录下,具体选哪个再说,呵呵
需求:TC服务中通过KEY-VALUE存储了准备删除的文件KEY和时间,需要定期全量遍历KEY,进行删除,然后清理TC对应的数据。由业务决定了删除数据的量不大,目前主要要求可靠。1、给TT加个补丁,让其支持memcached协议访问,本人只会J***A,困难(同时被鄙视了),网上的那个补丁说有问题...
2、使用TC的J***A-API直接访问TC数据问题,已测试通过,注意在TT启动的时候,打开文件时候,mode需要加HDB.ONOLCK,不然,是读取不到数据的,一直卡在哪儿(我的需要是读取KEY,所有mode使用的是:HDB.OREADER|HDB.ONOLCK),这需要部署程序到TC服务,有点不爽,而且J***A打包也麻烦(有业务逻辑和功能基础包,都是maven依赖的,我靠,如果不人工清理,好多jar啊)。
代码:import tokyocabinet.*;public class TCHDBEX {public static void main(String[] args){// create the objectHDB hdb = new HDB();// open the databaseif(!hdb.open("/mnt/ttserver/tt_11212.tch", HDB.OREADER | HDB.ONOLCK)){int ecode = hdb.ecode();System.err.println("open error: " + hdb.errmsg(ecode));}SShdb.iterinit();while((key = hdb.iternext2()) != null){ System.out.println(key);}// close the databaseif(!hdb.close()){int ecode = hdb.ecode();System.err.println("close error: " + hdb.errmsg(ecode));}}}3、使用程序在本地指定tchmgr的cli工具直接读取命令行范围的流,得到keys.比较不好的是需要部署程序到TC服务器了。问题同方案2
代码:package com.feinno.storage.console.task.import java.io.BufferedRimport java.io.InputStreamRimport java.nio.charset.Cimport java.util.ArrayLimport java.util.Lpublic class LocalCliTCListKeys implements TCListKeys { private String charset = "UTF-8"; @Override public List list(int top) {
// TODO Auto-generated method stub
} @Override public List list() {
String shellCommand = "tchmgr list -nl /mnt/ttserver/tt_11211.tch";
String[] cmd = { "/bin/sh", "-c", shellCommand };
BufferedReader reader =
List keys = new ArrayList();
Process process = Runtime.getRuntime().exec(cmd);
reader = new BufferedReader(new InputStreamReader(process.getInputStream(), Charset.forName(charset)));
String buf =
while ((buf = reader.readLine()) != null) {
keys.add(buf);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (reader != null) {
reader.close();
} catch (Exception e2) {
}}4、远端使用程序远程SSH执行命令,获取返回的流,得到Keys,但是,需要获得TC服务的账户,会有一定的安全问题,因为是内部系统,如果使用普通用户SUDO,其实也是可行的。
public class SSHCliTCListKeys implements TCListKeys { private String charset = "UTF-8"; private String SSHUser = "root"; private String SSHPswd = "!QAZ2wsx"; private String SSHHost = "192.168.30.142"; private String dataFileLocalPath = "/mnt/ttserver/tt_11212.tch"; @Override public List list(int top) {
String shellCommand = "tchmgr list -nl -m " + top + " " + dataFileLocalP
return executeRemoteShellCommand(shellCommand); } @Override public List list() {
String shellCommand = "tchmgr list -nl " + dataFileLocalP
return executeRemoteShellCommand(shellCommand); } private List executeRemoteShellCommand(String shellCommand) {
List keys = new ArrayList();
BufferedReader reader =
Channel channel =
Session session =
JSch jsch = new JSch();
session = jsch.getSession(SSHUser, SSHHost, 22);
session.setPassword(SSHPswd);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(shellCommand);
channel.setInputStream(null);
((ChannelExec) channel).setErrStream(System.err);
channel.connect();
reader = new BufferedReader(new InputStreamReader(channel.getInputStream(), Charset.forName(charset)));
String buf =
while ((buf = reader.readLine()) != null) {
keys.add(buf);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (reader != null) {
reader.close();
} catch (Exception e2) {
channel.disconnect();
session.disconnect();
} public String getCharset() {
} public void setCharset(String charset) {
this.charset = } public String getSSHUser() {
return SSHU } public void setSSHUser(String sSHUser) {
SSHUser = sSHU } public String getSSHPswd() {
return SSHP } public void setSSHPswd(String sSHPswd) {
SSHPswd = sSHP } public String getSSHHost() {
return SSHH } public void setSSHHost(String sSHHost) {
SSHHost = sSHH } public String getDataFileLocalPath() {
return dataFileLocalP } public void setDataFileLocalPath(String dataFileLocalPath) {
this.dataFileLocalPath = dataFileLocalP }}5、在TC服务器上写个简单的Socket server,代理远端请求,在服务器上支持API或cli,返回给调用端。这个方法感觉最完美,没有安全问题,也实现了服务也业务解耦,只是,部署和维护麻烦了,多出来一个server,故障的可能性也稍微变大了些6、另类方案,直接从业务本身出发,修改数据结,使用TT支持的memcached现有的API解决。
需要延迟删除的文件的数据结构:
key1:[{'deleteFileKey1':'yyyy-mm-dd'},..] //配置定义为:10-N个
key2:[....]
key3:[....]
key4:[....]业务中,执行删除的时候,向使用循环遍历方式,找到空位或新插入keyN保存需要删除的fileKey
扫描遍历的逻辑(伪代码):
int i = 1;
while(memcacheClient.get("key"+i) != null){
// do busi
}特点:程序逻辑实现和控制稍微复杂。好处是部署维护相当简单。
兄弟们,你们选哪个!?
设置&input type=&file&&的
最新教程周点击榜
微信扫一扫查看: 15489|回复: 10
[求助]如何破坏WORD文档,不是有坏的想法.
阅读权限20
在线时间 小时
首先申明,绝对不是想恶意破坏别人的文件,我只是需要这样做.如果让一个WORD文件无法打开,不是需要加密等方法,我是需要得到类似"文档已损坏",以达到无法打开.谢谢先.
阅读权限20
在线时间 小时
或者,谁有已经损坏的WORD文档,请提供给我下载也可,谢谢.
阅读权限95
在线时间 小时
将其他类型文件的扩展名改为.doc
阅读权限20
在线时间 小时
呵,用个随便下个二进制或HEX编辑器,把文件头前两个字符乱改一个字就破掉了!(文件头处有文件类型,日期,大小等等,可以研究一下破坏何处,哈哈~~主要是破坏最最前面的那一点点)恢复破坏的方法:如法还原。以上方法适合破坏任意文件。包括可执行文件,早些年最拙劣的病毒会这样做。
阅读权限30
在线时间 小时
我有一个招& 楼主可以试一下 我们知道 ,打开word文档后,在原文档的旁边都会出现一个隐藏的临时文件:例如:我打开 123.doc , 打开后,在这个文档的旁边会生成一个 名为 “~$123.doc” 的临时文件(是隐藏文件)然后在打开的情况下,把这个文件名的& “~$”去掉(改一下文件名),让他成为一个文档,如“321.doc”然后,您直接双击打开这个 “321.doc”&& 里面就全是乱码了~~
阅读权限10
在线时间 小时
用记事本打开原文件,任意修改其中一两个字就行。
阅读权限100
在线时间 小时
进来看看是怎么回事。
这年头什么怪事都有。
阅读权限30
在线时间 小时
都是想恢复被破坏的文件,居然还有想破坏文件的?::o
阅读权限50
在线时间 小时
& & & & & & & &
破坏的目的可能是别人打不开,而自己可以打开,这样就很有意义了。
阅读权限20
在线时间 小时
真是怪事,怕别人看还是怎么的
最新热点 /1
ExcelHome每周都有线上直播公开课,
国内一流讲师真身分享,高手贴身答疑,
赶不上直播还能看录像,
关键居然是免费的!
厚木哥们都已经这么努力了,
你还好意思说学不好Office。
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师国家体育总局今年将办全国电子竞技公开赛
MacBook Air 的去留是一个老生常谈的问题。虽说它在 WWDC 2017 上已经得了一波 BUFF,...
威锋网在本届 WWDC 大会后展开了一次国内 App 开发者专场访谈。
近期,中国区App Store大量应用被强制下架,其实没大家想的这么复杂
苹果希望能在未来的MAC和AR眼镜中使用这项技术。
这些经典角色每个都自带丰富的动作动画。
看来,Apple Watch的潜力还是不小的。
毕竟说到改变生活,苹果一直都是先驱者~
现在随着交通越发的发达便利,全球化的步伐加快,出国旅游成为了大家享受生活,认识世...
突然有一天艾丹起床之后发现自己的父亲突然失踪不见了,而在父亲的房间当中摆放了一台...
就是这只有 9 款滤镜的 App 被一大群***姐大姐姐疯狂追捧,在社交网络上走红。
在本周的 App Store 更新当中,已经消失了一段时间的游戏开发团队 Upopa Games 再次出...
《星球大战》作为一个经典的IP,迪士尼可以说将其的商业价值进行了最大化的开发,近日...
《萌鸡敢死队》是OddGame推出的一款多人在线实时射击类游戏,从名字我们就能够知道这...
上周,独立游戏开发商 Mojo Forest 在 App Store 上架了他们的最新作品《多布王国:茸...
该设备可直接绕过智能手机及设备上的配套 App 便可进行对智能家居设备的操控。
在无线耳机这个重要的电子消费领域,来自其他厂商的竞争可不会小。
由于更偏向于暖色调,灯泡比较适合作为卧室、休息室、厨房、客厅的装饰灯。
本月早些时候,苹果在 WWDC 全球开发者大会上发布了一款带有数字小键盘的 Magic Keybo...
Doorbell Pro和Floodlight Cam在年底之前支持HomeKit。
与其他支持 HomeKit 的空气质量监测器不同的是,eve 整个系列产品的外观设计都非常简...
Fotofami 可以存储照片和视频,将 iPhone 本身的存储空间解放出来。
iOS 11 允许用户分别为两只不同的 AirPods 设置不同的双触动作。
家庭网络求解决!
注册时间 最后登录
在线时间188 小时 UID
主题帖子人气
青苹果, 积分 55, 距离下一级还需 145 积分
新家,上月接入的电信光纤,配的光猫只有一个LAN口,就把这宝贵的一个口给了客厅,书房和卧室都是无线接收,网络不理想,用下电脑还得到客厅,一直想把家里的网络布局重新改造一下,寻求大神的帮助!
现有布局:光纤----电信猫----TC(置于客厅,无线网络扩展)----小米盒子。现有设备:TC,荣耀路由,TP交换机。实现目标:所有房间均可有线,把MBP固定在书房,且不影响与客厅的TC文件共享,寻求解决方案!
注册时间 最后登录
在线时间32 小时 UID
主题帖子人气
发梅林固件的那个论坛牛人多,可以上那问问。
另外最好上个房型图
注册时间 最后登录
在线时间1871 小时 UID
帖子 精华1
主题帖子人气
光纤--电信猫--交换机(都置于弱电箱内,交换机接各房间预留网线)---TC(客厅)---荣耀路由(书房和卧室附近,lan口接TC的lan口,关闭DHCP,做ap使,供书房和卧室无线连接)
注册时间 最后登录
在线时间1871 小时 UID
帖子 精华1
主题帖子人气
二楼说的是koolshare吧,哪里比较热闹点,去注册个号,经常逛逛也不错。就怕你会长草。又该换路由器了,哈哈。
注册时间 最后登录
在线时间32 小时 UID
主题帖子人气
二楼说的是koolshare吧,哪里比较热闹点,去注册个号,经常逛逛也不错。就怕你会长草。又该换路由器了,哈 ...
我就是看了以后把路由和光猫都换了。
现在还想整个NAS。。。。。。
注册时间 最后登录
在线时间188 小时 UID
主题帖子人气
光纤--电信猫--交换机(都置于弱电箱内,交换机接各房间预留网线)---TC(客厅)---荣耀路由(书房和卧室附 ...
感谢你的回复,还有2个疑问
问题1:从交换机分出来的网络会不会有影响?这个交换机挺老的,估计还是百兆的。
问题2:你说的TC----荣耀路由是直连吗?那就需要接一根明线啊,太影响美观。如果把荣耀路由接在书房呢?
注册时间 最后登录
在线时间1871 小时 UID
帖子 精华1
主题帖子人气
我就是看了以后把路由和光猫都换了。
现在还想整个NAS。。。。。。
哈哈,我是换了个华硕88u,论坛都带毒,泡久了都得中毒。
注册时间 最后登录
在线时间188 小时 UID
主题帖子人气
发梅林固件的那个论坛牛人多,可以上那问问。
另外最好上个房型图
这个论坛我看牛人也不少啊,房型图不知道搞哪去了,还得找找
注册时间 最后登录
在线时间188 小时 UID
主题帖子人气
二楼说的是koolshare吧,哪里比较热闹点,去注册个号,经常逛逛也不错。就怕你会长草。又该换路由器了,哈 ...
家里2路由器应该够了吧?房子三房的,不大,规划好的话应该没问题吧
注册时间 最后登录
在线时间32 小时 UID
主题帖子人气
哈哈,我是换了个华硕88u,论坛都带毒,泡久了都得中毒。
哈哈!路由光猫花不了几个钱。千万不要去看HIFI论坛。
我中毒用一个MAC PRO的钱整了套HIFI系统
您需要登录后才可以回帖
回帖后跳转到最后一页
威锋旗下产品
Hi~我是威威!
沪公网安备 29号 | 沪ICP备号-1
新三板上市公司威锋科技(836555)
增值电信业务经营许可证:
Powered by Discuz!