memcache/memcached/memcachedb 配置、安装

当你听到memcache与memcached时把它当做是一个东东就好了,尽管它们存在区别,但是这并不影响你对它们的运用及理解。

“Memcache”它是一个自由和开放源代码、高性能、分配的内存对象缓存系统,即该系统名称为“Memcache”;

“Memcached”它是该系统的主程序文件,以守护程序方式运行于一个或多个服务器中(分布式),随时接受客户端的连接操作,使用共享内存存取数据;

“Memcachedb”它是新浪2007年的项目,在Memcached的基础上开发出来了,它与Memcache不同的是它提供了数据持久化存储

 

首先,我们需要下载一个memcached安装程序,memcached版本很多,开源的东西我们一定要找一个持续更新的版本,很简单,有团队在维护升级。

我选择的版本是:beitmemcached,项目地址:http://code.google.com/p/beitmemcached/  注:此链结为windows下memcached文程序安装文件及示例。

图中的两个文件分别为:上面的是客户端调用示例项目文件、下面的文件是Memcached主程序安装文件

 

然后,将memcached主程序文件安装到服务器上。

Windows下安装:

1.将上图中Memcached 1.2.5.zip解压缩到 D:\program files\memcached目录下(此目录自行定义)。

2.Ctrl+R,输入cmd,打开命令行窗口,转到D:\program files\memcached目录下。

3.memcached.exe -d install

4.memcached.exe -d start

如果你要卸载,执行下面的命令:

1.memcached.exe -d stop

2.memcached.exe -d uninstall

Linux(CentOS 5.x)下安装:

1. yum install gcc

2. cd /tmp

3. wget http://www.monkey.org/~provos/libevent-2.0.4-alpha.tar.gz   注:memcached 用到了 libevent 这个库用于 Socket 的处理,所以 还需要安装 libevent

4. tar zxvf libevent-2.0.4-alpha.tar.gz

5. cd libevent-2.0.4-alpha

6. ./configure -prefix=/usr/local/libevent

7. make

8. make install

9. cd ~

10. cd /tmp

11. http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz

12. tar zxvf memcached-1.4.5.tar.gz

13. cd memcached-1.4.5

14. ./configure -prefix=/usr/local/memcached --with-libevent=/usr/local/libevent    注:安装memcached时需要指定libevent的安装位置

15. make

16. make install

17. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/libevent/lib   注:将libevent的lib目录加入LD_LIBRARY_PATH里

18. vi /etc/sysconfig/iptables 

19. 将下面这行加入进去

-A RH-Firewall-l-INPUT -p tcp -m tcp --dport 11211 -j ACCEPT  注:将memcached加入到防火墙允许访问规则中

20. service iptables restart  注:防火墙重启

21. /usr/local/memcached/bin/memcached -d   注:启动memcached

 

memcached启动参数描述:

-d :启动一个守护进程,

-m:分配给Memcache使用的内存数量,单位是MB,默认是64MB,

-u :运行Memcache的用户

-l  :监听的服务器IP地址

-p :设置Memcache监听的端口,默认是11211    注:-p(p为小写)

-c :设置最大并发连接数,默认是1024

-P :设置保存Memcache的pid文件   注:-P(P为大写)

如果要结束Memcache进程,执行:kill cat pid文件路径

 

无论是在windows下还是在linux下安装都非常简单,使用起来也很简单。

如何往memcached中插入数据?如何来读取数据?示例代码如下:

 

 

using System;
using
System.Collections.Generic;

namespace
BeIT.MemCached {
class
Example {
public static void Main(string
[] args) {
//
---------------------
//
Setting up a client.
//---------------------

Console.Out.WriteLine("Setting up Memcached Client." );
MemcachedClient.Setup(
"MyCache", new string[] { "localhost"
});

//
It is possible to have several clients with different configurations:
//If it is impossible to resolve the hosts, this method will throw an exception.

try {
MemcachedClient.Setup(
"MyOtherCache", new string[]{ "server1.example.com:12345", "server2.example.com:12345"
});
}
catch
(Exception e) {
Console.WriteLine(e.Message);
}

//
Get the instance we just set up so we can use it. You can either store this reference yourself in
//some field, or fetch it every time you need it, it doesn't really matter.

MemcachedClient cache = MemcachedClient.GetInstance("MyCache" );

//
It is also possible to set up clients in the standard config file. Check the section "beitmemcached"
//in the App.config file in this project and you will see that a client called "MyConfigFileCache" is defined.

MemcachedClient configFileCache = MemcachedClient.GetInstance("MyConfigFileCache" );

//Change client settings to values other than the default like this:

cache.SendReceiveTimeout = 5000 ;
cache.ConnectTimeout
= 5000
;
cache.MinPoolSize
= 1
;
cache.MaxPoolSize
= 5
;

//
----------------
//
Using a client.
//
----------------

//Set some items

Console.Out.WriteLine("Storing some items." );
cache.Set(
"mystring", "The quick brown fox jumped over the lazy dog."
);
cache.Set(
"myarray", new string[]{"This is the first string.", "This is the second string."
});
cache.Set(
"myinteger", 4711
);
cache.Set(
"mydate", new DateTime(2008, 02, 23
));
//Use custom hash

cache.Set("secondstring", "Flygande b鋍kasiner s鰇a hwila p?mjuka tufvor", 4711 );

//Get a string

string str = cache.Get("mystring") as string ;
if (str != null
) {
Console.Out.WriteLine(
"Fetched item with key: mystring, value: " +
str);
}

//Get an object

string[] array = cache.Get("myarray") as string [];
if (array != null
) {
Console.Out.WriteLine(
"Fetched items with key: myarray, value 1: " + array[0] + ", value 2: " + array[1
]);
}

//Get several values at once

object[] result = cache.Get(new string[]{"myinteger", "mydate" });
if (result[0] != null && result[0] is int
) {
Console.Out.WriteLine(
"Fetched item with key: myinteger, value: " + (int)result[0
]);
}
if (result[1] != null && result[1] is
DateTime) {
Console.Out.WriteLine(
"Fetched item with key: mydate, value: " + (DateTime)result[1
]);
}

str
= cache.Get("secondstring", 4711) as string
;
if (str != null
) {
Console.Out.WriteLine(
"Fetched item with key and custom hash: secondstring, value: " +
str);
}

//Set a counter

Console.Out.WriteLine("Setting an item for incrementing and decrementing." );
cache.SetCounter(
"mycounter", 9000
);
ulong? counter = cache.GetCounter("mycounter"
);
if
(counter.HasValue) {
Console.Out.WriteLine(
"Fetched mycounter, value: " +
counter.Value);
}

//Increment the counter

counter = cache.Increment("mycounter", 1 );
if
(counter.HasValue) {
Console.Out.WriteLine(
"Incremented mycounter with 1, new value: " +
counter.Value);
}

//Decrement the counter

counter = cache.Decrement("mycounter", 9000 );
if
(counter.HasValue) {
Console.Out.WriteLine(
"Decremented mycounter with 9000, new value: " +
counter.Value);
}

//Append and prepend

Console.Out.WriteLine("Storing bar for append/prepend" );
cache.Set(
"foo", "bar"
);
Console.Out.WriteLine(
"Appending baz"
);
cache.Append(
"foo", " baz"
);
Console.Out.WriteLine(
"Prepending foo"
);
cache.Prepend(
"foo", "foo "
);
Console.Out.WriteLine(
"New value: " + cache.Get("foo"
));

//Cas

cache.Delete("castest" );
Console.Out.WriteLine(
"Trying to CAS non-existant key castest: " + cache.CheckAndSet("castest", "a", 0
));
Console.Out.WriteLine(
"Setting value for key: castest, value: a"
);
cache.Set(
"castest", "a"
);
Console.Out.WriteLine(
"Trying to CAS key castest with the wrong unique: " + cache.CheckAndSet("castest", "a", 0
));
ulong
unique;
cache.Gets(
"castest", out
unique);
Console.Out.WriteLine(
"Getting cas unique for key castest: " +
unique);
Console.Out.WriteLine(
"Trying to CAS again with the above unique: " + cache.CheckAndSet("castest", "b"
, unique));
string value = cache.Gets("castest", out unique) as string
;
Console.Out.WriteLine(
"New value: " + value + ", new unique: " +
unique);

Console.Out.WriteLine(
"Displaying the socketpool status:"
);
foreach (KeyValuePair<string, Dictionary<string, string>> host in
cache.Status()) {
Console.Out.WriteLine(
"Host: " +
host.Key);
foreach (KeyValuePair<string, string> item in
host.Value) {
Console.Out.WriteLine(
"\t" + item.Key + ": " +
item.Value);
}
Console.Out.WriteLine();
}

Console.Out.WriteLine();
Console.Out.WriteLine(
"Finished. Press enter to exit."
);
Console.In.ReadLine();
}
}
}
   
   
   
   

你可能感兴趣的:(memcache/memcached/memcachedb 配置、安装)