MySQL에memcached 플러그인을 설치한 다음 Java에서 액세스
MySQL에memcached 플러그인 삽입
1. livent-devel 설치
/bin/bash
# yum -y install libevent-devel
2. my.cnf에memcache 설정 추가/etc/my.cnf
daemon_memcached_option = "-p11211"
daemon_memcached_engine_lib_name = innodb_engine.so
daemon_memcached_r_batch_size = 1
daemon_memcached_w_batch_size = 1
3. memcached 플러그인 설치mysql
mysql> INSTALL PLUGIN daemon_memcached soname "libmemcached.so";
mysql> show plugins;
daemon_memcached라는 플러그인을 확인하십시오4. 테스트용 표 만들기
mysql
mysql> use test
mysql> create table user (id varchar(16), passwd varchar(256), primary key(id)) engine=InnoDB;
mysql> insert into user (id, passwd) values ('user01', '5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8');
※ insert의passwd열의값은sha256의"password"5.memcache를 통해 접근 가능
mysql
mysql> insert into innodb_memcache.containers (`name`,`db_schema`,`db_table`,`key_columns`,`value_columns`,`flags`,`cas_column`,`expire_time_column`,`unique_idx_name_on_key`) VALUES ('user', 'test', 'user', 'id', 'passwd',0,0,0,'PRIMARY');
mysql> UNINSTALL PLUGIN daemon_memcached;INSTALL PLUGIN daemon_memcached soname "libmemcached.so";
@@ (innodb memcache.containers의name 열 값).키로 접근 가능달러 텔넷 127..0.11121 [email protected]과 타자를 칠 때 sha256 문자열에 답장을 하면 OK입니다.
6. Java 면 설치
↓좌우로spymemcachedhttp://www.java2s.com/Code/Jar/s/Downloadspymemcached27jar.htm 다운로드
※ 물론 마븐으로도 가능
이번에 JSON POST에서 아이디·패스를 진행하면서 가입자가 등록된 상태에서 JavaEE의 JAX-RS로 (ID·Pass 불일치) 없이 401로 돌아오는 RestAPI를 만들었다.
Memcache.java
package memcached;
import java.net.InetSocketAddress;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
import javax.enterprise.context.RequestScoped;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import net.spy.memcached.MemcachedClient;
@RequestScoped
@Path("/auth")
@Produces("application/json")
@Consumes("application/json")
public class Memcache {
@POST
public Response auth (Map<String, String> param) {
ResponseBuilder response = null;
try {
MemcachedClient memcachedClient = new MemcachedClient (new InetSocketAddress("192.168.56.102", 11211));
if ( sha256( param.get("password") ).equals( memcachedClient.get( "@@user." + param.get("id") ).toString() ) ) {
response = Response.status(200);
} else {
response = Response.status(401);
}
} catch (Exception e) {
response = Response.status(400);
}
return response.build();
}
private String sha256(String plaintext) throws Exception{
MessageDigest md = MessageDigest.getInstance("SHA-256");
StringBuilder sb = new StringBuilder();
md.update(plaintext.getBytes());
for (byte b : md.digest()) {
String hex = String.format("%02x", b);
sb.append(hex);
}
return sb.toString();
}
}
"value columns:CHAR,VARCHAR 또는 BLOB 열에 비추어야 합니다."따라서 JSON형 필드를 직접memcached로 처리할 수 없습니다→ https://dev.mysql.com/doc/refman/5.6/ja/innodb-memcached-internals.html
CAST의 말에 문제가 있을지는 모르겠지만 최대한 아무것도 하지 않고 대처해 주세요갑골문 선생
(보충)
generated column을 사용하여 JSON형 열에서 TEXT형 열을 생성합니다.valuecolumns를 지정해 보았습니다.
mysql
mysql> create table userinfo (id varchar(16), infojson json, userinfo text as (cast(infojson as char) engine=InnoDB;
mysql> insert into innodb_memcache.containers (`name`,`db_schema`,`db_table`,`key_columns`,`value_columns`,`flags`,`cas_column`,`expire_time_column`,`unique_idx_name_on_key`) VALUES ('userinfo', 'test', 'userinfo', 'id', 'userinfo',0,0,0,'PRIMARY');
mysql> UNINSTALL PLUGIN daemon_memcached;INSTALL PLUGIN daemon_memcached soname "libmemcached.so";
결과,실패!반대로 (text형에서 json형의generated column까지) 가능하지만 json 함수를 사용한 업데이트 시스템 조회는 사용할 수 없기 때문에 맛이 반감됩니다.
Reference
이 문제에 관하여(MySQL에memcached 플러그인을 설치한 다음 Java에서 액세스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/masahiro-aoike/items/299d6c2991cef630c967텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)