设为首页 收藏本站
查看: 1139|回复: 0

[经验分享] memcache/memcached/memcachedb 区别、配置及安装

[复制链接]

尚未签到

发表于 2015-11-18 08:56:49 | 显示全部楼层 |阅读模式
  当你听到memcache与memcached时把它当做是一个东东就好了,尽管它们存
在区别,但是这并不影响你对它们的运用及理解。
  “Memcache”它是一个自由和开放源代码、高性能、分配的内存对象缓存系统,即该系统名称为“Memcache”;
  “Memcached”它是该系统的主程序文件,以守护程序方式运行于一个或多个服务器中(分布式),随时接受客户端的连接操作,使用共享内存存取
数据;
  “Memcachedb”它是新浪2007年的项目,在Memcached的基础上开发出来了,它与Memcache不同的是它提供了数据持久化存

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

项目地址:http://code.google.com/p/beitmemcached/
注:此链结为windows下memcached文程序安装文件及示例。

DSC0000.jpg

  图中的两个文件分别为:上面的是客户端调用示例项目文件、下面的文件是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(&quot;Host: &quot; + host.Key);
foreach (KeyValuePair<string, string> item in host.Value) {
Console.Out.WriteLine(&quot;/t&quot; + item.Key + &quot;: &quot; + item.Value);
}
Console.Out.WriteLine();
}
Console.Out.WriteLine();
Console.Out.WriteLine(&quot;Finished. Press enter to exit.&quot;);
Console.In.ReadLine();
}
}
}

注:memcached是以KEY-VALUE的方式进行数据存储的,KEY的大小限制:Key(max)<=250个字符;VALUE在存
储时有限制:Value(max)<= 1M;memcached默认过期时间:ExpiresTime(max)= 30(days)。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-140517-1-1.html 上篇帖子: 在yii中使用memcache 下篇帖子: 5 linux下查看memcache是否正常
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表