개발관련/memcached 2015. 11. 9. 11:02

먼저 dto 설정. 

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 
@Entity
@Table(name="user")
//중요!!!!!!!!!!!!!!!!!! memcached 할때!!!!
public class UserDTO implements Serializable{
    @Id
    private long idx;
    @Column(unique=true,nullable=false)
    private String id;
    @Column(nullable=false)
    private String pwd;
    
    private String email;
    @Column(nullable=false)
    private String name;
    
    
    public UserDTO(){
        
    }
    public UserDTO(long idx, String id, String pwd, String email, String name){
        this.idx = idx;
        this.id = id;
        this.pwd = pwd;
        this.email = email;
        this.name = name;
    }
    
    public long getIdx() {
        return idx;
    }
    public void setIdx(long idx) {
        this.idx = idx;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
 
 
                
 
 
cs

기본적인 user table로서 jpa 관련 annotation 으로 셋팅. 중요한 점은 memcached는  Serializable를 해야한다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 ..... 생략.........
@Override
    @InvalidateSingleCache(namespace = "CacheKeyMethod")
    public boolean delete(@ParameterValueKeyProvider long idx) {
        userDao.delete(idx);
        return false;
    }
 
    @Override
    @UpdateSingleCache(namespace = "CacheKeyMethod", expiration = 3600)
    public UserDTO edit(
            @ParameterValueKeyProvider @ParameterDataUpdateContent UserDTO userDTO) {
        return userDao.save(userDTO);
    }
                
@Override
    @ReadThroughSingleCache(namespace = "CacheKeyMethod", expiration = 3600)
    public UserDTO read(@ParameterValueKeyProvider long idx) {
        UserDTO userDTO = userDao.findOne(idx);
        // userDao.save(userDTO);
        return userDTO;
    }
 ..... 생략.........
 
cs



service부분은 위 코드와 같다. @InvalidateSingleCache, @UpdateSingleCache, @ReadThroughSingleCache를 쓰며, 
InvalidateSingleCache는 만료시 , @UpdateSingleCache 내용이나, 컨테츠가 update될때, @ReadThroughSingleCache 단순히 읽을때 사용한다. 
하지만 이방법에는 큰 문제가 있다. string만 가능하다는 점이다. 아직 number 계열을 케스팅 하는 방법을 못찾았다. 

read를 할때와 update할때 이때 memcached의 값이 다르다는 것을 발견할 것이다. 이러한 문제를 해결하기 위해 dto에 @CacheKeyMethod를 사용 하면 되지만 정착 number에 대한 key는 셋팅이 불가 하므로 사용하기는 쉽지 않았다. 

값을 확인 하는 방법은 

telent xxx.xxx.xxx.xxx 11211 

stats items 를 하면 memcached의 값이 나오며 키값을 모를 경우는 stats cachedump items의 key, 개수 형태로 쓰면된다. ex) stats cachedump 7 10


다음에는 ehcached와 동일한 annotation 기반을 설명 하고자 한다. 

1
2
3
4
5
6
 
@CacheKeyMethod
    public String getId() {
        return id;
    }
 
cs



posted by 제스트
: