zoukankan      html  css  js  c++  java
  • 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();
    }
    }
    }

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

  • 相关阅读:
    重温Delphi之:面向对象
    Delphi2007卸载后无法再安装
    ERP开源框架 + 二次开发平台 介绍
    CodeGear RAD 2007 SP4 最新下载及破解
    Delphi XE中类成员的访问权限(新增了strict private和strict protected,还有automated)
    Delphi学习技巧
    Codeforce 101B. Buses(线段树or树状数组+离散化)
    Codeforce 101B. Buses(线段树or树状数组+离散化)
    codeforce -39E-What Has Dirichlet Got to Do with That?(博弈+dfs)
    codeforce -39E-What Has Dirichlet Got to Do with That?(博弈+dfs)
  • 原文地址:https://www.cnblogs.com/zengen/p/1874031.html
Copyright © 2011-2022 走看看