/bin/bash
# yum -y install libevent-devel
/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
mysql
mysql> INSTALL PLUGIN daemon_memcached soname "libmemcached.so";
mysql> show plugins;
Confirmez que le plugin appelé daemon_memcached est inclus
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');
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";
** @@ (valeur dans la colonne name de innodb_memcache.containers) .accessible en tant que .key **
↓ Téléchargez spymemcached à partir de http://www.java2s.com/Code/Jar/s/Downloadspymemcached27jar.htm
Cette fois, lors du POSTing ID et Pass avec JSON, 200 est renvoyé s'il y a enregistrement d'utilisateur et 401 est renvoyé s'il n'y a pas d'enregistrement d'utilisateur (ID et Pass ne correspondent pas). Créez l'API Rest avec JavaEE JAX-RS. J'ai essayé de.
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: doit être mappé aux colonnes CHAR, VARCHAR ou BLOB" **, il est donc impossible de gérer les champs de type JSON comme ils le sont avec Memcached **: cry: (telnet) Il y a une réponse quand je l'essaye, mais le contenu est foiré) → https://dev.mysql.com/doc/refman/5.6/ja/innodb-memcached-internals.html Je ne sais pas si CAST est correct, mais soyez en mesure de le gérer sans rien faire. > Oracle
(Une addition) J'ai utilisé une colonne générée pour générer une colonne de type TEXT à partir d'une colonne de type JSON et la spécifier dans value_columns.
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";
En conséquence, ** NG! ** Ce serait possible si l'inverse (du type texte au type json est généré en colonne), mais comme la requête de mise à jour utilisant la fonction json ne peut pas être utilisée, le goût est divisé par deux. ..
Recommended Posts