zoukankan      html  css  js  c++  java
  • SpringBoot-Memcached

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

    Memcached 是“分布式”的内存对象缓存系统,那么就是说,那些不需要“分布”的,不需要共享的,或者干脆规模小到只有一台服务器的应用, memcached不会带来任何好处,相反还会拖慢系统效率,因为网络连接同样需要资源,即使是UNIX本地连接也一样。

    需要注意的是,memcached使用内存管理数据,所以它是易失的,当服务器重启,或者memcached进程中止,数据便会丢失,所以 memcached不能用来持久保存数据。

    1. Mac 下memcached 的安装与使用

      brew install memcached
      

       启动

      brew services start memcached
      
    2. pom.xml添加依赖
      		<dependency>
      			<groupId>commons-pool</groupId>
      			<artifactId>commons-pool</artifactId>
      			<version>1.5.6</version>
      		</dependency>
      
      		<dependency>
      			<groupId>com.whalin</groupId>
      			<artifactId>Memcached-Java-Client</artifactId>
      			<version>3.0.2</version>
      		</dependency>
      
    3. application.yml配置
      memcache:
        servers: 127.0.0.1:11211
        failover: true
        initConn: 100
        minConn: 20
        maxConn: 1000
        maintSleep: 50
        nagel: false
        socketTO: 3000
        aliveCheck: true
      
    4. 创建Memcached配置文件
       
      @Configuration
      public class MemcachedConfig {
      
          @Value(value = "${memcache.servers}")
          private String[] servers;
          @Value(value = "${memcache.failover}")
          private boolean failover;
          @Value(value = "${memcache.initConn}")
          private int initConn;
          @Value(value = "${memcache.minConn}")
          private int minConn;
          @Value(value = "${memcache.maxConn}")
          private int maxConn;
          @Value(value = "${memcache.maintSleep}")
          private int maintSleep;
          @Value(value = "${memcache.nagel}")
          private boolean nagel;
          @Value(value = "${memcache.socketTO}")
          private int socketTO;
          @Value(value = "${memcache.aliveCheck}")
          private boolean aliveCheck;
      
          @Bean
          public SockIOPool pool(){
      
              SockIOPool pool = SockIOPool.getInstance();
              pool.setServers(servers);
              pool.setFailover(failover);
              pool.setInitConn(initConn);
              pool.setMinConn(minConn);
              pool.setMaxConn(maxConn);
              pool.setMaintSleep(maintSleep);
              pool.setNagle(nagel);
              pool.setSocketTO(socketTO);
              pool.initialize();
      
              return pool;
          }
      
          @Bean
          public MemCachedClient memCachedClient(){
              return new MemCachedClient();
          }
      
      
      }
      
    5. 测试
      @RunWith(SpringRunner.class)
      @SpringBootTest
      public class MemcachedTest {
      
          @Autowired
          private MemCachedClient memCachedClient;
      
          @Test
          public void test() throws InterruptedException {
              memCachedClient.set("a","123");
              String value = (String) memCachedClient.get("a");
              System.out.println(value);
      
              // 3s后过期
              memCachedClient.set("b",1, new Date(3000));
              Object flag =  memCachedClient.get("b");
              System.out.println(flag);
      
              Thread.sleep(3000);
              flag = memCachedClient.get("b");
              System.out.println(flag);
          }
      
          @Test
          public void addUser(){
        // 对象必须序列化,实现Serializable接口 User user = new User("鹏", "123456"); memCachedClient.set("user", user); User cUser = (User) memCachedClient.get("user"); System.out.println(cUser); } }
  • 相关阅读:
    http uri唯一标识
    http协议
    python模块 sys
    file 文件的操作
    库的介绍及使用
    python os模块
    python的序列化与反序列化
    python 字典的定义以及方法
    python字符串的常用方法
    在Windows下使用adb logcat grep
  • 原文地址:https://www.cnblogs.com/king-peng/p/10256564.html
Copyright © 2011-2022 走看看