'캐쉬'에 해당되는 글 2건

  1. 2015.11.09 :: springmvc+memcacehd(3)
  2. 2015.11.06 :: SpringMVC + memcached(1)
개발관련/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 제스트
:
개발관련/memcached 2015. 11. 6. 17:08

멤 캐쉬는 글로벌 캐쉬로 아마도 redis(아직 공부중) 보다 사용이 쉽다.  Spring에선 ehcache를 지원하지만 local 캐쉬인 관계로 

정리 할려고 한다. 


출처 : http://wiki.gurubee.net/pages/viewpage.action?pageId=26740267

memcached는 위의 그림으로 설명이 된다. 머 그 이상 이하도 없다. 

redis와 다른점을 말하자면, redis는 nosql 메모리 db로 in-memory 기반 으로 사용 될 수도 있고, 캐쉬로 사용 될 수 있으며, 이를 다시 clustering을 사용 할 수 있다. 


여튼 memcached는 사용이 간단하므로, 널리 쓰인다. 설치는 위 그림 출처에 가보면 사용이 가능하다. 

memcached 명령어는 http://smallmir.tistory.com/173 참조 하면 된다. 


memcached는 많은 언어를 지원하며, java도 그중에 하나이다. 스프링에서는 xmemcached 라이브러리와 spymemcached 라이브러리 두개가 존재한다. 

아무거나 써도 상관없을듯..... 


사용법은 두가지로 나뉘는 듯 보이는데 @UpdateSingleCache 이런 annotation을 쓰는 방법과 기존 ehcache 와 동일한 방법 두가지로 나뉜다. 





posted by 제스트
: