Memcached安装与使用实例

Memcached简介

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。

安装与启动

1.安装Libevent

Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库。安装命令:
yum install libevent libevent-deve
也可使用的源码安装方式。

2.安装memcached

1). wget http://memcached.org/latest - 获取最新版
下载的文件名是 latest, rename 一下(mv命令)

2) mv latest memcached-1.5.tar.gz

3) 安装 tar -zxvf memcached-1.5.tar.gz

4)配置: ./configure –prefix=/usr/local/memcached-1.5.7
出现错误: no acceptable C compiler found in $PATH
没有C编译器, 安装一个gcc
yum -y install gcc

5) 编译 , 分别执行以下命令
./configure –prefix=/usr/local/memcached-1.5.7
make && make test
如果这一步出现error while loading shared libraries: libevent-2.1.so.6: cannot open shared object file: No such file or directory 的错误,见下面libevent安装。
sudo make install

6)运行
cd /usr/local/memcached-1.5.7
命名行帮助:
bin/memcached -h
启动选项:
-d是启动一个守护进程;
-m是分配给Memcache使用的内存数量,单位是MB;
-u是运行Memcache的用户;
-l是监听的服务器IP地址,可以有多个地址;
-p是设置Memcache监听的端口,,最好是1024以上的端口;
-c是最大运行的并发连接数,默认是1024;
-P是设置保存Memcache的pid文件
作为后台服务程序运行:
bin/memcached -p 11211 -m 64m -d
或者
bin/memcached -d -m 64M -u root -l xx.xx.xx.xx -p 11211 -c 256 -P /tmp/memcached.pid

至此,安装启动完成.

libevent安装

查看是否安装 libevent
ls -al /usr/lib | grep libevent

wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz
tar -zxvf libevent-2.1.8-stable.tar.gz
./configure –prefix=/usr
sudo make
sudo make install

libevent会安装到 /usr/lib 或 /usr/local/lib 下
测试libevent是否安装成功:ls -al /usr/lib | grep libevent(或 ls -al /usr/local/lib | grep libevent)

如果libevent的安装目录为/usr/local/lib下,则还需要建立 libevent-2.0.so.6 到 /usr/lib 的软连接,这样其他程序运行时才能找到libevent库:
ln -s /usr/local/lib/libevent-2.0.so.6 /usr/lib/libevent-2.0.so.6

移除:
rpm -e libevent –nodeps

安装问题解决

es: error while loading shared libraries: libevent-2.1.so.6: cannot open shared object file: No such file or directory
原因是:已经安装了该共享库, 但执行需要调用该共享库的程序的时候, 程序按照默认共享库路径找不到该共享库文件.
1) 如果共享库文件安装到了/lib或/usr/lib目录下, 那么需执行一下ldconfig命令
2) 如果共享库文件安装到了/usr/local/lib(很多开源的共享库都会安装到该目录下)或其它”非/lib或/usr/lib”目录下, 那么在执行ldconfig命令前, 还要把新共享库目录加入到共享库配置文件/etc/ld.so.conf中, 如下:

cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
echo “/usr/local/lib” >> /etc/ld.so.conf
ldconfig
3) 如果共享库文件安装到了其它”非/lib或/usr/lib” 目录下, 但是又不想在/etc/ld.so.conf中加路径(或者是没有权限加路径). 那可以export一个全局变量LD_LIBRARY_PATH, 然后运行程序的时候就会去这个目录中找共享库.
LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录, 这些目录之间用冒号分隔开. 比如安装了一个mysql到/usr/local/mysql目录下, 其中有一大堆库文件在/usr/local/mysql/lib下面, 则可以在.bashrc或.bash_profile或shell里加入以下语句即可:

export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH

命令端连接与使用

可以通过 telnet 命令并指定主机ip和端口来连接 Memcached 服务。

  1. telnet HOST PORT - 连接
  2. set foo 0 0 3 - 保存命令
  3. bar - 数据
  4. get foo - 取得命令
  5. quit - 退出

看不懂上面的部门, 没关系, 接下来介绍Memcached 命令
存储命令
1. set 命令
用于将 value(数据值) 存储在指定的 key(键) 中。
如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用。

set key flags exptime bytes [noreply]

value
参数说明如下:
key:键值 key-value 结构中的 key,用于查找缓存值。
flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes:在缓存中存储的字节数
noreply(可选): 该参数告知服务器不需要返回数据
value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)

输出信息说明:
STORED:保存成功后输出。
ERROR:在保存失败后输出。

  1. add 命令
    Memcached add 命令用于将 value(数据值) 存储在指定的 key(键) 中。
    如果 add 的 key 已经存在,则不会更新数据(过期的 key 会更新),之前的值将仍然保持相同,并且您将获得响应

add key flags exptime bytes [noreply]

value

  1. replace 命令
    Memcached replace 命令用于替换已存在的 key(键) 的 value(数据值)。
    如果 key 不存在,则替换失败,并且您将获得响应 NOT_STORED。
    replace key flags exptime bytes [noreply]

value

  1. append命令
    Memcached append 命令用于向已存在 key(键) 的 value(数据值) 后面追加数据
    append key flags exptime bytes [noreply]

value

  1. prepend命令
    Memcached prepend 命令用于向已存在 key(键) 的 value(数据值) 前面追加数据 。
    prepend key flags exptime bytes [noreply]

value

  1. CAS命令
    Memcached CAS(Check-And-Set 或 Compare-And-Swap) 命令用于执行一个”检查并设置”的操作
    它仅在当前客户端最后一次取值后,该key 对应的值没有被其他客户端修改的情况下, 才能够将值写入。
    检查是通过cas_token参数进行的, 这个参数是Memcach指定给已经存在的元素的一个唯一的64位值。
    cas key flags exptime bytes unique_cas_token [noreply]
    v
    value

Java连接获取值

jar档地址:
https://code.google.com/archive/p/spymemcached/downloads

如果是使用maven的话, 直接在pom.xml中添加 dependency 是无法下载的。

把下载的jar copy 到 D:\temp目录

mvn install:install-file -DgroupId=spy -DartifactId=memcached -Dversion=2.10.3 -Dpackaging=jar -Dfile=D:\temp\spymemcached-2.10.3.jar

再到pom.xml 添加以下部分:

spy
memcached
2.10.3

好了, 开始测试代码了

/**
 * @Title: MemcachedTest.java
 * @Package com.oscar999
 * @Description: TODO
 * @author oscar999
 * @date May 7, 2018 3:10:19 PM
 * @version V1.0
 */

package com.oscar999;

import java.io.IOException;
import java.net.InetSocketAddress;

import org.junit.Test;

import net.spy.memcached.MemcachedClient;

/**
 * @ClassName: MemcachedTest
 * @Description: TODO
 * @author oscar999
 */

public class MemcachedTest {

    @Test
    public void test() throws IOException {
        MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("172.21.145.77", 11211));
        System.out.println("Connection to server sucessful.");

        String s = (String) mcc.get("foo");
        System.out.println("foo in cache=" + s);
        mcc.shutdown();
    }
}

连接服务器, 并获取foo的值。

猜你喜欢

转载自blog.csdn.net/oscar999/article/details/80575978