本文共 4742 字,大约阅读时间需要 15 分钟。
Memcached简介
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。
安装与启动
1.安装Libevent
Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库。安装命令:
yum install libevent libevent-deve 也可使用的源码安装方式。2.安装memcached
1). wget - 获取最新版
下载的文件名是 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 gcc5) 编译 , 分别执行以下命令
./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 install6)运行
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 libeventwget
tar -zxvf libevent-2.1.8-stable.tar.gz ./configure –prefix=/usr sudo make sudo make installlibevent会安装到 /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 服务。
- telnet HOST PORT - 连接
- set foo 0 0 3 - 保存命令
- bar - 数据
- get foo - 取得命令
- 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:在保存失败后输出。- add 命令 Memcached add 命令用于将 value(数据值) 存储在指定的 key(键) 中。 如果 add 的 key 已经存在,则不会更新数据(过期的 key 会更新),之前的值将仍然保持相同,并且您将获得响应
add key flags exptime bytes [noreply]
value
- replace 命令 Memcached replace 命令用于替换已存在的 key(键) 的 value(数据值)。 如果 key 不存在,则替换失败,并且您将获得响应 NOT_STORED。 replace key flags exptime bytes [noreply]
value
- append命令 Memcached append 命令用于向已存在 key(键) 的 value(数据值) 后面追加数据 append key flags exptime bytes [noreply]
value
- prepend命令 Memcached prepend 命令用于向已存在 key(键) 的 value(数据值) 前面追加数据 。 prepend key flags exptime bytes [noreply]
value
- 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档地址:
如果是使用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的值。
转载地址:https://oscar.blog.csdn.net/article/details/80575978 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!