首页 > 其他分享 >Memcached

Memcached

时间:2024-05-26 11:55:15浏览次数:14  
标签:Memcached memcache Redis memcachedClient Memcache memcachedClientBuilder memcach

1.Memcache

  1. 官网,http://memcached.org/。
  2. 安装和商用命令。
    1. 下载memcache包,包含libgcc_s_sjlj-1.dll、memcached.exe、pthreadGC2.dll。
    2. 管理员身份按照。memcached.exe -d install。
    3. 启动。memcached.exe -d start。
    4. 停止。memcached.exe -d stop。
  3. docket创建memcache容器。
docker run --name memcache -d -p 11211:11211 -e MEMCACHED_USERNAME=root -e MEMCACHED_PASSWORD=123456 -e MEMCACHED_MAX_MEMORY=64m memcached

2.Memcache和Redis的区别

  1. Memcache,只支持k/v数据结构,可以设置过期时间,Memcache一般只用来做缓存。Redis支持的数据结构更加的丰富,如支持string、hash、list、set、zset,Redis除了进行缓存之外,还可以做分布式锁、订阅/发布、积分榜。

  2. Memcache不支持持久化,Redis支持持久化。

  3. Memcache直接将数据保存在物理内存中,Redis有自己的VM机制。

  4. Redis使用的单线程IO复用网络模型, 而Memcached多线程非阻塞IO复用模型。

  5. Value值大小不同:Redis最大可以达到512MB;Memcached只有1MB。

  6. Memcache不能将数据迁移到其他的Memcache中;Redis主从直接可以进行数据同步。

  7. 在一些老的项目中会使用到Memcache,通过如果项目中需要缓存文件、图片数据可以使用Memcache。

3.Java中操作memcache

  1. Java有三种方式可以用来操作memcache,分别为Memcached-java-client、Spymemcached和XMemcached。主要使用XMemcached操作。
  2. 引入依赖。
<dependency>
    <groupId>com.googlecode.xmemcached</groupId>
    <artifactId>xmemcached</artifactId>
    <version>2.4.8</version>
</dependency>
  1. 代码操作。
public static void test() throws Exception {
    // 服务地址和端口
    String services = "127.0.0.1:11211";

    // 创建客户端连接
    MemcachedClient memcachedClient = new XMemcachedClientBuilder(services)
        .build();

    // get
    Object o = memcachedClient.get("k1");
    System.out.println(o); // null

    //  set
    boolean set = memcachedClient.set("k1", 0, "v1");
    System.out.println(set); // true

    o = memcachedClient.get("k1");
    System.out.println(o); // v1
}
  1. 整合Springboot并使用线程池维护memcache连接。

    1. 引入依赖。
    <dependency>
        <groupId>com.googlecode.xmemcached</groupId>
        <artifactId>xmemcached</artifactId>
        <version>2.4.8</version>
    </dependency>
    
    1. application.yaml中配置ip和端口信息。
    memcached:
      # memcached服务器集群(格式为host:port,多个服务器之间用空格隔开)
      server: 127.0.0.1:11211
      # 调用的超时时间
      opTimeout: 3000
      # 连接池大小
      poolSize: 10
      # 是否开启失败模式
      failureMode: false
    
    1. 添加XMemcachedConfig配置类。
    @Configuration
    public class XMemcachedConfig {
    	
    	@Value("${memcached.server:127.0.0.1:11211}")
    	private String server;
    	
    	@Value("${memcached.opTimeout:3000}")
    	private Integer opTimeout;
    	
    	@Value("${memcached.poolSize:10}")
    	private Integer poolSize;
    	
    	@Value("${memcached.failureMode:true}")
    	private boolean failureMode;
    	
    	@Bean(name = "memcachedClient")
    	public MemcachedClient getBuilder() throws IOException {
    		MemcachedClientBuilder memcachedClientBuilder = new XMemcachedClientBuilder(server);
    		// 采用一致性哈希算法
    		memcachedClientBuilder.setSessionLocator(new KetamaMemcachedSessionLocator());
    		// 操作的超时时间
    		memcachedClientBuilder.setOpTimeout(opTimeout);
    		// 采用二进制传输协议(默认为文本协议)
    		memcachedClientBuilder.setCommandFactory(new BinaryCommandFactory());
    		// 设置连接池的大小
    		memcachedClientBuilder.setConnectionPoolSize(poolSize);
    		// 是否开起失败模式
    		memcachedClientBuilder.setFailureMode(failureMode);
    		return memcachedClientBuilder.build();
    	}
    }
    
    1. 使用。
    @Service
    public class UserService {
        
        @Resource
        private MemcachedClient memcachedClient;
        
        public void getUserById(Long id) throws InterruptedException, TimeoutException, MemcachedException {
            // get(key)会抛出很多的异常,在项目中可以在封装一层,将异常处理掉。
            Object o = memcachedClient.get("user:" + id);
            System.out.println(o);
        }
    }
    

标签:Memcached,memcache,Redis,memcachedClient,Memcache,memcachedClientBuilder,memcach
From: https://www.cnblogs.com/godistance/p/18213493

相关文章

  • 什么是Redis?Redis为什么这么快?Redis相比Memcached有哪些共同点和区别?
    (1)什么是Redis?简述它的优缺点?Redis为什么这么快?Redis本质上是一个Key-Value类型的内存数据库,把整个数据库加载在内存当中操作,定期通过异步操作把数据库中的数据复制到硬盘中。(异步操作,一种非阻塞执行任务的方式,其中任务的执行与结果的返回不会阻碍原者继续执行后续操作。)优点......
  • Memcached和Redis的区别?
    MemCached数据结构单一,仅用来缓存数据,而Redis支持多种数据类型。MemCached不支持数据持久化,重启后数据会消失。Redis支持数据持久化。Redis提供主从同步机制和cluster集群部署能力,能够提供高可用服务。Memcached没有提供原生的集群模式,需要依靠客户端实现往集群中分......
  • 警惕Memcached协议滥用!网络攻击愈演愈烈,如何做好服务器防御?
    近期,网络安全领域迎来了一场新的挑战。Memcached协议,这个原本用于提升数据库读取性能的开源内存缓存系统,近期被恶意攻击者所滥用,进行大规模分布式拒绝服务(DDoS)放大攻击。全球多家公司服务器受到波及,其中包括知名的网络安全公司ArborNetworks。攻击频发据监测数据显示,这类攻......
  • redis和memcached的区别
    观点一:1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等;2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储;3、虚拟内存--Redis当物理内存用完时,可以将一些很久没用到的value交换到磁......
  • NoSQL 数据库管理工具,搭载强大支持:Redis、Memcached、SSDB、LevelDB、RocksDB,为您的数
    NoSQL数据库管理工具,搭载强大支持:Redis、Memcached、SSDB、LevelDB、RocksDB,为您的数据存储提供无与伦比的灵活性与性能!【官网地址】:http://www.redisant.cn/nosql介绍直观的用户界面从单一应用程序中同时连接Redis、Memcached、SSDB、LevelDB、RocksDB,你可以快速轻松地创建......
  • SpringBoot集成Memcached实现高效缓存
    一、前言Memcached是一款高性能的分布式内存对象缓存系统,可以用来缓存SQL查询结果、API调试结果等。使用Memcached可以减少对数据库的查询次数,提高系统性能。它主要用于减轻数据库负载,提供应用系统,减少数据库压力。SpringBoot可以快速集成Memcached实现对缓存到读写操作。二、安装......
  • 使用 Prometheus 监控 Memcached 最佳实践
    监控Memcached监控Memcached的重要性无法忽视。通过监控Memcached,我们可以及时了解到系统中的缓存命中率、缓存使用量和缓存访问频率等关键指标,从而更好地优化系统性能。同时,监控Memcached还可以帮助我们发现潜在的性能问题和内存泄漏,及时采取措施进行修复,保障系统的稳定运行。在......
  • Memcached在项目中的应用
     Memcached是一个开源的快速分布式缓存框架,它和ehcached等缓存框架相比,具有下面的一些优势:1、跨jvm的缓存架。我们知道,在一个jvm进程中,一般情况下的有效内存利用最多为2G,如果你再把数据缓存在项目的jvm进程中,势必造成内存空间的紧缺,严重的时候会出现堆......
  • 简述memcached的工作原理
     Memcached只支持能序列化的数据类型,不支持持久化,基于Key-Value的内存缓存系统1.内存分配机制 应用程序运行需要使用内存存储数据,但对于一个缓存系统来说,申请内存、释放内存将十分频繁,非常容易导致大量内存碎片,最后导致无连续可用内存可用。 Memcached采用了Slab......
  • Memcached深入学习总结
    在上一家公司时,产品主要使用memcached做缓存。虽然目前这家公司memcached使用的比较少(刚进公司做云存储相关服务时小规模使用了一下,后来做另一个系统时换redis做了缓存),但前几天整理资料时看到了原先写的memcached相关笔记,在此整理一下发上来。----------------------------------......