当前位置: 首页 > news >正文

使用MEMCACHED实现缓存

什么是memcached

Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。

Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。

Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。

Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。

本质上,它是一个简洁的key-value存储系统。

一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

web_6

windows下安装memcached

1、下载服务端memcached软件

32bit:下载 memcached-win32-1.4.4-14.zip(直接下)里面包含6个文件,将解压后的文件夹随便放在什么位置(例如:D:\memcached)。
memcached-win32-1.4.4-14.zip下载页面:http://blog.couchbase.com/memcached-144-windows-32-bit-binary-now-available  

 

 

2、以管理员身份运行 cmd.exe,并转至memcached所在文件夹

比如:
cd D:\memcached
注意:如果不以管理员身份运行,将得到报错“failed to install service or service already installed”

3、安装memcached

d:\memcached memcached.exe -d install
(之后屏幕无任何提示,可以再[控制面板]->[管理工具]->[服务]中查看到memcached)   

4、启动memcached

(1)启动方法1:

d:\memcached> memcached.exe -d start
之后屏幕无任何提示,但是在“任务管理器”中勾选“显示所有用户进程”,此时可以看到memcached.exe进程正在运行
默认端口11211,外部访问需要开放该端口,否则无法成功连接。

(2)启动方法2:

[控制面板]->[管理工具]->[服务] 找到 memcached 服务,双击它打开如下图

启动类型:选择【自动】
服务状态:点击下面的【启动】
备注:可执行文件的路径和我上面所说的路径有些区别可以忽略 

5、memcached基本参数设置

-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助
设置参数时需要先停止memcached,然后用命令行设置,比如:
D:\memcached> memcached.exe -m 1 -d start

6、停止memcached

D:\memcached> memcached.exe -d stop

7、卸载memcached

D:\memcached> memcached.exe -d uninstall

8、修改参数

windows下需要通过修改注册表信息进行设置,打开注册表,找 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached 
在其中有一个“ImagePath”项,值为: 
"D:\memcached\memcached.exe" -d runservice 
在后面加上“-m 1024 -c 2048 -p 11210”。等即可。重启服务后生效

 

通过java语言操作memcached

三种API的比较

(1)较早推出的memcached JAVA客户端API,应用广泛,运行比较稳定。

(2)A simple, asynchronous, single-threaded memcached client written in java. 支持异步,单线程的memcached客户端,用到了java1.5版本的concurrent和nio,存取速度会高于前者,但是稳定性不好,测试中常 报timeOut等相关异常。

 

(3)XMemcached同样是基于java nio的客户端,java nio相比于传统阻塞io模型来说,有效率高(特别在高并发下)和资源耗费相对较少的优点。传统阻塞IO为了提高效率,需要创建一定数量的连接形成连接 池,而nio仅需要一个连接即可(当然,nio也是可以做池化处理),相对来说减少了线程创建和切换的开销,这一点在高并发下特别明显。因此 XMemcached与Spymemcached在性能都非常优秀,在某些方面(存储的数据比较小的情况下)Xmemcached比 Spymemcached的表现更为优秀,具体可以看这个Java Memcached Clients Benchmark。

 

使用XMemcached的示例代码

1. 添加maven依赖

 <dependency>
          <groupId>com.googlecode.xmemcached</groupId>
          <artifactId>xmemcached</artifactId>
          <version>2.4.0</version>
      </dependency>

 

 
 

2. 示例代码

        MemcachedClientBuilder
                memcachedClientBuilder = new XMemcachedClientBuilder("localhost:11211");
        MemcachedClient client = memcachedClientBuilder.build();
        //存入一个字符串,第一个参数为key,第二个参数为过期时间,单位为秒,0代表一个月
        //第三个参数为具体的值
        client.add("stringKey",0,"这是我的字符串");
        //从memcached服务器中根据一个键获取一个字符串值
        String s = client.get("stringKey");
        System.out.println(s);
        //存入一个List集合
        List list = new ArrayList();
        list.add("aa");
        list.add("bb");
        client.add("list",0,list);
        //根据key获取一个list
        list = client.get("list");
        System.out.println(list);
        //存入一个对象,如果需要存入一个对象,该对象必须是可序列化的
        //java中通过实现接口java.io.Serializable 来代表该类可序列化
        // class Student implements java.io.Serializable
        Student stu = new Student();
        stu.setId(12);
        stu.setName("张三");
        client.add("obj",0,stu);
        System.out.println(client.get("obj"));

 

转载于:https://www.cnblogs.com/dengcl/p/7742450.html

相关文章:

  • 煤球数目
  • 基本パターン(単一スレッド)
  • css左侧固定宽度,右侧自适应的几种实现方法
  • 可视化查询
  • Alpha 冲刺 (3/10)
  • 用GDB调试程序(一)
  • (转载)深入super,看Python如何解决钻石继承难题
  • 1000. A+B Problem
  • 儿童上网时间管控软件_GreenSurfOnline V0.1 使用说明 (以Windows后台服务形式存在,安装需要有一定电脑操作基础)...
  • 没事儿别优化!
  • Java并发案例04---生产者消费者问题03--使用ReentrantLock
  • Java日志框架-logback的介绍及配置使用方法(纯Java工程)(转)
  • 行外人浅谈“云计算”
  • PE 文件格式 详解 二
  • Linux Mint 教程
  • 【笔记】你不知道的JS读书笔记——Promise
  • ES6简单总结(搭配简单的讲解和小案例)
  • Git的一些常用操作
  • HashMap剖析之内部结构
  • JS基础之数据类型、对象、原型、原型链、继承
  • magento 货币换算
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • scala基础语法(二)
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 两列自适应布局方案整理
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • ionic异常记录
  • Java数据解析之JSON
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • # Apache SeaTunnel 究竟是什么?
  • (3)STL算法之搜索
  • (3)选择元素——(17)练习(Exercises)
  • (function(){})()的分步解析
  • (汇总)os模块以及shutil模块对文件的操作
  • (论文阅读40-45)图像描述1
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .net 4.0发布后不能正常显示图片问题
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .Net Redis的秒杀Dome和异步执行
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .net6使用Sejil可视化日志
  • /proc/stat文件详解(翻译)
  • :中兴通讯为何成功
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • [17]JAVAEE-HTTP协议
  • [20150904]exp slow.txt
  • [acm算法学习] 后缀数组SA
  • [AIGC] Redis基础命令集详细介绍
  • [AIGC] 开源流程引擎哪个好,如何选型?
  • [Angular] 笔记 7:模块