您的位置:首页 > 其它

ttserver 缓存使用和过期设置

2014-07-01 10:59 337 查看
ttserver是数据库,memcached是缓存。两者都是保存<key,value>形式的数据,通过key进行任何操作。ttserver可以将数据持久化保存,memcached全部是保存在内存中,memcached会自动删除过期数据,最长不超过30天,ttserver是存储所以没有过期一说。memcached在和一些api配合时,能自动进行数据的出入序列化,读取反序列化。ttserver有主从复制的功能,操作日志等,这完全是数据库才有的东西

ttserver启动后使用非常方便,php可以直接用Memcache扩展来操作

<?php
$memcache = new Memcached();
    $memcache->addServer('172.16.9.128', 2001) ;
    $add = $memcache->set("askie","2");
    echo $add."\n";
    $add = $memcache->get("askie");
    echo $add."\n";
?>


但是ttserver默认是不支持key过期的,要想让ttserver支持,就需要通过lua脚本的方式来实现

持久化而支持过期的缓存

如果你想位你的web应用缓存类似session信息这样的数据,但是想避免因服务器当机而造成的数据丢失,Tokyo Tyrant是一个方案,也就是说,持久化而支持过期的缓存。它需要下面的前提条件:

1. 服务器必须开启table database

2. 客户端保存每条记录时要使用过期数据列

3. 数据库在过期数据列上要有索引

4. 数据库要开启自动重新组合

5. 服务器必须周期性的调用通过Lua扩展提供的用户自定义函数

首先,为过期准备下面的脚本并保存为"ttexpire.lua"。当"X"列的数值超过当前日期时将使记录过期。

function expire()

local args = {}

local cdate = string.format("%d", _time())

table.insert(args, "addcond\0x\0NUMLE\0" .. cdate)

table.insert(args, "out")

local res = _misc("search", args)

if not res then

_log("expiration was failed", 2)

end

end

启动服务器,table database方式,其中有一个"x"列是有索引的,并计划每秒钟调用一次expiration 函数。

[terminal-1]$ ttserver -ext ttexpire.lua -extpc expire 1.0 "casket.tct#idx=x:dec#dfunit=8"

在另外一个终端中存储测试记录。

[terminal-2]$ now=`date +%s`

for((i=1;i<=60;i++)); do

tcrmgr put -sep '|' localhost "$i" "x|$((now+i))"

done

确认数据正在被过期机制删除:

[terminal-2]$ tcrmgr list -pv -sep '|' localhost
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: