Memcache VS Memcached VS MemcacheDB

1、 简单讲Memcache和Memcached都讲的是同一个开源项目http://memcached.org/,只不过Memcached一般指的是后台的cache server(其实也是一个客户端的,参考php手册).而Memcache指的访问cache server的客户端。Memcached提供了两种访问协议,ASCII和Binary。

2、 MemcacheDB=Memcached+BerkeleyDB组成的轻量的持久数据库,与前两者是不同的两个东西。
3、作为数据库就要讲究consistency,但是Memcached是一种分布式的缓存机制,因此并不严格要求consistency,而且实际上每个memcached server之间本身不通讯也不共享,所谓的分布式是由memcached的客户端程序来决定的。一般分布式算法采用基于server节点数的取余法,这种方法以node数为基础,因此增减服务器就会造成很大hash失效问题。所以改进的算法一般采用consistent hash算法,这种算法取消了以服务器节点数作为基数的理念,而是直接对服务器的节点进行hash,然后散布在0~2^32的圆周上,同样对于数据的key也采用同样的hash进行散布,对于key hash的结果取其所在圆周顺时针方向最近的一个服务器节点进行set,这样当增减服务器时,只会影响散布在该增减的服务器到逆时针方向的上一个服务器节点之间的数据。一下子减少了损失。 Continue reading

Memcache的安全性

Memcache服务器端都是直接通过客户端连接后直接操作,没有任何的验证过程,这样如果服务器是直接暴露在互联网上的话是比较危险,轻则数据泄 露被其他无关人员查看,重则服务器被入侵,因为Mecache是以root权限运行的,况且里面可能存在一些我们未知的bug或者是缓冲区溢出的情况,这 些都是我们未知的,所以危险性是可以预见的。为了安全起见,我做两点建议,能够稍微的防止黑客的入侵或者数据的泄露。

内网访问
最好把两台服务器之间的访问是内网形态的,一般是Web服务器跟Memcache服务器之间。普遍的服务器都是有两块网卡,一块指向互联网,一块指向内 网,那么就让Web服务器通过内网的网卡来访问Memcache服务器,我们Memcache的服务器上启动的时候就监听内网的IP地址和端口,内网间的 访问能够有效阻止其他非法的访问。

# memcached -d -m 1024 -u root -l 192.168.0.200 -p 11211 -c 1024 -P /tmp/memcached.pid

Memcache服务器端设置监听通过内网的192.168.0.200的ip的11211端口,占用1024MB内存,并且允许最大1024个并发连接 Continue reading

Memcache mutex设计模式

周六的S2 Web 2.0技术沙龙上介绍了memcache中使用mutex场景(文后要演讲稿),有网友对详情感兴趣,简单介绍如下。

场景

Mutex主要用于有大量并发访问并存在cache过期的场合,如

  • 首页top 10, 由数据库加载到memcache缓存n分钟
  • 微博中名人的content cache, 一旦不存在会大量请求不能命中并加载数据库
  • 需要执行多个IO操作生成的数据存在cache中, 比如查询db多次

问题

在大并发的场合,当cache失效时,大量并发同时取不到cache,会同一瞬间去访问db并回设cache,可能会给系统带来潜在的超负荷风险。我们曾经在线上系统出现过类似故障Continue reading

MySQL Memcache_engine的安装与使用[原创]

[文章作者:张宴 本文版本:v1.1 最后修改:2008.09.09 转载请注明原文链接:http://blog.s135.com/post/357/]

鉴于国内外还没有人撰写如何安装Memcache_engine的文章,于是,我根据自己的编译安装步骤,写下此文。

Memcache_engine是一个MySQL 5.1数据库的存储引擎,它能够让用户通过标准的SQL语句(SELECT/UPDATE/INSERTE/DELETE)访问Memcached(还支 持新浪的Memcachedbdbcached)中 存放的数据。 Continue reading

[精典教程]freebsd下安装mysql,apache,php,phpmyadmin记录

第一次在FREEBSD下配置环境,感觉好爽,安装的时候也参考了别人的介绍,在此表示感谢。
为了方便以后的操作,现在记录写下来。

安装MYSQL时要注意:
mysql默认数据库放在/var分区里,如果你的数据库很大,那么你需要在前面分区的时候把/var分区分到足够大,
如果你想改变它的安装目录,例如安装到:/usr/db.

#cd /usr/ports/databases/mysql51-server
#make WITH_CHARSET=utf8 WITH_XCHARSET=all WITH_PROC_SCOPE_PTH=yes SKIP_DNS_CHECK=yes BUILD_OPTIMIZED=yes install clean

#cp /usr/local/share/mysql/my-large.cnf    /etc/my.cnf
#/usr/local/bin/mysql_install_db
#chown -R mysql:mysql /var/db/mysql
#/usr/local/bin/mysqld_safe & //启动mysql 服务
#rehash
#mysqladmin -u root password ‘root密码’
#mysql -u root -p
输入root密码,进入mysql>提示符

开始下载并开始安装数据库(上面的with_chraset=all不包含一些字符集的,如GBK,需要安装GBK教程参考:http://blog.haohtml.com/archives/7811)。编译安装完之后,重启机器可以启动mysqld守护进程,可以

#mysql
如果能够见到
mysql>
提示符,说明安装好了。不过,刚装完的mysql默认的数据库连接是100个,远远不能应付大网站的要求。按照这个办法加大吧.

如果用port安装的是mysql55版本的话,在执行mysql_install_db的时候会提示”FATAL ERROR: Could not find ./bin/my_print_defaults“错误,解决办法:http://blog.haohtml.com/archives/9674
最后:在/etc/rc.conf 添加一行命令:
mysql_enable = “YES”
或者直接在命令行中输入命令:
echo ‘mysql_enable=”YES”‘ >> /etc/rc.conf
使mysql成为一项服务,随机启动,省去手动启动mysql服务了.

重启和停止MySQL的命令:

 /usr/local/etc/rc.d/mysql-server start|stop|restart

如果以后要修改mysql的数据保存路径,请参考:http://blog.haohtml.com/archives/7989

安装APACHE

#cd /usr/ports/www/apache22
#make install clean

以上使用ports方式安装的apache默认目录并非大家习惯使用的/usr/local/apache,而是/usr/local/etc/apache22目录,可以使用以下命令指定apache的安装目录:
#make PREFIX=/usr/local/apache install,

Unix下apache默认的mpm模块用的是prefork,如果更换为worker的话,请编译的时候添加参数:–with-mpm=worker,prefork与worker的区别见:http://blog.haohtml.com/archives/4656

详细使用方法点击这里查看(另类用法:make deinstall,make clean,make rmconfig,make reinstall FORCE_PKG_REGISTER=”yes”)

启动APACHE

/usr/local/sbin/httpd -k start

查看是否安装成功
配置httpd.conf
/usr/local/etc/apache22/httpd.conf
设置根目录
/home/web/blog.haohtml.com
在AddType application/x-gzip .gz .tgz后面加上下面3行:
#php support

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

随后设置网站默认启动页允许为index.php。同样在httpd.conf里编辑,不必退出。找到
DirectoryIndex index.html index.html.var
添加index.php进去,为:
DirectoryIndex index.php index.html index.html.var
还有其它设置,根据需要自行处理
最后:在/etc/rc.conf 添加:

apache22_enable = “YES”

或者直接在命令行中输入:

echo ‘apache22_enable=”YES”‘ >> /etc/rc.conf

这样服务器启动时,apache就会启动,注意是apache22_enable,这里是两个数字2.

要注意的:
(在FreeBSD下使用ports安装apache22会出现类似的warming:
No such file or directory: Failed to enable the ‘httpready’ Accept Filter
解决方法是:

#kldload accf_http (有关kldload命令简介点击这里查看)

并将以下语句写入到/boot/defaults/loader.conf中,以便下次启动自动装载模块

accf_data_load=”YES”
accf_http_load=”YES”

这是因为不能启动FreeBSD自带的一个基于http端口过滤的模块。这个模块的作用很不错–检查HTTP请求是否完整,符合规则accpt一个Http进程,否则就扔掉。)

安装PHP5

#cd /usr/ports/lang/php5
#make install clean

+——————————————————————–+
|                      Options for php5 5.3.2                        |
| +—————————————————————-+ |
| |        [X] CLI        Build CLI version                        | |
| |        [X] CGI        Build CGI version                        | |
| |        [X] APACHE     Build Apache module                      | |
| |        [ ] DEBUG      Enable debug                             | |
| |        [X] SUHOSIN    Enable Suhosin protection system         | |
| |        [ ] MULTIBYTE Enable zend multibyte support            | |
| |        [ ] IPV6       Enable ipv6 support                      | |
| |        [ ] MAILHEAD   Enable mail header patch                 | |

#cp /usr/local/etc/php.ini-dist /usr/local/etc/php.ini
如果提示php.ini-dist,请使用php.ini-production.

修改 /usr/local/etc/php.ini文件,修改date.timezone = PRC,解决php中相差八小时的问题.

安装完毕后,安装扩展

cd /usr/ports/lang/php5-extensions/
make install clean

根据需要选择插件包,安装过程中要在弹出的对话框中选中mysql选项,否则不支持mysql数据库的.建议把mysqli扩展项也选择上,现在用这个扩展的越来越多.如果没有安装请参考:http://blog.haohtml.com/archives/10013.当然包越多所需要的时间越长,大概需要30分钟.测试安装是否成功 .

注意这里先安装了apache,再安装了php,这样安装完php后,将自动在php.ini文件里添加php模块(LoadModule php5_module        libexec/apache22/libphp5.so)

安装Zend Optimizer

cd /usr/ports/devel/ZendOptimizer/
make install clean
===> ZendOptimizer-3.3.0.a cannot install: doesn’t work with PHP version : 5 (Doesn’t support PHP 5).
*** Error code 1

Stop in /usr/ports/devel/ZendOptimizer.

注:如果你用的是FreeBsd8.0版本的可能会出现上面的情况,这里可以使用使用pkg_add命令来安装Zend Optimizer.

#pkg_add -r ZendOptimizer
#rehash
执行结果将类似如下:
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.0-release/Latest/ZendOptimizer.tbz… Done.
pkg_add: warning: package ‘ZendOptimizer-3.3.0.a’ requires ‘libxml2-2.7.5’, but ‘libxml2-2.7.7’ is installed
pkg_add: warning: package ‘ZendOptimizer-3.3.0.a’ requires ‘php5-5.2.11’, but ‘php5-5.3.2’ is installed

********************************************************************************

You have installed the ZendOptimizer package.

Edit /usr/local/etc/php.ini and add:

[Zend]
zend_optimizer.optimization_level=15
zend_extension_manager.optimizer=”/usr/local/lib/php/20060613/Optimizer”
zend_extension_manager.optimizer_ts=”/usr/local/lib/php/20060613/Optimizer_TS”
zend_extension=”/usr/local/lib/php/20060613/ZendExtensionManager.so”
zend_extension_ts=”/usr/local/lib/php/20060613/ZendExtensionManager_TS.so”

NOTE: PHP should be compiled in non-debug mode (default).

********************************************************************************
虽然居然成功了,但也可能用phpinfo时候还是不行的![可惜最后还是不行,得到的教训是,不要用太新的版本,这样资料和环境的支持会很不完善。]

安装phpMyAdmin
# cd /usr/ports/databases/phpmyadmin/
# make fetch
接下来是一些提示,下载。
#cd /usr/ports/distfiles/
#tar xvf phpMyadmin-2-11.9-languages.bz2 -C /home/web/phpmyadmin
设置一下就可以了

设置FTP
[教程]FreeBSD vsftpd+pam虚拟用户方案配置http://blog.haohtml.com/archives/7213

安装memcache(服务端)
1.首先安装memcache,因为是在FreeBSD环境下,所以我们采用最简单的ports方式来安装memcache

cd /usr/ports/databases/memcached/
make install clean

ports会自动寻找源进行下载,然后编译安装
安装好memcache以后,编辑/etc/rc.conf文件,
在最后一行加一句

memcached_enable=”YES”

然后保存退出。
memcache会随着开机自动启动,手动启动的命令是:

/usr/local/etc/rc.d/memcached start

好了,现在memcache已经安装并启动完毕了。
2.安装pecl::memcache扩展(客户端),这是php的扩展,安装以后可以使用Memcache函数库,php手册上有详细的使用法说明。

cd /usr/ports/databases/pecl-memcache/
make install clean

安装好以后,会自动在/usr/local/etc/php/extension.ini 加上一行 extension=memcache.so
用命令查看一下:

cat /usr/local/etc/php/extensions.ini

如果看见最后一行有 extension=memcache.so

说明已经安装好了
这个时候重新启动一下apache server即可
phpinfo()可以看到memcache扩展的信息。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/13004/showart_1190048.html

Windows下的Memcache安装

Windows下的Memcache安装

不用说了,这便是memcached在Windows系统下的版本。(点击这里下载memcached for win32)

Windows下的Memcache安装
1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached
2. 在终端(也即cmd命令界面)下输入 ‘c:\memcached\memcached.exe -d install’ 安装
3. 再输入: ‘c:\memcached\memcached.exe -d start’ 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。
4.下载php_memcache.dll,请自己查找对应的php版本的文件
5. 在C:\windows\php.ini 加入一行 ‘extension=php_memcache.dll
6.重新启动Apache,然后查看一下phpinfo,如果有memcache,那么就说明安装成功!
7.如果要卸载的话,可以执行c:\memcached\memcached.exe -d install 即可.

 

memcached的基本设置
[blockquote]-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助

Memcache环境测试
运行下面的php文件,如果有输出This is a test!,就表示环境搭建成功开始领略Memcache的魅力把!

< ?php
$mem = new Memcache;
$mem->connect(127.0.0.1, 11211);
$mem->set(key, This is a test!, 0, 60);
$val = $mem->get(key);
echo $val;
?>

 

memcached与memcache的区别

memcached 像是一个后台服务器(也有客户端的memcached),memcache是php的一个模块,需要编译,像是一个客户端,memcached 和 memcache 是紧密结合的两个东西。

另外memcached也是一个客户端的.这点可以参考php手册得知.两者的区别也可以参考:http://www.cnblogs.com/scotoma/archive/2011/02/15/1955573.html

有关linux下memcache和memcached的安装方法请参考:http://blog.haohtml.com/archives/9841

================================

说法一:

两个不同版本的php的memcached的客户端

new memcache是pecl扩展库版本
new memcached是libmemcached版本
功能差不多.

说法二:
Memcache是什么?

Memcache是一个自由和开放源代码、高性能、分配的内存对象缓存系统。用于加速动态web应用程序,减轻数据库负载。
它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。
Memcached是简单而强大的。它简单的设计促进迅速部署,易于发展所面临的问题,解决了很多大型数据缓存。它的API可供最流行的语言。
Memcache的知名用户有:LiveJournal、Wikipedia、Flickr、Bebo、Twitter、Typepad、Yellowbot、Youtube 等。
Memcache官方网站:http://memcached.org/

Memcached又是什么?
Memcache是该系统的项目名称,Memcached是该系统的主程序文件,以守护程序方式运行于一个或多个服务器中,随时接受客户端的连接操作,使用共享内存存取数据。

那PHP中的Memcache是什么?
php中的所讲的memcache是用于连接Memecached的客户端组件。

简单的说一句话:Memcached 是一个服务(运行在服务器上的程序,监听某个端口),Memcache 是 一套访问Memcached的api。

两者缺一不可,不然无法正常运行。Memcache能在多台服务器上发挥很好的作用,同台服务器上用APC或Xcache效率是很可观的。

同台服务器上APC的效率是Memcached的7倍,APC效率比Memcached高是肯定的