• 使用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_MACHINESYSTEMCurrentControlSetServicesmemcached 
    在其中有一个“ImagePath”项,值为: 
    "D:memcachedmemcached.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"));
  • 相关阅读:
    UCML破解
    UCML快速开发平台学习1-UCML环境安装
    window系统安装jdk,jre
    解决Android报错No resource found that matches the given name (at 'text' with value '@string/hello').
    es6小技巧整理
    如何将项目推到github上面
    如何将时间格式化
    uni-app 页面跳转的两种方法
    layui表单校验及监听复选框选中状态的坑
    使用nvm管理多个不同版本的nodeJS之安装成功nodeJs之后使用npm报错的问题
  • 原文地址:https://www.cnblogs.com/dengcl/p/7742450.html
Copyright © 2020-2023  润新知