返回顶部
首页 > 资讯 > 后端开发 > Python >java中Memcached的使用实例(包括与Spring整合)
  • 559
分享到

java中Memcached的使用实例(包括与Spring整合)

2024-04-02 19:04:59 559人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

一、什么是Memcached? Memcached是danga.com开发的分布式内存对象缓存系统,所谓分布式,意味着它不是本地的,而是基于网络连接完成服务。Memcached把一些

一、什么是Memcached?

Memcached是danga.com开发分布式内存对象缓存系统,所谓分布式,意味着它不是本地的,而是基于网络连接完成服务。Memcached把一些数据通过key=value数据存储到内存中,这样访问更加方便快捷。

但是随之而来的问题是如果Memcached关闭或者Memcached的服务器关闭那么所保存的内容也就没有了。

二、安装Memcached服务端

我是在Win下做的实验。

首先下载Win下的Memcached,解压到指定目录。

memcached.exe -d install 安装memcached服务

然后通过Memcached start 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 显示帮助

三、java下使用Memcached(java客户端程序)

目前常用客户端有三种,我使用的是java_memcached-release_2.6.6,该系列是最早推出也应用最为广泛的客户端。

所需全部的jar

commons-pool-1.5.6.jar

java_memcached-release_2.6.6.jar

slf4j-api-1.6.1.jar

slf4j-simple-1.6.1.jar

1、基本使用:


@Test
    public  void show(){
        MemCachedClient client=new MemCachedClient();
        //使用的服务器,由于是在本地测试,只有一个服务器地址。默认端口是11211
        //格式为 服务器IP:端口号
        String [] addr={"127.0.0.1:11211"};
        
        Integer[] weight={3};
        //建立通信的连接池
        SockioPool pool=SockIOPool.getInstance();
        //设置连接池可用cache服务器列表,服务器构成形式:ip地址+端口号
        pool.setServers(addr);
        //设置连接池可用cache服务器的权重,和server数组的位置一一对应
        pool.setWeights(weight);
        //设置初始连接数
        pool.setInitConn(5);
        //设置最小连接数
        pool.setMinConn(5);
        //设置最大连接数
        pool.setMaxConn(200);
        //设置可用连接的最长等待时间
        pool.setMaxIdle(1000*30*30);
        //设置连接池维护线程的睡眠时间,设置为0,维护线程不启动
        pool.setMaintSleep(30);
        //设置Nagle算法,设置为false,因为通讯数据量比较大要求相应及时
        pool.setNagle(false);
        //设置Socket读取等待超时时间
        pool.setSocketTO(30);
        //设置连接等待超时值
        pool.setSocketConnectTO(0);
        //设置完参数后,启动pool
        pool.initialize();
        client.set("value","Ok");
        String value= (String) client.get("value");
         //设置定时时间2s后消失
        client.set("value1","OK2",new Date(2000));
        String value2= (String) client.get("value1");
        System.out.println(value);
        System.out.println(value2);
    }

2、spring整合memcached


<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:property/memcached.properties</value>
            </list>
        </property>
    </bean>
    <!--spring整合memched-->
    <bean id="memcachedPool" class="com.danga.MemCached.SockIOPool" factory-method="getInstance"
          init-method="initialize"   destroy-method="shutDown">
        <property name="servers">
            <list>
                <value>${memcached.server}</value>
            </list>
        </property>
        <property name="maxConn" value="${memcached.maxConn}"></property>
        <property name="maintSleep" value="${memcached.maniSleep}"></property>
        <property name="nagle" value="${memcached.nagle}"></property>
        <property name="socketTO" value="${memcached.socketTO}"></property>
    </bean>

properties配置文件:


#服务器地址
memcached.server=127.0.0.1:11211
#初始连接数目
memcached.initConn=20
#每个服务器建立最大连接数
memcached.maxConn=50
#自查线程周期工作,其每次休眠时间
memcached.maniSleep=3000
#是否使用nagle算法(Socket参数,如果是true,写数据不缓冲,直接发送)
memcached.nagle=false
#Socket阻塞读取数据的超时时间
memcached.socketTO=3000

测试:


@RunWith(SpringJUnit4ClassRunner.class)//表示整合JUnit进行测试
@ContextConfiguration(locations ={"classpath:applicationContext.xml"})
public class SpringTest {
    @Test
    public void test1(){
        MemCachedClient memCachedClient=new MemCachedClient();
        memCachedClient.set("username","luck");
        String value= (String) memCachedClient.get("username");
        System.out.println(value);
    }
}

四、个人学习中遇到的问题:

我们通过客户端添加与获得数据,那么这个客户端如何与pool联系的,通过别人的博客找到答案。

客户端是通过pool的name关联到某个pool上的。

客户端与Pool都没有指定名称的时候,默认是创建名称为“default”的pool,客户端与它关联。

如果pool设置了名字,那么客户也要指定名称。

Memcached结合java基本操作


//创建MemcachedClient    连接memcached服务器端
        MemcachedClient mClient = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
        System.out.println("连接memcached成功..........");
        //存储数据,key-ruo,value-888,时间是1000秒
        Future future = mClient.set("ruo", 1000, "888");
        System.out.println("查看ruo的存储状态:"+future.get()+",存储的值:"+mClient.get("ruo"));
        //添加数据,如果key已经存储,则不会更新之前的value,返回NOT_STORED
        Future f1 = mClient.add("ruo", 1000, "999");
        System.out.println("查看添加ruo的存储状态:"+f1.get()+",添加后key:ruo的值是"+mClient.get("ruo"));
        //替换replace
        Future f2 = mClient.replace("ruo", 1000, "999");
        System.out.println("查看替换ruo的存储状态:"+f2.get()+",替换后key:ruo的值是"+mClient.get("ruo"));
        //追加数据append,用来向已存在的key,追加数据
        Future f3 = mClient.append("ruo","666");
        System.out.println("查看替换ruo的存储状态:"+f3.get()+",替换后key:ruo的值是"+mClient.get("ruo"));
        //prepend,用来向已存在的key对应的value前,追加数据
        Future f4 = mClient.prepend("ruo", "555");
        System.out.println("查看替换ruo的存储状态:"+f4.get()+",替换后key:ruo的值是"+mClient.get("ruo"));
        //清空数据库
        mClient.flush();
        //关闭连接
        mClient.shutdown();

运行结果

2018-10-30 11:23:07.350 INFO net.spy.memcached.MemcachedConnection: Connection state changed for sun.NIO.ch.SelectionKeyImpl@38a22ea7
查看ruo的存储状态:true,存储的值:888
查看添加ruo的存储状态:false,添加后key:ruo的值是888
查看替换ruo的存储状态:true,替换后key:ruo的值是999
查看替换ruo的存储状态:true,替换后key:ruo的值是999666
查看替换ruo的存储状态:true,替换后key:ruo的值是555999666
2018-10-30 11:23:07.368 INFO net.spy.memcached.MemcachedConnection: Shut down memcached client

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: java中Memcached的使用实例(包括与Spring整合)

本文链接: https://lsjlt.com/news/130196.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java中Memcached的使用实例(包括与Spring整合)
    一、什么是Memcached? Memcached是danga.com开发的分布式内存对象缓存系统,所谓分布式,意味着它不是本地的,而是基于网络连接完成服务。Memcached把一些...
    99+
    2024-04-02
  • Redis整合Spring结合使用缓存实例
    一、Redis介绍 什么是Redis? redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、s...
    99+
    2022-06-04
    缓存 实例 Redis
  • 消息队列 RabbitMQ 与 Spring 整合使用的实例代码
    一、什么是 RabbitMQRabbitMQ 是实现 AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。消息中间件主要用于组件之间的解耦,消息的发送...
    99+
    2023-05-31
    rabbitmq spring
  • 详解redis与spring的整合(使用缓存)
    1、实现目标通过redis缓存数据。(目的不是加快查询的速度,而是减少数据库的负担)  2、所需jar包注意:jdies和commons-pool两个jar的版本是有对应关系的,注意引入jar包是要配对使用,否则将会报错。因为commons...
    99+
    2023-05-31
    spring redis
  • 使用spring如何实现springmvc与mybatis进行整合
    使用spring如何实现springmvc与mybatis进行整合?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。jar包 引入web.xml文件<conte...
    99+
    2023-05-31
    spring springmvc mybatis
  • 使用spring-boot如何实现整合dubbo中的Spring-boot-dubbo-starter
    使用spring-boot如何实现整合dubbo中的Spring-boot-dubbo-starter?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在application.p...
    99+
    2023-05-31
    springboot art dubbo
  • Redis整合Spring及结合使用缓存的示例分析
    Redis整合Spring及结合使用缓存的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、Redis介绍什么是Red...
    99+
    2024-04-02
  • spring整合redis消息监听通知使用的实现示例
    目录问题引入1.1 过期问题描述1.2 常用解决方案分析1.3.整合SpringData Redis开发spring整合redis监听消息1. 配置监听redis消息2 测试消息结合...
    99+
    2024-04-02
  • 使用Spring Boot实现对RabbitMQ整合的方法
    本篇文章给大家分享的是有关使用Spring Boot实现对RabbitMQ整合的方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.Topic交换器介绍Topic Excha...
    99+
    2023-05-31
    springboot rabbitmq
  • 使用Spring Boot如何实现对MyBatis的整合
    本篇文章为大家展示了使用Spring Boot如何实现对MyBatis的整合,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.加入mybatis-spring-boot-stater的Maven依赖...
    99+
    2023-05-31
    springboot mybatis
  • java 实现Unicode与普通字符(包括中文)的转换
        今天使用zl464发送tts语音播报,文档上面明确要求中文编码是UTF-8,但是我发过去的中文,它全都不认识,最后实验出来需要将字符串转成Unicode它就认识了,下面记录了java中文转Unicode的方法。 Java实现Unic...
    99+
    2023-09-10
    java 开发语言 java工具类
  • Kotlin与Java相互调用的完整实例
    目录一、Kotlin 调用 Java二、Java 调用 Kotlin附 Github 源码:总结一、Kotlin 调用 Java 1. kotlin 关键字转义 java 中的方法或...
    99+
    2024-04-02
  • MyBatisExampleAnd与Or混合使用的实例
    目录MyBatis Example And与Or混合使用(条件1 and 条件2) or ( 条件3 and 条件4)条件1 and (条件2 or 条件3)MyBatis Exam...
    99+
    2024-04-02
  • Java中Spring的单例模式使用
    目录1.spring单例V.S设计模式的单例2.成员变量的解决方式3.Spring并发问题4.对实体bean在多线程中的处理5.spring无状态的支持6.spring有状态的支持7...
    99+
    2024-04-02
  • spring整合redis缓存实现以注解的形式使用
    本篇文章给大家分享的是有关spring整合redis缓存实现以注解的形式使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。maven项目中在pom.xml中依赖2个jar包,其...
    99+
    2023-05-31
    redis 注解 spring
  • Spring @Async 的使用与实现的示例代码
    首先Spring AOP有两个重要的基础接口,Advisor和PointcutAdvisor,接口声明如下:Advisor接口声明:public interface Advisor { Advice getAdvice(); boole...
    99+
    2023-05-31
    spring @async
  • Java中ArrayList与顺序表的概念与使用实例
    目录前言泛型(Generic)泛型的引入泛型的基本概念包装类(Wrapper Class)包装类的引入基本数据类型与包装类的对应关系ArrayList与顺序表ArrayList简介A...
    99+
    2024-04-02
  • Java中双大括号初始化的理解与使用
    目录对该方法的理解效率问题总结偶然机会看到一种对象初始的方式: // 新建一个列表,并赋值 "Harry","Tony","Tom" ArrayList<Str...
    99+
    2024-04-02
  • Java中Process与Runtime()的使用示例
    这篇文章主要介绍Java中Process与Runtime()的使用示例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Java Process与Runtime()使用java调用cmd执行bat文件有时会出现卡死的现象...
    99+
    2023-06-15
  • Spring@Bean注解的使用场景与案例实现
    目录一、简单介绍二、注解说明1. 注解源码2. 注解使用场景三、使用案例1. 案例描述2. 案例实现新建注入到IOC容器中的User类创建Spring的配置类BeanConfig创建...
    99+
    2023-03-10
    Spring @Bean使用案例 Spring @Bean注解
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作