- 浏览: 2538709 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (676)
- linux运维 (157)
- php (65)
- mysql (78)
- nginx (27)
- apche (18)
- framework (6)
- windows (9)
- IDE工具 (23)
- struts2 (7)
- java (13)
- 移动互联网 (14)
- memcache redis (23)
- shell基础/命令/语法 (37)
- shell (50)
- puppet (4)
- C (11)
- python (9)
- 产品经理 (27)
- Sphinx (4)
- svn (12)
- 设计构建 (12)
- 项目管理 (44)
- SEO (1)
- 网站架构 (26)
- 审时度势 (42)
- 网络 (14)
- 激发事业[书&视频] (81)
- 其它 (12)
- 摄影 (8)
- android (21)
最新评论
-
zhongmin2012:
原文的书在哪里
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
renzhengzhi:
你好,请问个问题,从master同步数据到slave的时候,s ...
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
ibc789:
你好,看了你的文章,我想请教个问题, 我在用 redis的时候 ...
redis 的两种持久化方式及原理 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器
interface ICache {
public function put($key,$var,$timeout=0);
public function get($key);
public function delete($key);
public function close();
public function open($params);
}
class FileCache{
private $filecache_path;
/**
* 構造函數
* @param String $file DbFlat文件名,不存在將創建
* @param Int $mode DbFlat文件的讀寫模式
* @param Int $perm DbFlat文件權限
*/
function __construct($filePath){
if(file_exists($filePath)){
$this->filecache_path = $filePath;
}else{
$this->make_dir($filePath);
$this->filecache_path = $filePath;
}
}
/**
* 存儲一個Key
* @param String $key Key
* @param String $val Value
* @return Boolean
*/
function store($key,$val){
$files = $this->filecache_path."/{$key}_filecache";
return file_put_contents($files, serialize($val));
}
/**
* 獲得指定Key的值
* @param String $key Key
* @return String
*/
public function fetch($key){
$files = $this->filecache_path."/{$key}_filecache";
if(file_exists($files)){
$str = file_get_contents($files);
if($str === false || $str === '') {
return null;
}
else{
return unserialize($str);
}
}
}
/**
* 刪除一個Key
* @param String $key Key
* @return Boolean
*/
public function delete($key){
$files = $this->filecache_path."/{$key}_filecache";
if(file_exists($files)){
unlink($files);
}
}
/**
* 刪除一個數組里的所以Key
* @param Array $key_array
* @return void
*/
public function delete_array($key_array){
foreach($key_array as $key){
$this->delete($key);
}
}
/**
* 遞迴生成文件夾
* @param str $path 文件夾path, 不是文件的path
* @return mixed 成功時返回創建成功的path,失敗時返回false
*/
public function make_dir($path)
{
if(! file_exists($path))
{
$this->make_dir(dirname($path));
mkdir($path, 0777);
}
return realpath($path);
}
}
require_once('ICache.iface.php');
class ApcCache implements ICache {
public function put($key,$var,$timeout=0) {
$succ = true;//apc_store($key,$var,$timeout);
return $succ;
}
public function get($key) {
//echo "<hr>get==$key==from apc ==<hr>";
//return apc_fetch($key);
return '';
}
public function delete($key) {
//return apc_delete($key);
return '';
}
public function close() { }
public function open($params) { }
}
require_once('ICache.iface.php');
class MemCached implements ICache {
//实例化memcache对象
public $mc = null;
/**
* 构造实例化
* $config_array:memcache服务器IP和端口
*@return obj
*/
public function __construct($config_array){
//服务器端调用方式
$this->mc = new Memcache;
//$mc->connect($memcache_url, 11212); #[单一服务器可用]
if (is_array($config_array)) {
foreach ($config_array as $key=>$value){
$this->mc->addServer($value['IP'], $value['port']);
}
}
$this->mc->setCompressThreshold(10240, 0.2);
/*
$this->mc->setCompressThreshold(10240, 0.2); 此函数在memcache2.0.0加入。
Memcache::setCompressThreshold()开启对于大值的自动压缩。 同样你也可以使用函数memcache_set_compress_threshold()。
参数一:控制多大值进行自动压缩的阈值。
参数二:指定经过压缩实际存储的值的压缩率,支持的值必须在0和1之间。默认值是0.2表示20%压缩率。
$memcache_obj = new Memcache;
$memcache_obj->addServer('memcache_host', 11211);
$memcache_obj->setCompressThreshold(20000, 0.2);
*/
}
/**
* 值加入到memcache
* $key:标识
* $var:值
* $timeout:失效时间 默认时间86400表示为一天时间。
*@return true or false
*/
public function put($key,$var,$timeout=86400,$is_compress=0) {
$succ = $this->mc->set($key,$var,$is_compress,$timeout);
if($succ === false){
//如果失败,休息一秒钟,则继续重写
sleep(1);
$succ = $this->mc->set($key,$var,$is_compress,$timeout);
if($succ === false ){
log_error('set memache key failed!! key:'.$key.' value:'.serialize($var).' timeout:'.$timeout, __FILE__, __LINE__);
}
}
return $succ;
}
/**
* 根据key值从memcache得到值
* $key:标识
*@return string or array
*/
public function get($key) {
$result = $this->mc->get($key);
if($result === false && (is_string($key) && strpos($key,'online') === false)){
//log_error('get memache key ('.$key.') failed!!', __FILE__, __LINE__);
}
return $result;
}
/**
* 根据key值从memcache删除值
* $key:标识
*@return true or false
*/
public function delete($key) {
$succ = $this->mc->delete($key);
if($succ === false){
//如果失败,休息一秒钟,则继续删除
sleep(1);
$succ = $this->mc->delete($key);
//if($succ === false){
// log_error('delete memache key('.$key.') failed!!',__FILE__,__LINE__);
//}
}
return $succ;
}
/**
* 关键memcache
*@return true or false
*/
public function close(){
return $this->mc->close();
}
public function open($params) { }
}
require_once('ICache.iface.php');
require_once('LocalCache.class.php');
class CacheStore{
private $_caches;
private $_storeName;
private $_defaultCache;
public function setName($name){
$this->_storeName = $name;
}
public function setCache(ICache $cache, $privilege=0){
$this->_caches[$privilege] = $cache;
}
public function getCache($privilege=0){
return $this->_caches[$privilege];
}
public function init(){
//if(!is_array($this->_caches)){
$this->setCache(new LocalCache());
//}
ksort($this->_caches);
}
public function put($key, $value, $privilege=-1){
if($privilege == 0){ //指定赋值给默认的
$this->_caches[0]->put($this->_storeName . '_' . $key, $value);
}else{
foreach($this->_caches as $cache){
$cache->put($this->_storeName . '_' . $key, $value);
}
}
}
public function get($key){
$i = 0;
foreach($this->_caches as $cache){
$val = null;
$val = $cache->get($this->_storeName . '_' . $key);
if($val!=null){
if($i > 0){
$this->put($key,$val,0);
}
return $val;
}
$i++;
}
return $val;
}
}
$arr_server_memcache = array(
array(
'IP' => '192.168.101.73',
'port' => '12000'
),
array(
'IP' => '192.168.101.74',
'port' => '12000'
),
array(
'IP' => '192.168.101.75',
'port' => '12000'
),
array(
'IP' => '192.168.101.76',
'port' => '12000'
),
array(
'IP' => '192.168.101.77',
'port' => '12000'
)
);
require('pworks/util/cache/CacheStore.class.php');
require_once('pworks/util/cache/ApcCache.class.php');
require_once('pworks/util/cache/MemCache.class.php');
$appCache = new CacheStore();
$appCache->setName(MARKSIX_SYSTEM.'_mvc_app_obj');
//$appCache->setCache(new ApcCache());
//加入memcached缓存
if (MEMCACHE) {
$appCache->setCache(new MemCached($arr_server_memcache), 'mc');
}
$appCache->init();
/**
* 得到memcache实例
*/
function memc(){
return FrontController::getCache('mc');
}
/**
* 得到memcache里存放当前用户标识的key
*/
function get_mem_key(){
return COM_TYPE == 'f' ? get_online_member_key($_SESSION['memberId']) : get_online_user_key($_SESSION['userId']);
}
/**
* 给memcache里存放当前用户标识的key赋值当前的session,EXPIRE_TIME默认为 10
*/
function set_mem_key(){
return memc()->put
(get_mem_key(), get_new_session_id(get_session_id()), EXPIRE_TIME);
}
发表评论
-
通过Keepalived实现Redis Failover自动故障切换功能[实践分享]
2015-03-12 17:10 7420参考资料:http://patrick-tang.blog ... -
Redis学习手册(主从复制)
2015-03-12 17:05 7349一、Redis的Replication: ... -
redis 的两种持久化方式及原理
2015-03-12 16:52 63330Redis是一种高级key-value数据库。它跟memc ... -
Redis指令手册中文版
2014-08-08 17:09 957连接控制QUIT :退出,关 ... -
Redis服务的监控
2013-01-17 16:00 6718redis 监控工具安装配置http://blog.sin ... -
【汇总】redis
2012-04-16 13:51 1450http://bbs.chinaunix.net/thread ... -
memcache 丢数据解决方案
2011-07-01 11:17 2700一小时以内数据变化都存放到memcached中,无论数据读取或 ... -
Memcached repcached同步
2011-06-10 14:10 2201#安装 wget http://downloads.sour ... -
memcached命中率问题
2011-06-09 21:14 2004http://www.iteye.com/topic/2256 ... -
php遍历memcache所有键值
2011-05-31 17:56 4375很有用的东东,PHP遍历MEMCACHE的所有键,在做管理me ... -
memcached全面剖析和深度剖析
2011-05-15 14:43 1686Memcached深度分析(原创) 2009年2月11日 ... -
【监控】netstat+telnet+m-top+phpmemcached
2011-03-31 22:01 30411G=1024*1024*1024=1073741824 by ... -
centos 下安装memcache配置
2010-09-21 15:01 7451为什么会有Memcache和memca ... -
关于session和memcache的若干问题
2010-09-20 15:17 5597=============================== ... -
Memcached深度分析----转新浪开发者博客
2009-07-11 22:36 1665http://blog.developers.api.sina ... -
多台memcache 研究
2009-07-11 13:07 4865第一种方法是通过设置特殊key前缀实现分布,基本可以实现mem ... -
Memcache分组和同步机制的实现--这不是memcache集群了么
2009-07-05 21:53 13075首先我们明确了解就是Memcache是一个简单、快速、高效的分 ... -
memcached全面剖析–5. memcached的应用和兼容程序
2009-07-05 21:31 1608memcached的连载终于要结束了。到上次为止,我们介绍了与 ... -
[推荐]memcached全面剖析–4. memcached的分布式算法:Consistent Hashing
2009-07-05 21:20 2521第2次 、 第3次 由前坂介绍了memcached的内部情况 ... -
【汇总】Memcache
2009-07-01 11:40 3718memcached全面剖析和深度剖析.rar ...
相关推荐
**Memcache监控工具mctop详解** 在IT行业中,内存缓存系统如Memcache是提升应用程序性能的关键组件。Memcache能够存储数据,减少对...通过对mctop的熟练运用,IT专业人员可以更好地管理和维护他们的Memcache服务。
《C# MemCache监控管理工具详解》 ...通过熟练掌握和运用此工具,开发者可以更好地优化应用性能,提升用户体验。对于那些使用C#和MemCache的开发团队来说,这是一个不可多得的资源,值得在日常工作中广泛采用。
PHP 5.3.8包含了许多改进和新特性,如命名空间、晚期静态绑定等,增强了代码的可读性和可维护性。在这个版本中,开发者可以利用其强大的功能和丰富的扩展库来构建复杂的Web应用。 **Redis 2.4** 是一个高性能的键值...
上述代码创建了一个Memcache对象,并连接到本地的默认端口11211。 2. **设置缓存**: ```php $value = 'Hello, Memcache!'; $memcache->set('key', $value, 0, 60); // key为键,value为值,0表示不启用压缩,...
php_memcache是PHP与Memcached服务之间的一个接口,允许PHP代码直接操作Memcached服务器上的数据。这个扩展提供了丰富的API,包括添加、获取、更新、删除缓存数据,以及进行多键操作等,极大地提升了PHP应用程序的...
在这个主题中,我们重点关注的是PHPStudy...正确安装并运用这两个扩展,可以使PHP应用在内存缓存和数据处理方面达到更高的效率。在使用过程中,确保系统满足必要的依赖条件,并遵循正确的配置步骤,是成功部署的关键。
标题“memcache使用方法”指出我们将探讨的是如何运用memcache这一内存对象缓存系统。Memcache是一种高性能的分布式内存缓存系统,常用于减轻数据库的负载,提升Web应用的性能。 描述中提到“讲述memcache在客户端...
安装Memcache相对简单,通常可以通过编译源代码或者使用包管理器(如apt-get或yum)进行安装。配置文件通常为`/etc/memcached.conf`,可以设置监听端口、最大内存使用量、超时时间等参数。 **三、Memcache的工作...
一旦安装完成,我们就可以在Python代码中导入`memcache`模块。首先,我们需要创建一个连接到Memcached服务器的客户端实例,通常使用服务器的IP地址和端口号: ```python import memcache mc = memcache.Client(['...
然后,下载PHP Memcache扩展的源代码,通过`phpize`命令进行配置,`make`进行编译,最后将编译生成的模块添加到PHP.ini的`extension_dir`路径下,并在配置文件中启用扩展。 3. **Memcache的连接与操作** 连接...
本项目提供了一个简单的 Memcached 示例,帮助开发者更好地理解和运用这一技术。 在深入讲解之前,我们需要了解几个关键概念: 1. **缓存**: 缓存是一种临时存储数据的技术,使得下次请求相同数据时可以更快地获取...
**Memcache 安装配置使用说明** 1. **简介** 1.1 文档目的 本文档旨在提供详尽的指南,帮助用户了解如何在他们的系统上安装、配置及使用Memcache,这是一...希望这份指南能帮助你在实际项目中有效地运用Memcache。
在IT行业中,优化应用程序性能是至关重要的,而缓存机制是提升系统响应速度的一个关键手段。ThinkPHP,作为一款流行的PHP开发框架,提供了多种缓存方式,...理解并熟练运用这些知识,将有助于构建高效、稳定的应用。
**标题与描述解析** 标题"memcached 在ASP.NET网站下的应用实例代码(c#)"揭示了本次讨论的主题,即如何在ASP.NET环境中...开发者可以通过阅读和运行代码,理解memcached在实际项目中的运用,从而提升Web应用的性能。
通过研究这些代码,学习者可以更直观地掌握这些技术的实践运用。 总的来说,这个软件复用课程覆盖了Java开发中的重要工具和概念,包括构建管理、运行时动态性、缓存优化等,这些都是提升软件开发效率和质量的基石。...
- **配置Memcached连接**:在Java代码中,需要初始化Memcached客户端,设置服务器地址、端口等信息。 - **使用缓存**:在业务逻辑中,根据需求使用Memcached API进行数据的存储和获取。 3. **Tengin的反向代理与...
FreeMarkerPro是一个基于FreeMarker模板语言的开源项目,主要用于网站开发中的动态内容生成。这个入门例子将引导我们深入了解如何利用...实际操作这些示例将帮助你更好地理解和运用这些技术,从而提升你的Web开发能力。
在当今的Web开发中,高效的数据处理和快速的页面响应已经成为提升用户体验的关键因素。...本文将深入探讨这一技术的核心概念、安装过程以及...结合实际项目需求,灵活运用这些知识,将有效提升网站的响应速度和用户体验。
【Redis教程从基础到高级,图形和代码结合,方便理解】 Redis是一款高性能的键值对数据库,...同时,结合图形和代码的解释,可以帮助学习者更直观地掌握Redis的使用技巧,从而在实际项目中更好地运用这个强大的工具。
**Spring 整合 Memcached 完整项目代码详解** 在现代Web开发中,缓存是提高应用程序性能的关键技术之一。...在"Spring整合memcached完整项目代码"中,你可以找到具体的实现细节,这将帮助你更好地理解和运用这些概念。