为了账号安全,请及时绑定邮箱和手机立即绑定

PHP可以拿到memcache中的key的过期时间吗?

PHP可以拿到memcache中的key的过期时间吗?

PHP
茅侃侃 2019-03-23 15:15:06
PHP可以拿到memcache中的key的过期时间吗?
查看完整描述

2 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

redis是一个类似memcached的key/value存储系统,它支持存储的value类型相对较多,包括string(字符串)、 list(链表)、set(集合)和zset(有序集合)。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件(这点儿个人觉得redis比memcache 在数据保存上要安全一些),并且在此基础上实现了master- slave(主从)同步。

redis的存取性能很高,SET操作每秒钟 110000 次,GET操作每秒钟 81000 次(速度很爽!)。

Redis针对不同的存储类型对象提供了不同的命令。

redis目前提供四种数据类型:string,list,set及zset(sorted set)。

string是最简单的类型,你可以理解成与Memcached一模一个的类型,一个key对应一个value,其上支持的操作与Memcached的操 作类似。但它的功能更丰富。

list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等。操作中key理解为链表的名字。

set是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作。操作中key理解为集合的名字。



查看完整回答
反对 回复 2019-03-24
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

memcached 数据过期机制 lazy expiration

内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。这种技术被称为lazy(惰性)expiration。因此,memcached不会在过期监视上耗费CPU时间,换句话说,也不能 检测 某个key的过期时间。。

可以使用一种较笨的方法:
definde('MEM_TIME_OUT',1800);
$memKey = "testkey";
$val = 'This is test value';

mem_set($key,$val); //调用

function mem_set($key,$val) {

$memcache -> set($memKey,$val, 0, MEM_TIME_OUT);
//当调用set 的时候顺便加一条记录时间
$memcache -> set('TIME_'.$memKey,time(), 0, MEM_TIME_OUT);
}
function mem_get($key,$is_time = false) {
$memKey = $is_time ? 'TIME_'.$key : $key;
$val = $memcache -> get($key);
if($is_time) {
$val = MEM_TIME_OUT - (time() - $val);
}
return $val;
}




查看完整回答
反对 回复 2019-03-24
  • 2 回答
  • 0 关注
  • 1658 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信