php缓存操作
一般是缓存文件,当然也可以将缓存文件存入数据库,blob类型,不过缓存文件比较容易取出数据,include缓存文件就可以了
‘贰’ PHP实现负载均衡session共享redis缓存操作示例
本文实例讲述了PHP实现负载均衡session共享redis缓存操作。分享给大家供大家参考,具体如下:
1、首先先创建html表单页面
<meta
chatset='utf-8'>
<center>
<form
action="se.php"
method="post">
<table>
<tr>
<td>帐号:</td>
<td><input
type="text"
name="username"></td>
</tr>
<tr>
<td>密码:</td>
<td><input
type="password"
name="pwd"></td>
</tr>
<tr>
<td></td>
<td><input
type="submit"
value="登录"></td>
</tr>
</table>
</form>
</center>
2、创建接受表单的文件
<?php
header('content-type:text/html;charset=utf-8');
set_time_limit(10);
ini_set("session.save_handler",'redis');//开启php.ini中的redis配置
ini_set("session.save_path","tcp://192.168.1.70:6379");//第一台服务器的redis
session_start();//开启session
$username
=
$_POST['username'];
$_SESSION['username']
=
$username;
echo
"<script>alert('登录成功!');location.href='from.php'</script>";//登录成功后跳转到欢迎登录页面
?>
3、跳转到from.php去判断第一台服务器的redis中的session是否存到了本台服务器的session中
<?php
header('content-type:text/html;charset=utf-8');
set_time_limit(10);
ini_set("session.save_handler",'redis');//开启php.ini中的redis配置
ini_set("session.save_path","tcp://192.168.1.70:6379");//第一台服务器的redis
session_start();//开启session
$username
=
isset($_SESSION['username'])
?
$_SESSION['username']
:
'';//判断当前是否存在session
//$id
=
$_SESSION['PHPSESSID'];
//echo
$id;
if(empty($username)){
echo
"<script>alert('请重新登录!');location.href='index.php'</script>";
}else{
echo
"欢迎".$username."登录";
}
?>
这样就简单了实现了redis
session共享的功能,要测试的话需要两台服务器,建议使用linux
比较好用
linux上安装redis可参考《Linux平台安装redis及redis扩展的方法》
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php缓存技术总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP错误与异常处理方法总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
您可能感兴趣的文章:Nginx
安装笔记(含PHP支持、虚拟主机、反向代理负载均衡)PHP开发负载均衡指南PHP实现负载均衡下的session共用功能Thinkphp结合AJAX长轮询实现PC与APP推送详解PHP经典算法集锦【经典收藏】php
分库分表hash算法php的hash算法介绍PHP中对各种加密算法、Hash算法的速度测试对比代码PHP实现的一致性Hash算法详解【分布式算法】PHP实现负载均衡的加权轮询方法分析
‘叁’ php不使用第三方工具,如何设计缓存
结论:可自行设计,或使用内置APCu缓存。
1 - 第三方缓存
常用的第三方缓存工具,一般是指redis,memcached,以及云服务商提供的缓存服务。基本不脱离此二类范围。
用法非常直观,我们不做深入的介绍了。可在官方手册内查看。
4 - 写在最后
本文简要说明了PHP内缓存数据可能使用的方法。我们推荐使用成熟的类库或扩展,不要重复造轮子。
‘肆’ 在PHP中怎么对数据进行缓存读取功能
1、普遍缓存技术:
数据缓存:这里所说的数据缓存是指数据库查询PHP缓存机制,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据,并把查询结果序列化后保存到文件中,以后同样的查询结果就直接从缓存表或文件中获得。
用的最广的例子看Discuz的搜索功能,把结果ID缓存到一个表中,下次搜索相同关键字时先搜索缓存表。
举个常用的方法,多表关联的时候,把附表中的内容生成数组保存到主表的一个字段中,需要的时候数组分解一下,这样的好处是只读一个表,坏处就是两个数据同步会多不少步骤,数据库永远是瓶颈,用硬盘换速度,是这个的关键点。
2、 页面缓存:
每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了。(模板引擎和网上常见的一些PHP缓存机制类通常有此功能)
3、 时间触发缓存:
检查文件是否存在并且时间戳小于设置的过期时间,如果文件修改的时间戳比当前时间戳减去过期时间戳大,那么就用缓存,否则更新缓存。
4、 内容触发缓存:
当插入数据或更新数据时,强制更新PHP缓存机制。
5、 静态缓存:
这里所说的静态缓存是指静态化,直接生成HTML或XML等文本文件,有更新的时候重生成一次,适合于不太变化的页面,这就不说了。
以上内容是代码级的解决方案,我直接CP别的框架,也懒得改,内容都差不多,很容易就做到,而且会几种方式一起用,但下面的内容是服务器端的缓存方案,非代码级的,要有多方的合作才能做到
6、 内存缓存:
Memcached是高性能的,分布式的内存对象PHP缓存机制系统,用于在动态应用中减少数据库负载,提升访问速度。
7、 php的缓冲器:
有eaccelerator, apc, phpa,xcache,这个这个就不说了吧,搜索一堆一堆的,自己看啦,知道有这玩意就OK
8、 MYSQL缓存:
这也算非代码级的,经典的数据库就是用的这种方式,看下面的运行时间,0.09xxx之类的
9、 基于反向代理的Web缓存:
如Nginx,SQUID,mod_proxy(apache2以上又分为mod_proxy和mod_cache)
‘伍’ php thinkphp3.2设置缓存与使用缓存的问题
我先声明本人没有使用过ThinkPHP3.2。对thinkphp逻辑不是很懂
缓存的作用是减轻数据库压力和加快数据读取速度。
首先,第一次进页面缓存中肯定没有数据,进入页面后先判断缓存中是否有数据,若有:则从缓存中获取数据,若无:从数据库获取数据,并写入缓存。第二次进来判断的时候,缓存中就有数据了,直接从缓存中返回数据,不进行数据库操作。
代码:
functionindex(){
if(cache('user_list')){//缓存中有数据
$data=cache('user_list');
}else{//缓存中没有数据
$data=db('user')->select();//数据库查询
cache('user_list',$data,3600);//存入缓存
}
$this->assign('data',$data);
return$this->display();
}
‘陆’ php 中如何使用缓存,使用哪种缓存机制最好;
php的缓存三种.有文件缓存,数据库缓存,memcache缓存;
memcache缓存要求对服务器支持,而且它的缓存是由期限的,一般是30天。这种缓存的效率是最高的。读存取的速度最快。
数据库缓存
和
文件缓存比较简单。适用小的项目。和php新手
‘柒’ php 缓存怎么写
PHP数据缓存常用页面缓存 静态缓存
php页面缓存主要用到的是ob系列函数,如ob_start(),ob_end_flush(),ob_get_contents()
静态缓存是指静态化,直接生成HTML或XML等文本文件,有更新的时候重生成一次,适合于不太变化的页面
给你个页面缓存的例子
function page_cache($ttl = 0)
{
$ttl = $ttl ? $ttl : PAGE_TTL;//缓存时间,默认3600s
$contents = ob_get_contents();//从缓存中获取内容
$contents = "<!--page_ttl:".(time() + $ttl)."-->n".$contents;
//加上自定义头部:过期时间=生成时间+缓存时间
file_put_contents(PAGE_FILE, $contents);//写入缓存文件中
ob_end_flush();//释放缓存
}
‘捌’ php 缓存如何设计
ob_get_contents, ob_end_clean从实现上应该是ob_get_clean的分解步骤。后者因为从c代码层面的整合,在仅单次执行时,速度上应该有微量的优势。因为优势远比网络IO的延迟要小,几乎可以忽略吧。
echo ob_get_contents应该也一般是用于首次生成模板缓存。是内存操作。
include用于直接显示。是文件操作。
显示模板可以用后者,做缓存所节约的时间主要是处理计算和各媒介之间的IO上的,根据自己的应用和自己的设备环境在慢的、瓶颈部分作出调整,是灵活的。没有定式。
‘玖’ php怎样使用redis缓存数据
<?php
/**
* Redis缓存操作
* @author hxm
* @version 1.0
* @since 2015.05.04
*/
class RCache extends Object implements CacheFace
{
private $redis = null; //redis对象
private $sId = 1; //servier服务ID
private $con = null;//链接资源
/**
* 初始化Redis
*
* @return Object
*/
public function __construct()
{
if ( !class_exists('Redis') )
{
throw new QException('PHP extension does not exist: Redis');
}
$this->redis = new Redis();
}
/**
* 链接memcahce服务
*
* @access private
* @param string $key 关键字
* @param string $value 缓存内容
* @return array
*/
private function connect( $sid )
{
$file = $this->CacheFile();
require $file;
if(! isset($cache) )
{
throw new QException('缓存配置文件不存在'.$file);
}
$server = $cache[$this->cacheId];
$sid = isset($sid) == 0 ? $this->sId : $sid;//memcache服务选择
if ( ! $server[$sid])
{
throw new QException('当前操作的缓存服务器配置文件不存在');
}希望能帮到你,我还在后盾网学习呢,有不会的可以问我,一会有空回答你。(^ω^)