1. libevent-1.3e.tar.gz libevent-1.3e.tar.gz [GPG Sig] - ChangeLog - Release 2007-09-24
One of the dependencies of memcache is libevent, so firstly download the source files for Libevent http://www.monkey.org/~provos/libevent/.
tar -xvf libevent-1.3b.tar.gz
cd libevent-1.3b
./configure;make;make install;
2. memcached-1.2.2.tar.gz
Download the latest Memcached source code from danga.com http://www.danga.com/memcached/gunzip memcached-1.2.1.tar.gz
tar -xvf memcached-1.2.1.tar
cd memcached-1.2.1
./configure;make;make install;
Often libevent.so cannot be found when executing memcache. A useful command LD_DEBUG, is very helpful to determine where libraries are being loaded from.
LD_DEBUG=help memcached -v
LD_DEBUG=libs memcached -v 2>&1 > /dev/null | less
18990: find library=libevent-1.3b.so.1 [0]; searching
...
18990: trying file=/usr/lib/libevent-1.3b.so.1
18990:
memcached: error while loading shared libraries: libevent-1.3b.so.1: cannot open shared object file: No such file or directory
Simply place the library where memcached will find it and execute memcached.
ln -s /usr/local/lib/libevent-1.3b.so.1 /lib/libevent-1.3b.so.1
memcached -d -u nobody -m 512 127.0.0.1 -p 11211
The options for memcached are:
-l <ip_addr>
Listen on <ip_addr>; default to INDRR_ANY. This is an important option to consider as there is no other way to secure the installation. Binding to an internal or firewalled network interface is suggested.
-d
Run memcached as a daemon.
-u <username>
Assume the identity of <username> (only when run as root).
-m <num>
Use <num> MB memory max to use for object storage; the default is 64 megabytes.
-M
Instead of throwing items from the cache when max memory is reached, throw an error
-c <num>
Use <num> max simultaneous connections; the default is 1024.
-k
Lock down all paged memory. This is a somewhat dangerous option with large caches, so consult the README and memcached homepage for configuration suggestions.
-p <num>
Listen on port <num>, the default is port 11211.
-r
Maximize core file limit
-M
Disable automatic removal of items from the cache when out of memory. Additions will not be possible until adequate space is freed up.
-r
Raise the core file size limit to the maximum allowable.
-h
Show the version of memcached and a summary of options.
-v
Be verbose during the event loop; print out errors and warnings.
-vv
Be even more verbose; same as -v but also print client commands and responses.
-i
Print memcached and libevent licenses.
-P <filename>
Print pidfile to <filename>, only used under -d option.
3. memcache-2.2.0.tgz
To install the pecl package for PHP http://pecl.php.net/get/memcachewget http://pecl.php.net/get/memcache-2.1.2.tgz
gzip -df memcache-2.1.2.tgz
tar -xvf memcache-2.1.2.tar
cd memcache-2.1.2
phpize
./configure;make;make install;
Add memcache.so to the php.ini file
extension=memcache.so
Then run
php -i | grep -i 'memcache'
memcache should be listed and then restart the web server.
4. SHELL script
#!/bin/bash #script memcacheDaemon.sh LANG="zh_CN.utf8" DAEMON_TIME=10 stopProcess() { DATESTR=`date '+%Y-%m-%d %H:%M:%S'` echo "$DATESTR (INFO) : STOP memcache begin.." PID=`ps -ef --cols=200 |grep $1 | awk '{print $2 " " $8}'| grep $1 | sed -e '/grep/d' -e 's/^ *//' -e 's/ .*//'` if [ -n "$PID" ] then echo "$DATESTR (ERROR) : $1 ID $PID, FORCE KILL NORMAL RUNNING PROCESS!" kill -9 $PID else echo "$DATESTR (INFO) : $1 IS NORMAL DOWN!" fi echo "$DATESTR (INFO) : STOP apache end." } runDaemon() { DATESTR=`date '+%Y-%m-%d %H:%M:%S'` PID=`ps -ef --cols=200 |grep memcached | awk '{print $2 " " $8}'| grep memcached | sed -e '/grep/d' -e 's/^ *//' -e 's/ .*//'` if [ -n "$PID" ] then echo "$DATESTR (INFO) : memcached NORMAL running. " else echo "$DATESTR (INFO) : RELOAD memcached START. " if [ "`id -un`" = "root" ] ; then echo "killall memcached" killall memcached echo "su - kangq -c '/usr/local/bin/memcached -d -m 2048 127.0.0.1 -p 11211'" su - kangq -c '/usr/local/bin/memcached -d -m 2048 127.0.0.1 -p 11211' else echo "killall memcached" killall memcached echo "/usr/local/bin/memcached -d -m 2048 127.0.0.1 -p 11211" /usr/local/bin/memcached -d -m 2048 127.0.0.1 -p 11211 fi echo "$DATESTR (INFO) : RELOAD END." fi } if [ "`id -un`" = "root" ] ; then case "$1" in start) DATESTR=`date '+%Y-%m-%d %H:%M:%S'` echo "$DATESTR (INFO) : INTIAL memcached START. " if [ "`id -un`" = "root" ] ; then echo "killall memcached" killall memcached echo "su - kangq -c '/usr/local/bin/memcached -d -m 2048 127.0.0.1 -p 11211'" su - kangq -c '/usr/local/bin/memcached -d -m 2048 127.0.0.1 -p 11211' else echo "killall memcached" killall memcached echo "/usr/local/bin/memcached -d -m 2048 127.0.0.1 -p 11211" /usr/local/bin/memcached -d -m 2048 127.0.0.1 -p 11211 fi echo "$DATESTR (INFO) : INTIAL END." while [ " " != "" ] do runDaemon ##echo begin sleep ... sleep $DAEMON_TIME ##echo sleep over ... done ;; stop) stopProcess memcached stopProcess memcacheDaemon.sh killall memcacheDaemon.sh ;; *) echo "usage: $0 (start|stop|help)" ;; esac else echo "ERROR: using root run this shell!" fi |
#!/bin/bash #script memcacheStart.sh SHELL_DIR=$(cd "$(dirname "$0")"; pwd) $SHELL_DIR/memcacheDaemon.sh stop nohup $SHELL_DIR/memcacheDaemon.sh start >>$SHELL_DIR/memcacheDaemon.log & |
#!/bin/bash #script memcacheStop.sh SHELL_DIR=$(cd "$(dirname "$0")"; pwd) nohup $SHELL_DIR/memcacheDaemon.sh stop >>/data/share/bin/memcacheDaemon.log & |