• Java连接Memcached进行CRUD


    参考这篇博文在本机安装了Memcached

    在 Java 中常用的memcached有三个:

    • Memcached Client for Java
    • SpyMemcached
    • XMemcached

    这里使用的是xmemcached

    1.添加memcached依赖

            <!-- https://mvnrepository.com/artifact/com.googlecode.xmemcached/xmemcached -->
            <dependency>
                <groupId>com.googlecode.xmemcached</groupId>
                <artifactId>xmemcached</artifactId>
                <version>2.4.6</version>
            </dependency>

    2.Memcached增删查方法封装编写

     1 package com.example.memcached.service;
     2 
     3 import com.example.memcached.entity.Passenger;
     4 import net.rubyeye.xmemcached.MemcachedClient;
     5 import net.rubyeye.xmemcached.MemcachedClientBuilder;
     6 import net.rubyeye.xmemcached.XMemcachedClient;
     7 import net.rubyeye.xmemcached.XMemcachedClientBuilder;
     8 import net.rubyeye.xmemcached.exception.MemcachedException;
     9 import net.rubyeye.xmemcached.utils.AddrUtil;
    10 import net.rubyeye.xmemcached.utils.InetSocketAddressWrapper;
    11 import org.springframework.beans.factory.annotation.Autowired;
    12 import org.springframework.stereotype.Component;
    13 
    14 import java.io.IOException;
    15 import java.net.InetSocketAddress;
    16 import java.util.concurrent.TimeoutException;
    17 
    18 public class Memcached {
    19 
    20     protected static String ip = "localhost";
    21     protected static String port = "11211";
    22     /**失效时间(秒)3600*24 一天*/
    23     protected int exptime = 3600 * 24;
    24 
    25     protected static MemcachedClient memcachedClient;
    26 
    27     public static MemcachedClient getMemcachedClient() throws IOException {
    28         if (memcachedClient == null) {
    29             MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses(ip + ":" + port));
    30             memcachedClient = builder.build();
    31         }
    32         return memcachedClient;
    33     }
    34 
    35     /**
    36      * 设置缓存
    37      * @return
    38      */
    39     public boolean set(Passenger passenger) {
    40         boolean result = false;
    41         try {
    42             result = getMemcachedClient().set(passenger.getName(), exptime, passenger);
    43         } catch (TimeoutException | InterruptedException | MemcachedException | IOException e) {
    44             //ignore
    45         }
    46         return result;
    47     }
    48 
    49     /**
    50      * 获取缓存
    51      * @return
    52      */
    53     public Passenger get(String key){
    54         Passenger passenger = new Passenger();
    55         try {
    56             passenger = getMemcachedClient().get(key);
    57             if (passenger == null) {
    58                 passenger = new Passenger();
    59                 passenger.setName(key);
    60                 passenger.setPassword("无值");
    61                 this.set(passenger);
    62             }
    63         } catch (TimeoutException | InterruptedException | MemcachedException | IOException e) {
    64             passenger.setPassword("出错了");
    65         }
    66         return passenger;
    67     }
    68 
    69     /**
    70      * 删除缓存
    71      * @param key
    72      * @return
    73      */
    74     public Boolean delete(String key) {
    75         boolean result = false;
    76         try {
    77             result = getMemcachedClient().delete(key);
    78         } catch (TimeoutException | InterruptedException | MemcachedException | IOException e) {
    79             //ignore
    80         }
    81         return result;
    82     }
    83 }
    View Code

    3.示例对象类

    import org.springframework.data.mongodb.core.mapping.Document;
    
    import java.io.Serializable;
    
    //必须实现Serializable接口,否则会报Non-serializable object的错
    public class Passenger implements Serializable {
    
        private String name;
        private String password;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    }

    4.简单测试controller

     1 import com.example.memcached.service.Memcached;
     2 import com.example.memcached.entity.Passenger;
     3 import org.springframework.stereotype.Controller;
     4 import org.springframework.web.bind.annotation.PathVariable;
     5 import org.springframework.web.bind.annotation.RequestMapping;
     6 import org.springframework.web.bind.annotation.RestController;
     7 
     8 @RestController
     9 @RequestMapping("/mem")
    10 public class MemcachedController {
    11    //请求头图方便就这样了 
    12     @RequestMapping("/insert/{name}/{password}")
    13     public String insert(@PathVariable String name,@PathVariable String password) throws Exception {
    14         Memcached memcached = new Memcached();
    15         Passenger passenger = new Passenger();
    16         passenger.setName(name);
    17         passenger.setPassword(password);
    18         Boolean set = memcached.set(passenger);
    19         return set.toString();
    20     }
    21 
    22     @RequestMapping("/query/{key}")
    23     public String query(@PathVariable String key){
    24         Memcached memcached = new Memcached();
    25         Passenger passenger = memcached.get(key);
    26         return passenger.getPassword();
    27     }
    28 }

    结果:

    1 添加键值,返回添加结果true

    2 查询刚插入的键值的值成功,返回helloworld

  • 相关阅读:
    Invalid bound statement (not found)解决方法
    MySQL的sum()函数
    关于Mybatis的java.lang.UnsupportedOperationException异常处理
    博客迁移
    Building Blog(个性化博客)2
    走一波服务器
    JZ高中OJ 1036. [SCOI2009]迷路
    JZ初中OJ 2296. [noip普及组2]神殿
    JZ初中OJ 2295. [noip普及组2]栈
    JZ初中OJ 2298. [noip普及组2]异或
  • 原文地址:https://www.cnblogs.com/new-life/p/11117769.html
Copyright © 2020-2023  润新知