导航:首页 > 专利知识 > memcache有效期

memcache有效期

发布时间:2022-06-28 21:15:36

Ⅰ thinkphp怎么打开数据缓存

删除缓存文件。文件在 项目名/Home/runtime。只要把runtime的文件删除再在页面刷新就会出现新增的模块。或者改配置,把缓存有效期的时间改成一秒。。。。配置在下面

/* 数据缓存设置 */
'DATA_CACHE_TIME' => 0, // 数据缓存有效期 0表示永久缓存
'DATA_CACHE_COMPRESS' => false, // 数据缓存是否压缩缓存
'DATA_CACHE_CHECK' => false, // 数据缓存是否校验缓存
'DATA_CACHE_TYPE' =>'File', // 数据缓存类型,支持:File|Db|Apc|Memcache|Shmop|Sqlite|Xcache|Apachenote|Eaccelerator
'DATA_CACHE_PATH' => TEMP_PATH,// 缓存路径设置 (仅对File方式缓存有效)
'DATA_CACHE_SUBDIR' => false, // 使用子目录缓存 (自动根据缓存标识的哈希创建子目录)
'DATA_PATH_LEVEL' => 1, // 子目录缓存级别。如果你对php这类有兴趣的话,可以和我一样在后盾人经常看看教材,自己多看几遍,慢慢的以后就明白了,希望能帮到你,给个采纳吧谢谢o(`・ω・´)o

Ⅱ 如何在Ubuntu 12.04上安装和使用Memcache

安装前需要用户具有root权限。开始安装前,首先更新系统。
sudo apt-get update

另外,还需要安装MySQL和PHP。
sudo apt-get install mysql-server php5-mysql php5 php5-memcache

安装Memcache
首先安装Memcache。
sudo apt-get install memcached

接着安装php-pear(PHP扩展和应用库)。
sudo apt-get install php-pear

如果没有安装编译器,需要安装build-essential。
sudo apt-get install build-essential

最后使用PECL(PHP扩展社区库)来安装Memcache。
sudo pecl install memcache

安装完成后,向memcache.ini文件中添加memcached:
echo "extension=memcache.so" | sudo tee /etc/php5/conf.d/memcache.ini

现在可以开始使用Memcache了。

确认Memcache并查看其状态
Memcache运行后,可以通过以下命令查看。
ps aux | grep memcache

另外,还可以查看Memcache的状态。
echo "stats settings" | nc localhost 11211

Memcache如何工作的?
Memcache可以直接通过代码来实现从缓存中获取查询数据。Memcache获取数据的过程如下:
function get_foo(foo_id)
foo = memcached_get("foo:" . foo_id)
return foo if defined foo

foo = fetch_foo_from_database(foo_id)
memcached_set("foo:" . foo_id, foo)
return foo
end

简单的Memcache实例
研究一个简单的php脚本,该脚本使用Memcache来获取mysql表中的一个值。

首先登录到mysql,创建一个表,查询一些数据。

登录到mysql: mysql -u root -p
执行下面命令:
use test;
grant all on test.* to test@localhost identified by 'testing123';
create table example (id int, name varchar(30));
insert into example values (1, "new_data");
exit;

退出MySQL后,创建Memcache脚本文件。
nano memtest.php

详细研究一下memtest.php的脚本文件。

首先创建与Memcache的长连接,使用Memcache的默认端口,11211。
<?php
$meminstance = new Memcache();
$meminstance->pconnect('localhost', 11211);

然后连接到MySQL数据库
mysql_connect("localhost", "test", "testing123") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());

接着创建查询,然后设置一个标识特定行为的key。
$query = "select id from example where name = 'new_data'";
$querykey = "KEY" . md5($query);

脚本首先查询缓存,如果结果不存在,则脚本再向原始数据库查询。一旦从原始数据库查询到结果,则脚本在Memcache中存储查询的结果,另外还可以设置缓存的有效期,即表示在这个有效期内,查询结果一直保持在缓存中(有效期一般是600秒)。
当首次运行脚本时,数据将会从MySQL数据库中获取到,此后这些数据会存储到缓冲中,这样第二次查询时,数据就是从缓存中获取的。
10分钟后,缓存会被再次清空,再次运行脚本,数据就会从数据库中获取。
$result = $meminstance->get($querykey);

if (!$result) {
$result = mysql_fetch_array(mysql_query("select id from example where name = 'new_data'")) or die('mysql error');
$meminstance->set($querykey, $result, 0, 600);
print "got result from mysql\n";
return 0;
}

print "got result from memcached\n";
return 0;

?>

以下是整个的脚本代码:
<?php
$meminstance = new Memcache();
$meminstance->pconnect('localhost', 11211);

mysql_connect("localhost", "test", "testing123") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());

$query = "select id from example where name = 'new_data'";
$querykey = "KEY" . md5($query);

$result = $meminstance->get($querykey);

if (!$result) {
$result = mysql_fetch_array(mysql_query("select id from example where name = 'new_data'")) or die('mysql error');
$meminstance->set($querykey, $result, 0, 600);
print "got result from mysql\n";
return 0;
}

print "got result from memcached\n";
return 0;

?>

运行脚本的执行结果:
# php memtest.php
got result from mysql

# php memtest.php
got result from memcached

# php memtest.php
got result from memcached

结论
通过使用Memcache技术,可以加速从数据库中获取数据的速度。然而,需要注意的是Memcache的大小有限,仅仅是个数据缓存区域,不能代替数据库。不过,Memcache是一个非常有用的系统,能够极大的提升服务器的效率。

Ⅲ THINKPHP 怎么开启模版缓存

同上,删除缓存文件。文件在 项目名/Home/runtime。只要把runtime的文件删除再在页面刷新就会出现新增的模块。或者改配置,把缓存有效期的时间改成一秒。。。。配置在下面

/* 数据缓存设置 */
'DATA_CACHE_TIME' => 0, // 数据缓存有效期 0表示永久缓存
'DATA_CACHE_COMPRESS' => false, // 数据缓存是否压缩缓存
'DATA_CACHE_CHECK' => false, // 数据缓存是否校验缓存
'DATA_CACHE_TYPE' => 'File', // 数据缓存类型,支持:File|Db|Apc|Memcache|Shmop|Sqlite|Xcache|Apachenote|Eaccelerator
'DATA_CACHE_PATH' => TEMP_PATH,// 缓存路径设置 (仅对File方式缓存有效)
'DATA_CACHE_SUBDIR' => false, // 使用子目录缓存 (自动根据缓存标识的哈希创建子目录)
'DATA_PATH_LEVEL' => 1, // 子目录缓存级别

Ⅳ php设置session时间

如何严格限制session在30分钟后过期!
1.设置客户端cookie的lifetime为30分钟;
2.设置session的最大存活周期也为30分钟;
3.为每个session值加入时间戳,然后在程序调用时进行判断;
至于为什么,我们首先来了解下php中session的基本原理:
PHP中的session有效期默认是1440秒(24分钟),也就是说,客户端超过24分钟没有刷新,当前session就会失效。当然如果用户关闭了浏览器,会话也就结束了,Session自然也不存在了!
大家知道,Session储存在服务器端,根据客户端提供的SessionID来得到这个用户的文件,然后读取文件,取得变量的值,SessionID可以使用客户端的Cookie或者Http1.1协议的
Query_String(就是访问的URL的“?”后面的部分)来传送给服务器,然后服务器读取Session的目录……
要控制Session的生命周期,首先我们需要了解一下php.ini关于Session的相关设置(打开php.ini文件,在“[Session]”部分):
1、session.use_cookies:默认的值是“1”,代表SessionID使用Cookie来传递,反之就是使用Query_String来传递;
2、session.name:这个就是SessionID储存的变量名称,可能是Cookie,也可能是Query_String来传递,默认值是“PHPSESSID”;
3、session.cookie_lifetime:这个代表SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废……就是因为这个所以Session不能永久使用!
4、session.gc_maxlifetime:这个是Session数据在服务器端储存的时间,如果超过这个时间,那么Session数据就自动删除!
还有很多的设置,不过和本文相关的就是这些了,下面开始讲如何设置Session的存活周期。
前面说过,服务器通过SessionID来读取Session的数据,但是一般浏览器传送的SessionID在浏览器关闭后就没有了,那么我们只需要人为的设置SessionID并且保存下来,不就可以……
如果你拥有服务器的操作权限,那么设置这个非常非常的简单,只是需要进行如下的步骤:
1、把“session.use_cookies”设置为1,使用Cookie来储存SessionID,不过默认就是1,一般不用修改;
2、把“session.cookie_lifetime”改为你需要设置的时间(比如一个小时,就可以设置为3600,以秒为单位);
3、把“session.gc_maxlifetime”设置为和“session.cookie_lifetime”一样的时间;
在PHP的文档中明确指出,设定session有效期的参数是session.gc_maxlifetime。可以在php.ini文件中,或者通过ini_set()函数来修改这一参数。问题在于,经过多次测试,修改这个
参数基本不起作用,session有效期仍然保持24分钟的默认值。
由于PHP的工作机制,它并没有一个daemon线程,来定时地扫描session信息并判断其是否失效。当一个有效请求发生时,PHP会根据全局变量
session.gc_probability/session.gc_divisor(同样可以通过php.ini或者ini_set()函数来修改)的值,来决定是否启动一个GC(Garbage Collector)。
默认情况下,session.gc_probability = 1,session.gc_divisor =100,也就是说有1%的可能性会启动GC。GC的工作,就是扫描所有的session信息,用当前时间减去session的最后修
改时间(modified date),同session.gc_maxlifetime参数进行比较,如果生存时间已经超过gc_maxlifetime,就把该session删除。
到此为止,工作一切正常。那为什么会发生gc_maxlifetime无效的情况呢?
在默认情况下,session信息会以文本文件的形式,被保存在系统的临时文件目录中。在Linux下,这一路径通常为\tmp,在 Windows下通常为C:\Windows\Temp。当服务器上有多个PHP应
用时,它们会把自己的session文件都保存在同一个目录中。同样地,这些PHP应用也会按一定机率启动GC,扫描所有的session文件。
问题在于,GC在工作时,并不会区分不同站点的session。举例言之,站点A的gc_maxlifetime设置为2小时,站点B的 gc_maxlifetime设置为默认的24分钟。当站点B的GC启动时,它会扫
描公用的临时文件目录,把所有超过24分钟的session文件全部删除掉,而不管它们来自于站点A或B。这样,站点A的gc_maxlifetime设置就形同虚设了。
找到问题所在,解决起来就很简单了。修改session.save_path参数,或者使用session_save_path()函数,把保存session的目录指向一个专用的目录,gc_maxlifetime参数工作正常了。
还有一个问题就是,gc_maxlifetime只能保证session生存的最短时间,并不能够保存在超过这一时间之后session信息立即会得到删除。因为GC是按机率启动的,可能在某一个长时间内
都没有被启动,那么大量的session在超过gc_maxlifetime以后仍然会有效。
解决这个问题的一个方法是,把session.gc_probability/session.gc_divisor的机率提高,如果提到100%,就会彻底解决这个问题,但显然会对性能造成严重的影响。另一个方法是自己
在代码中判断当前session的生存时间,如果超出了 gc_maxlifetime,就清空当前session。

Ⅳ 分布式session

传统的应用服务器,如 tomcat、jboss等,其自身所实现的 session管理大部分都是基于单机的。对于大型分布式网站来说,支撑其业务的远远不止一台服务器,而是一个分布式集群,请求在不同服务器之间跳转。那么,如何保持服务器之间的session同步呢﹖传统网站一般通过将一部分数据存储在cookic中,来规避分布式环境下 session 的操作。这样做的弊端很多,一方面cookie的安全性一直广为诟病,另一方面cookie存储数据的大小是有限制的。随着移动互联网的发展,很多情况下还得兼顾移动端的session需求,使得采用cookie来进行session同步的方式的弊端更为凸显。分布式session正是在这种情况下应运而生的。
对于系统可靠性要求较高的用户,可以将session持久化到DB中,这样可以保证宕机时会话不易丢失,但缺点也是显而易见的,系统的整体吞吐将受到很大的影响。另一种解决方案便是将session 统一存储在缓存集群上,如 memcache,这样可以保证较高的读、写性能,这一点对于并发量大的系统来说非常重要;并且从安全性考虑,session 毕竟是有有效期的,使用缓存存储,也便于利用缓存的失效机制。使用缓存的缺点是,一旦缓存重启,里面保存的会话也就丢失了,需要用户重新建立会话。

Ⅵ memcache 的 value 类型有哪些

对于java客户端来说,是Object类型。
试过基本类型,int,boolean等,没问题。
试过jdk提供的类,hashmap,arrayList等,没问题。
试过自定义类,需要implements Serializable,没问题。
所以,对于memcache的value,应该是序列化之后保存在内存中的。

Ⅶ ThinkPHP5.0怎么使用memcache

'cache' => [
// 驱动方式
'type' => 'memcache',
// 缓存保存目录
'path' => CACHE_PATH,
// 缓存前缀
'prefix' => '',
// 缓存有效期 0表示永久缓存
'expire' => 0,
],这样试试吧你看过后很简单吧以后不会可以向我一样经常到后盾人平台找找相关教材看看就会了,希望能帮到你,给个采纳吧谢谢٩(๑^o^๑)۶

Ⅷ 程序API有哪些接口安全需要注意,如何防刷新

访问的时候记录用户IP,写到Memcache,ip为key,值为1,有效期一个小时;
每访问一次就给这个IP+1,加到10W次就不执行,只能等到记录过期,然后就可以继续开始咯

Ⅸ thinkphp 数据缓存是否校验缓存是什么意思

在ThinkPHP中进行缓存操作,一般情况下并不需要直接操作缓存类,因为系统内置对缓存操作进行了封装,直接采用S方法即可,例如:

// 缓存初始化

S(array('type'=>'xcache','expire'=>60));

缓存初始化可以支持的参数根据不同的缓存方式有所区别,常用的参数是:

参数 描述

expire 缓存有效期(时间为秒)

prefix 缓存标识前缀

type 缓存类型

系统目前已经支持的缓存类型包括:Apachenote、Apc、Db、Eaccelerator、File、Memcache、Redis、Shmop、Sqlite、Wincache和Xcache。

如果S方法不传入type参数初始化的话,则读取配置文件中设置的DATA_CACHE_TYPE参数值作为默认类型。同样的道理,prefix参数如果没有传入会读取配置文件的DATA_CACHE_PREFIX参数值,expire参数没有传入则读取DATA_CACHE_TIME配置值作为默认。

有些缓存方式会有一些自身特殊的参数,例如Memcache缓存,还需要配置其他的参数:

S(array(

'type'=>'memcache',

'host'=>'192.168.1.10',

'port'=>'11211',

'prefix'=>'think',

'expire'=>60)

);

对于全局的缓存方式,一般我们建议添加prefix(缓存前缀)参数用以区分不同的应用,以免混淆。

// 设置缓存

S('name',$value);

会按照缓存初始化时候的参数进行缓存数据,也可以在缓存设置的时候改变参数,例如:

// 缓存数据300秒

S('name',$value,300);

甚至改变之前的缓存方式或者更多的参数:

// 采用文件方式缓存数据300秒

S('name',$value,array('type'=>'file','expire'=>300));

如果你在缓存设置的时候采用上面的数组方式传入参数的话,会影响到后面的缓存存取。

缓存读取

// 读取缓存

$value = S('name');

缓存读取的是前面缓存设置的值,这个值会受缓存初始化或者缓存设置的时候传入的参数影响。 如果缓存标识不存在或者已经过期,则返回false,否则返回缓存值。

// 删除缓存

S('name',null);

删除缓存标识为name的缓存数据。

对象方式操作缓存

我们可以采用对象方式操作缓存,例如:

// 初始化缓存

$cache = S(array('type'=>'xcache','prefix'=>'think','expire'=>600));

$cache->name = 'value'; // 设置缓存

$value = $cache->name; // 获取缓存

unset($cache->name); // 删除缓存

如果你设置了缓存前缀的话,对应的缓存操作只是对应该缓存前缀标识的,不会影响其他的缓存。

关于文件缓存方式的安全机制

如果你使用的是文件方式的缓存机制,那么可以设置DATA_CACHE_KEY参数,避免缓存文件名被猜测到,例如:

'DATA_CACHE_KEY'=>'think'

数据缓存可以支持缓存队列,简单的说就是可以限制缓存的数量,只需要在初始化的时候指定length参数:

S(array('type'=>'xcache','length'=>100,'expire'=>60));

设置了length参数后,系统只会缓存最近的100条缓存数据。

Ⅹ 如何为sae memcache设置有效期

1、下载并安装memcache (1)window下安装memcache. 下载memcached.exe 到d:/memcached/memcached.exe.在运行cmd 输入 d:/memcached/memcached.exe -d install安装 。 (2)运行d:/memcached/memcached.exe -d start 启动memcache

阅读全文

与memcache有效期相关的资料

热点内容
申请商标的要多久 浏览:814
连云港专利代理 浏览:613
上海专利商标事务有限公司 浏览:452
乡镇卫生院基本公共卫生服务项目实施方案 浏览:850
红宝石证书aigs 浏览:734
马鞍山二中一本率 浏览:103
萝莉羊年限定 浏览:393
爱迪生观察什么发明了什么 浏览:864
供电方案有效期 浏览:684
马鞍山市麻将馆 浏览:609
sm2证书 浏览:655
汽车销售投诉比 浏览:951
成果用的手机 浏览:673
商标注册授权委托书 浏览:825
苏州市专利代理人薪资水平 浏览:527
工商局几号发工资 浏览:836
认缴年限多久合适 浏览:57
哇米诺商标注册详情 浏览:243
江发明被抢劫 浏览:770
上海信利商标代理有限公司怎么样 浏览:810