Memcached构建缓存服务器的方法_服务器其它

来源:脚本之家  责任编辑:小易  

Windows下的Memcache安装1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached2. 在终端(也即cmd命令界面)下输入 c:\memcached\memcached.exe -d install --安装memcached成为服务,这样才能正常运行,否则运行失败! 3. 再输入: c:\memcached\memcached.exe -d start --启动memcached的。 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。Linux下的安装:1.下载memcached和libevent,放到 /tmp 目录下# cd /tmp# wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz# wget http://www.monkey.org/~provos/libevent-1.2.tar.gz2.先安装libevent:# tar zxvf libevent-1.2.tar.gz# cd libevent-1.2# ./configure –prefix=/usr# make# make install3.测试libevent是否安装成e68a8462616964757a686964616f31333335343439功:# ls -al /usr/lib | grep libeventlrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent-1.2.so.1 -> libevent-1.2.so.1.0.3-rwxr-xr-x 1 root root 263546 11?? 12 17:38 libevent-1.2.so.1.0.3-rw-r–r– 1 root root 454156 11?? 12 17:38 libevent.a-rwxr-xr-x 1 root root 811 11?? 12 17:38 libevent.lalrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent.so -> libevent-1.2.so.1.0.34.安装memcached,同时需要安装中指定libevent的安装位置:# cd /tmp# tar zxvf memcached-1.2.0.tar.gz# cd memcached-1.2.0# ./configure –with-libevent=/usr# make# make install如果中间出现报错,请仔细检查错误信息,按照错误信息来配置或者增加相应的库或者路径。安装完成后会把memcached放到 /usr/local/bin/memcached ,5.测试是否成功安装memcached:# ls -al /usr/local/bin/mem*-rwxr-xr-x 1 root root 137986 11?? 12 17:39 /usr/local/bin/memcached-rwxr-xr-x 1 root root 140179 11?? 12 17:39 /usr/local/bin/memcached-debugmemcached的基本设置:1.启动Memcache的服务器端:# /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid-d选项是启动一个守护进程,-m是分配给Memcache使用的内存数量,单位是MB,这里是10MB,-u是运行Memcache的用户,这里是root,-l是监听的服务器IP地址,如果有多个地址的话,这里指定了服务器的IP地址192.168.0.200,-p是设置Memcache监听的端口,这里设置了12000,最好是1024以上的端口,-c选项是最大运行的并发连接数,默认是1024,这里设置了256,按照你服务器的负载量来设定,-P是设置保存Memcache的pid文件,这里是保存在 /tmp/memcached.pid,2.如果要结束Memcache进程,执行:# kill `cat /tmp/memcached.pid`也可以启动多个守护进程,不过端口不能重复。3.重启apache,service httpd restart java的客户端连接程序: 将java_memcached-release_1.6.zip解压后的目录中的java_memcached-release_2.0.jar文件复制到java项目的lib目录下。 package utils.cache;import java.util.Date;import com.danga.MemCached.MemCachedClient;import com.danga.MemCached.SockIOPool;/*** 使用memcached的缓存实用类.*/public class MemCached{ // 创建全局的唯一实例 protected static MemCachedClient mcc = new MemCachedClient(); protected static MemCached memCached = new MemCached(); // 设置与缓存服务器的连接池 static { // 服务器列表和其权重 String[] servers = {"127.0.0.1:11211"}; Integer[] weights = {3}; // 获取socke连接池的实例对象 SockIOPool sockIOPool = SockIOPool.getInstance(); // 设置服务器信息 sockIOPool.setServers( servers ); sockIOPool.setWeights( weights ); // 设置初始连接数、最小和最大连接数以及最大处理时间 sockIOPool.setInitConn( 5 ); sockIOPool.setMinConn( 5 ); sockIOPool.setMaxConn( 250 ); sockIOPool.setMaxIdle( 1000 * 60 * 60 * 6 ); // 设置主线程的睡眠时间 sockIOPool.setMaintSleep( 30 ); // 设置TCP的参数,连接超时等 sockIOPool.setNagle( false ); sockIOPool.setSocketTO( 3000 ); sockIOPool.setSocketConnectTO( 0 ); //sockIOPool.setFailover(bFailover); //sockIOPool.setAliveCheck(bAliveCheck); // 初始化连接池 sockIOPool.initialize(); // 压缩设置,超过指定大小(单位为K)的数据都会被压缩 if (memCachedClient == null) { mcc = new MemCachedClient(sPoolName); mcc.setCompressEnable(true); mcc.setCompressThreshold(4096); mcc.setPrimitiveAsString(true); } }/*<h3>基于Spring的配置,如下:</h3> <pre> <bean id="memCachedService" class="com.ms.memcached.MemCachedServiceImpl"> <constructor-arg index="0" value="${memcached.pool.name}" /> <constructor-arg index="1" value="${memcached.pool.servers}" /> <constructor-arg index="2" value="${memcached.pool.initConn}" /> <constructor-arg index="3" value="${memcached.pool.maxConn}" /> <constructor-arg index="4" value="${memcached.pool.minConn}" /> <constructor-arg index="5" value="${memcached.pool.socketTO}" /> <constructor-arg index="6" value="${memcached.pool.maintSleep}" /> <constructor-arg index="7" value="${memcached.pool.nagle}" /> <constructor-arg index="8" value="${memcached.pool.failover}" /> <constructor-arg index="9" value="${memcached.pool.aliveCheck}" /> </bean> </pre> <h3>利用com.MS.cache.properties来设置参数,如下:</h3> <pre> memcached.pool.name = MS memcached.pool.servers = 192.168.9.132:12000,192.168.9.133:12000 memcached.pool.initConn = 128 memcached.pool.maxConn = 1024 memcached.pool.minConn = 20 memcached.pool.socketTO = 3000 memcached.pool.maintSleep = 30 memcached.pool.nagle = false memcached.pool.failover = true memcached.pool.aliveCheck = true </pre>*/ /** * 保护型构造方法,不允许实例化! */ protected MemCached() { } /** * 获取唯一实例. */ public static MemCached getInstance() { return memCached; } /** * 添加一个指定的值到缓存中. * @param key * @param value */ //新增指定key的缓存内容,但不覆盖已存在的内容。 public boolean add(String key, Object value) { return mcc.add(key, value); } //expiry过期时间 public boolean add(String key, Object value, Date expiry) { return mcc.add(key, value, expiry); } //新增或覆盖指定Key的缓存内容 public boolean set(String key, Object value) { return mcc.set(key, value); } //lExpiry过期时间 public boolean set(String key, Object value, long lExpiry) { return mcc.set(key, value, new Date(lExpiry)); } //根据指定的Key获取缓存内容 public boolean get(String key) { return mcc.get(key); } //根据指定Key更新缓存内容 public boolean replace(String key, Object value) { return mcc.replace(key, value); } //lExpiry 指定的时间 public boolean replace(String key, Object value, long lExpiry) { return mcc.replace(key, value, new Date(lExpiry)); } //根据指定Key删除缓存内容 public boolean delete(String key, Object value) { return mcc.delete(key, value); } //根据指定Key在指定时间后删除缓存内容 public boolean delete(String key, Object value, long lExpiry) { return mcc.delete(key, value, new Date(lExpiry)); } //检测Cache中当前Key是否存在 public boolean exists(String key) { return mcc.exists(key); } //根据指定一批Key批量获取缓存内容。 /* * @param sKeys 指定的一批Key。 * @return Object[oValue] */ public Object[] getMultiArray(String[] sKeys) throws ServiceException { return memCachedClient.getMultiArray(sKeys); } /** * 根据指定一批Key批量获取缓存内容。 * * @param sKeys 指定的一批Key。 * @return Map<sKey, oValue> */ public Map<String, Object> getMulti(String[] sKeys) throws ServiceException { return memCachedClient.getMulti(sKeys); } public static void main(String[] args) { MemCached memCached= MemCached.getInstance(); memCached.add("hello", 234); System.out.print("get value : " + memCached.get("hello")); }} 那么我们就可以通过简单的像main方法中操作的一样存入一个变量,然后再取出进行查看,我们可以看到先调用了add,然后再进行get,我们运行一次 后,234这个值已经被我们存入了memcached的缓存中的了,我们将main方法中红色的那一行注释掉后,我们再运行还是可以看到get到的 value也是234,即缓存中我们已经存在了数据了。 对基本的数据我们可以操作,对于普通的POJO而言,如果要进行存储的话,那么比如让其实现java.io.Serializable接口,因为 memcached是一个分布式的缓存服务器,多台服务器间进行数据共享需要将对象序列化的,所以必须实现该接口,否则会报错的。Entity/** * 获取当前实体的缓存Id * * @return */ public String getCacheId() { return getCacheId(this.getClass(), sBreedId); } get public Breed getBreedById(String sBreedId) throws ServiceException { Breed breed = (Breed)memCachedService.get(getCacheId(Breed.class, sBreedId)); if(breed == null) { breed = service.get("breed.getBreedById", sBreedId); if(breed != null) { memCachedService.set(breed.getBreedId(), breed); } } return breed; } save memCachedService.set(spider.getCacheId(), breed); update memCachedService.replace(spider.getCacheId(), breed); remove memCachedService.delete(getCacheId(Spider.class, IbreedId)); 或 memCachedService.delete(breed.getCacheId());listAll public List listAll() throws ServiceException { List breeds = new ArrayList (); List breedIds = (List)memCachedService.get(getKeyByMap("Breed", null)); if(ObjectUtils.isEmpty(breedIds)) { breeds = service.list("breed.getAllBreed", null); if (!ObjectUtils.isEmpty(breeds)) { breedIds = new ArrayList(); for (Breed breed : breeds) { breedIds.add(breed.getBreedId()); } memCachedService.set(getKeyByMap("Breed", null), breedIds); } } else { for (String sBreedId : breedIds) { Breed breed = getBreedById(sBreedId); if (breed != null) { breeds.add(breed); } } } return breeds; }www.zgxue.com防采集请勿采集本网。

前言

许多Web应用都将数据保存到关系型数据库( RDBMS)中,应用服务器从中读取数据并在浏览器中显示。

memcached+magent实现memcached集群 首先说明下memcached存在如下问题 本身没有内置分布式功能,无法实现使用多台Memcache服务器来存储不同的数据,最大程度的使用相同的资源;无法同步数据,容易造成单点故障。(memagent代理实现集群) 在 Mem

但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。

呃,那你再了解下你用的memcached类怎么写的,有没有把缓存内容内容固化呢?

Memcached/redis是高性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web等应用的速度、 提高可扩展性。

一、下载Memercached For Windows 二、安装步骤 1、解压到指定目录,如:C:\Memcached\memcached-win32-1.4.4-14。 2、用cmd打开命令窗口,转到解压的目录,输入 “memcached.exe -d install”。 3、打开控制面板,打开服务,可以看到memcached已

RDBMS即关系数据库管理系统(Relational Database Management System)

一、下载MemercachedForWindows二、安装步骤1、解压到指定目录,如:C:\Memcached\memcached-win32-1.4.4-14。2、用cmd打开命令窗口,转到解压的目录,输入“memcached.exe-dinstall”。3、打开控制面板,打开服务,可以看到memcached已经在上面可

1、简介

软件的下载,好像从官网上只能下载未经编译的源码,需要自己编译后才能安装使用,不熟悉的用户还是直接百度搜索下载比较好, 下载之后解压会出现两个版本,32位系统用x86,64位系统用x64,里面各有一个.exe程序。 建议把memcached的文件夹拷贝到

 1、nosql产品: redis,mongodb,memcached.

   NOSQL名词解释:非关系型数据库

(1)以键值对的方式存储数据---(Key-Value)的形式

(2)缓存数据库 —— 缓存服务器作用: 加快访问速度 ,缓解数据库压力

2、NoSQL的优点/缺点

优点:

- 高可扩展性

- 分布式计算

- 低成本

- 架构的灵活性

- 没有复杂的关系

缺点:

- 没有标准化

- 有限的查询功能(到目前为止)

- 最终一致是不直观的程序

缓存服务器作用: 加快访问速度 ,缓解数据库压力

3、关系型数据库与非关系型数据库的区别:---------面试高频率问题

1.首先了解一下 什么是关系型数据库?

关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织。

优点:

1、易于维护:都是使用表结构,格式一致;

2、使用方便:SQL语言通用,可用于复杂查询;

3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。

缺点:

1、读写性能比较差,尤其是海量数据的高效率读写;

2、固定的表结构,灵活度稍欠;

3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈

2.什么非关系型数据库呢?

非关系型数据是一种数据结构化存储方法的集合,可以是文档或者键值对等

优点:

1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。

2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;

3、高扩展性;

4、成本低:nosql数据库部署简单,基本都是开源软件。

缺点:

1、不提供sql支持,学习和使用成本较高;

2、无事务处理;

3、数据结构相对复杂,复杂查询方面稍欠。

2、memcached

1、特点 

1.内置内存存储方式-----------为了提高性能,memcached中保存的数据都存储在memcache内置的内存存储空间中。由于数据仅存在于内存中,重启操作系统会导致全部数据消失

2.简单key/value存储---------------服务器不关心数据本身的意义及结构,只要是可序列化数据即可。

                        存储项由“键、过期时间、可选的标志及数据”四个部分组成;

2、服务框架

原理

1、检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作,路径操作为①②③⑦。

2、如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现),路径操作为①②④⑤⑦⑥。

3.保持缓存的“新鲜性”,每当数据发生变化的时候(比如,数据有被修改,或被删除的情况下),要同步更新的缓存信息,确保用户不会在缓存取到旧的数据。

3、配置安装Memcached

memcache能存放多少数据,取决于服务器本身的内存有多大。

1.安装----准备一台服务器

[root@memcached ~]# yum install memcached -y[root@memcached ~]# systemctl start memcached #启动

2.修改配置文件

[root@memcached ~]# vim /etc/sysconfig/memcachedPORT="11211" ---监听的端口,默认11211.可以修改USER="memcached" -----用户MAXCONN="1024" -----默认并发,可以修改CACHESIZE="64" ------给的内存。默认是MOPTIONS="" ----监听的网络地址

然后把ip地址发给开发人员,开发的会使用api接口连接memcached.

测试:

[root@memcached ~]# yum install -y telnet #安装telent[root@memcached ~]# telnet 192.168.246.188 11211Trying 192.168.246.188...Connected to 192.168.246.188.Escape character is '^]'.set name 0 60 9 #设置名称为name的key key 标记位(id号) 过期时间 大小helloword #给name的值STORED #出现stoped表示已经存储成功。get name #查询key值VALUE name 0 9hellowordENDquit ---退出

参数解释:

name:key的名字 自己定义

0:key的id号,需要和其他的key不一样

60:缓存过期时间,单位为秒,0为永远

9:字符串最大长度

不用它的原因:存储的数据类型单一,而且数据只能存储在内存中。无法实现数据的持久化,服务器重启,数据将消失

=================================================================

扩展:安装php支持memcached的扩展模块:

安装php7.0

[root@memcached ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm[root@memcached ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm[root@memcached ~]# yum -y install php70w.x86_64 php70w-cli.x86_64 php70w-common.x86_64 php70w-gd.x86_64 php70w-ldap.x86_64 php70w-mbstring.x86_64 php70w-mcrypt.x86_64 php70w-mysql.x86_64 php70w-pdo.x86_64 php70w-devel zlib-devel php70w-fpm libmemcached php70w-pecl-memcached[root@memcached ~]# yum install -y make gcc zlib-devel libmemcached-devel git

下载PHP Memcache 扩展包

安装nginx略,配置nginx的yum源。测试访问php的页面。[root@memcached ~]# vim /etc/nginx/conf.d/nginx.confserver { listen 80; server_name localhost;​ location ~ \.php$ { root /usr/share/nginx/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }}编辑php页面[root@memcached html]# vim /usr/share/nginx/html/index.php<?phpphpinfo();?>重启nginx启动php-fpm浏览器访问

到此这篇关于Memcached构建缓存服务器的方法的文章就介绍到这了,更多相关Memcached缓存服务器内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网! 您可能感兴趣的文章:同台服务器使用缓存APC效率高于Memcached的演示代码Linux下安装Memcached服务器和客户端与PHP使用示例CentOS 7.x安装部署Memcached服务器的详细方法在Linux服务器上安装 memcached的基本操作

解决方法1:不同的模块使用2113不同5261memcached客户端实例,这样不同模块4102就可以1653配置不同的服务器列表,这样不同模块的数据就缓存到了不同的服务器中。这样,当某台服务器不可用后,只会影响到相应memcached客户端实例的数据,而不会影响到其它客户端实例的数据。解决方法2:修改或添加新的算法,并在数据唯一键中添加命名空间,算法根据配置和数据唯一键中命名空间来选择不同的Socket连接,也就是服务器啦。数据项唯一键(key)的定义:命名空间.数据项ID,就跟编程中的” 命名空间”一样,经如说用户有一篇日志的ID是”999999”, 那么这条篇日志的唯一键就是:Sns.UserLogs.Log.999999,当然我们存贮的时候考虑性能问题,可以用一个短的数值来代替命名空间。这样在选择Socket的时候就可以根据数据项中的唯一键来选择啦内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • 禁止ip访问网站的多种方法分享(linux,php,nginx,apache)
  • 360提示服务器开启了webdav的关闭方法
  • 自设代理服务器缓存图片节省上网流量
  • 高命中率的varnish缓存配置分享
  • iis防盗链 isapi rewrite图片防盗链规则写法
  • x-frame-options头未设置 防止网页被iframe内框架调用
  • 完美解决在eclipse上部署tomcat时出现8080等端口被占用的问题
  • 阿里云盾网站安全防御(waf)的使用方法(图文)
  • mongodb学习笔记(五) mongodb文件存取操作
  • 在linux下用软件实现raid功能的实现方法
  • 分析Memcached客户端如何把缓存数据分布到多个服务...
  • 如何配置Memcached服务器
  • memcached在分布式中怎么把数据存入指定的memcache...
  • spring mvc 用memcached做缓存
  • 如何最佳地使用memcached
  • php memcached服务器关机后数据不丢失
  • 如何在windows下安装多个memcached服务
  • 如何解决memcached连接数过高导致后续连接失败的问题
  • 如何在windows下安装多个memcached服务
  • 如何修改memcache内存大小
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全星外虚拟主机华众虚拟主机linuxwin服务器ftp服务器dns服务器tomcat nginxzabbix云和虚拟化服务器其它首页服务器同台服务器使用缓存apc效率高于memcached的演示代码linux下安装memcached服务器和客户端与php使用示例centos 7.x安装部署memcached服务器的详细方法在linux服务器上安装 memcached的基本操作禁止ip访问网站的多种方法分享(linux,php,nginx,apache)360提示服务器开启了webdav的关闭方法自设代理服务器缓存图片节省上网流量高命中率的varnish缓存配置分享iis防盗链 isapi rewrite图片防盗链规则写法x-frame-options头未设置 防止网页被iframe内框架调用完美解决在eclipse上部署tomcat时出现8080等端口被占用的问题阿里云盾网站安全防御(waf)的使用方法(图文)mongodb学习笔记(五) mongodb文件存取操作在linux下用软件实现raid功能的实现方法rsync 常见错误与解决方法整理git 常用命令速查表(图文+表格)raid教程 全程图解手把手教你做rgit客户端tortoisegit(windows系服务器共享文件夹设置软件、文件用两块硬盘组建raid0磁盘阵列简单正确开启win2008远程桌面的方法hp ilo2 使用详细教程[图文]502 bad gateway是什么意思 502 nas(synology 群晖)首次使用教网站解决和优化server is too busy的一些memcache缓存系统知识点梳理idea新建maven项目时速度缓慢的解决方法ssh更改默认端口号及实现免密码远程登录mac下开启与关闭端口转发的脚本配置方法护卫神 主机管理系统使用说明篇 系统设置360提示服务器开启了webdav的关闭方法iis7 iis8反向代理规则编写、安装与配置方git自定义_动力节点java学院整理解决jmail无法安装的方法(帐户名与安全标
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved