ttserver 缓存使用和过期设置

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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值