SpringBoot-Memcached

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

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

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

  1. Mac 下memcached 的安装与使用

    1
    brew install memcached

     启动

    1
    brew services start memcached

     

  2. pom.xml添加依赖
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <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配置
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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配置文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    @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. 测试
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    @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(){<br>  // 对象必须序列化,实现Serializable接口
            User user = new User("鹏", "123456");
     
            memCachedClient.set("user", user);
     
            User cUser = (User) memCachedClient.get("user");
            System.out.println(cUser);
        }
     
    }

     

posted on   Siwanper  阅读(300)  评论(0编辑  收藏  举报
努力加载评论中...

点击右上角即可分享
微信分享提示