[nginx+passenger] 설치

nginx 2016. 6. 30. 16:49



nginx-passenger 설치 내용이다. passenger를 설치하면, ruby on rails와  연동할 수 있다. 


nginx 1.6.0 + passenger 4.0.33 를 설치했다.



1) nginx 1.6.0 설치

http://nginx.org/download/





2) ruby를 설치하고, passenger 4.0.33을 설치한다.

https://rubygems.org/gems/passenger/versions/4.0.33



gem install passenger -v 4.0.33 --backtrace --verbose --local --no-rdoc --no-ri --force



nginx 설정 파일에서 passenger_root와 passenger_ruby 지시자를 추가한다. 

worker_processes 4;
error_log logs/error.log;
user www;

events {
use epoll;
multi_accept on;
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

log_format main '$request_time [$proxy_add_x_forwarded_for] - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" $remote_addr $upstream_cache_status';

access_log logs/access.log main;

underscores_in_headers on;
sendfile on;
send_timeout 10;
client_header_timeout 10;
tcp_nopush on;
keepalive_timeout 10;
server_tokens off;

gzip on;
gzip_http_version 1.1;
gzip_comp_level 3;
gzip_types text/plain application/json application/xml;
more_clear_headers 'Server' 'X-Powered-By';

passenger_root /usr/local/lib/ruby/gems/2.1.0/gems/passenger-4.0.33;
passenger_ruby /usr/local/bin/ruby;

include nginx-vhosts.conf;
}


Posted by '김용환'
,

spring boot에서 아주 간단히 multi-datasource를 관리하고 jdbctemplate를 사용할 수 있는 예제를 소개한다.





먼저 maven또는 gradle 파일의 dependency에 db의 driver, spring-boot-starter-jdbc, commons-dbcp2를 추가한다.


build.gradle

compile("mysql:mysql-connector-java:5.1.36")
compile("org.springframework.boot:spring-boot-starter-jdbc")
compile("org.apache.commons:commons-dbcp2:2.1.1")


application.yml

spring:
profiles : dev
activity_slave_db_0:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://db0.google.com:3306/test
username: develop
password : devteam
max-wait : 10000
max-active : 5
test-on-borrow: true
validationQuery: select 1
activity_slave_db_1:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://db1.google.com:3306/test
username: develop
password : devteam
max-wait : 10000
max-active : 5
test-on-borrow: true
validationQuery: select 1



Datasource 설정 

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;

@Configuration
public class DatabaseConfig {

@Primary @Bean(name = "dsSlave0")
@ConfigurationProperties(prefix="spring.activity_slave_db_0")
public DataSource dsSlave0() {
return DataSourceBuilder.create().build();
}

@Bean(name = "dsSlave1")
@ConfigurationProperties(prefix="spring.activity_slave_db_1")
public DataSource dsSlave1() {
return DataSourceBuilder.create().build();
}

@Bean(name = "jdbcSlave0")
@Autowired
public JdbcTemplate slave0JdbcTemplate(@Qualifier("dsSlave0") DataSource dsSlave) {
return new JdbcTemplate(dsSlave);
}

@Bean(name = "jdbcSlave1")
@Autowired
public JdbcTemplate slave1JdbcTemplate(@Qualifier("dsSlave1") DataSource dsSlave) {
return new JdbcTemplate(dsSlave);
}

}




실제 DAO에서 사용하는 jdbctemplate 코드.

@Component
public class ActivitySlaveDao {
@Autowired
@Qualifier("jdbcSlave0")
private JdbcTemplate jdbcTemplate0;
@Autowired
@Qualifier("jdbcSlave1")
private JdbcTemplate jdbcTemplate1;
private List<JdbcTemplate> getJdbcTemplates() {
List list = Lists.newArrayList();
list.add(jdbcTemplate0);
list.add(jdbcTemplate1); }

// .. jdbcTemplate 사용. }


Posted by '김용환'
,


가장 큰 뉴스


* ms의 linked인 인수

http://www.huffingtonpost.kr/2016/06/14/story_n_10448016.html




1. Facebook의 추천 친구에 위치 정보를 활용하는지에 대한 의문 제기됨
ㄴ이로 인한 설정 변경 방법 소개
http://fusion.net/story/319108/facebook-phone-location-friend-suggestions/
http://www.cnet.com/how-to/how-to-turn-off-this-creepy-facebook-feature/
(한국 발 기사) http://news.joins.com/article/20230486
ㄴfacebook은 위치기반 추천 아니다고 얘기함
https://techcrunch.com/2016/06/28/facebook-says-its-not-making-friend-suggestions-based-on-your-location-after-all/


2. Facebook 표기 디자인 바뀜
http://www.theverge.com/2016/6/28/12046822/facebook-like-button-redesign
http://www.fnnews.com/news/201606291053198310



3. ios 10의 애플 메모리에 Facebook의 슬라이드 쇼우 기능 공개 - 스냅챗과 맞짱
http://www.cnet.com/news/facebooks-slideshow-feature-takes-on-apple-memories/
http://www.refinery29.com/2016/06/115290/facebook-slideshow-feature
모멘트 기능을 Facebook으로 집약함
(한국 발 기사) http://view.asiae.co.kr/news/view.htm?idxno=2016062808142874862


4. 페이스북의 전 직원의 책 - Chaos monkey 발간
http://money.cnn.com/2016/06/28/technology/facebook-culture-chaos-monkeys-antonio-garcia-martinez/
"Don't be deceived by my withering treatment of Facebook... Inside every cynic lives a heartbroken idealist."
Facebook declined to comment on the book.


5. 페이스북 메신저로 송금 기능에 대한 push 옵션 추가
https://techcrunch.com/2016/06/28/facebook-tests-new-option-that-pushes-users-to-send-money-on-messenger/
https://tctechcrunch2011.files.wordpress.com/2016/06/img_6267.png?w=764&h=680


6. 페이스북 프로필 (Intro)변경 
http://www.huffingtonpost.com/entry/facebook-intro-work_us_57694831e4b015db1bca97c9


7. 페이스북 라이브 방송으로 수익 (계약금만 600억)
한국발 뉴스 : http://www.businesspost.co.kr/news/articleView.html?idxno=29659


8. 인스타그램 월 이용자 5 억명 시대
http://www.huffingtonpost.kr/2016/06/22/story_n_10602580.html


9. 트위터 가상/증강현실 사업 속도 내기 위해 전 애플 UI 디자이너 영입
http://www.kbench.com/?q=node/164674


10. 트위터, 사진 꾸미고 검색 가능한 '스티커' 기능 출시
http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=105&oid=001&aid=0008502142
http://imgnews.naver.net/image/001/2016/06/28/AKR20160628030500017_01_i_99_20160628082108.jpg?type=w540


11. 트위터, 동영상 업로드 140초 확대 등 비디오 기능 강화
http://www.rpm9.com/news/article.html?id=20160623090047
http://www.focus.kr/view.php?key=2016062200081854360
이와 함께 연예인, 정치인 등 영향력 있는 트위터 이용자가 팬들과 더욱 효율적으로 커뮤니케이션할 수 있도록 돕는 '트위터 인게이지'(Twitter Engage) 앱도 출시한다. 해당 앱을 통해 작성한 트윗에 대한 이용자들의 반응을 초 단위로 빠르고 정확히 확인할 수 있으며 더욱 활발한 반응을 이끌어 낼 수 있는 활용 방식을 추천받을 수 있다. 


12. 트위터 밖에서 트윗 공유 쉬워진다
http://www.zdnet.co.kr/news/news_view.asp?artice_id=20160623094037&type=det&re=
22일(현지시간) 트위터는 자사 플랫폼 내의 다양한 콘텐츠들을 웹 사이트나 모바일 앱으로 옮겨주는 '임베디드 타임라인(embedded timeline)'을 누구나 더 쉽게 활용할 수 있도록 그 기능을 개선했다고 밝혔다.

임베디드 타임라인(embedded timeline)은 특정 계정이 올린 트윗이나 마음에 들어하는 트윗들, 특정 이용자가 관심 있는 계정을 모은 리스트, 다양한 주제로 이용자들이 큐레이션해 만든 컬렉션 타임라인 등을 트위터 외부의 웹 사이트나 모바일 앱 등에 게시할 수 있도록 해주는 기능이다.


13. 트위터, 인공지능 스타트업 '매직포니' 사들여 동영상 강화
http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=101&oid=018&aid=0003568730
매직포니는 기계 학습을 통해 동영상의 화질을 개선하는 기술을 보유한 회사로 올해 초 저해상도 비디오의 해상도를 업그레이드 하는 알고리즘을 공개했다.




14. 사진을 업로드하면 360도로 만들어 주는(화각) facebook 기능 추가.

https://ko-kr.facebook.com/help/851697264925946

http://www.insight.co.kr/newsRead.php?ArtNo=65013




15. Facebook의 추천 친구에 위치 정보를 활용하는지에 대한 의문 제기됨
ㄴ이로 인한 설정 변경 방법 소개
http://fusion.net/story/319108/facebook-phone-location-friend-suggestions/
http://www.cnet.com/how-to/how-to-turn-off-this-creepy-facebook-feature/
(한국 발 기사) http://news.joins.com/article/20230486
ㄴfacebook은 위치기반 추천 아니다고 얘기함
https://techcrunch.com/2016/06/28/facebook-says-its-not-making-friend-suggestions-based-on-your-location-after-all/



16. Facebook 표기 디자인 바뀜


http://www.theverge.com/2016/6/28/12046822/facebook-like-button-redesign
http://www.fnnews.com/news/201606291053198310




17. ios 10의 애플 메모리에 Facebook의 슬라이드 쇼우 기능 공개 - 스냅챗과 맞짱
http://www.cnet.com/news/facebooks-slideshow-feature-takes-on-apple-memories/
http://www.refinery29.com/2016/06/115290/facebook-slideshow-feature
모멘트 기능을 Facebook으로 집약함
(한국 발 기사) http://view.asiae.co.kr/news/view.htm?idxno=2016062808142874862

18. 페이스북의 전 직원의 책 - Chaos monkey 발간
http://money.cnn.com/2016/06/28/technology/facebook-culture-chaos-monkeys-antonio-garcia-martinez/
"Don't be deceived by my withering treatment of Facebook... Inside every cynic lives a heartbroken idealist."
Facebook declined to comment on the book.

19. 페이스북 메신저로 송금 기능에 대한 push 옵션 추가
https://techcrunch.com/2016/06/28/facebook-tests-new-option-that-pushes-users-to-send-money-on-messenger/
https://tctechcrunch2011.files.wordpress.com/2016/06/img_6267.png?w=764&h=680

20. 페이스북 프로필 (Intro)변경 
http://www.huffingtonpost.com/entry/facebook-intro-work_us_57694831e4b015db1bca97c9

21. 페이스북 라이브 방송으로 수익 (계약금만 600억)
한국발 뉴스 : http://www.businesspost.co.kr/news/articleView.html?idxno=29659

22. 인스타그램 월 이용자 5 억명 시대
http://www.huffingtonpost.kr/2016/06/22/story_n_10602580.html

23. 트위터 가상/증강현실 사업 속도 내기 위해 전 애플 UI 디자이너 영입
http://www.kbench.com/?q=node/164674

24. 트위터, 사진 꾸미고 검색 가능한 '스티커' 기능 출시
http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=105&oid=001&aid=0008502142
http://imgnews.naver.net/image/001/2016/06/28/AKR20160628030500017_01_i_99_20160628082108.jpg?type=w540

25. 트위터, 동영상 업로드 140초 확대 등 비디오 기능 강화
http://www.rpm9.com/news/article.html?id=20160623090047
http://www.focus.kr/view.php?key=2016062200081854360
이와 함께 연예인, 정치인 등 영향력 있는 트위터 이용자가 팬들과 더욱 효율적으로 커뮤니케이션할 수 있도록 돕는 '트위터 인게이지'(Twitter Engage) 앱도 출시한다. 해당 앱을 통해 작성한 트윗에 대한 이용자들의 반응을 초 단위로 빠르고 정확히 확인할 수 있으며 더욱 활발한 반응을 이끌어 낼 수 있는 활용 방식을 추천받을 수 있다. 

26. 트위터 밖에서 트윗 공유 쉬워진다
http://www.zdnet.co.kr/news/news_view.asp?artice_id=20160623094037&type=det&re=
22일(현지시간) 트위터는 자사 플랫폼 내의 다양한 콘텐츠들을 웹 사이트나 모바일 앱으로 옮겨주는 '임베디드 타임라인(embedded timeline)'을 누구나 더 쉽게 활용할 수 있도록 그 기능을 개선했다고 밝혔다.

임베디드 타임라인(embedded timeline)은 특정 계정이 올린 트윗이나 마음에 들어하는 트윗들, 특정 이용자가 관심 있는 계정을 모은 리스트, 다양한 주제로 이용자들이 큐레이션해 만든 컬렉션 타임라인 등을 트위터 외부의 웹 사이트나 모바일 앱 등에 게시할 수 있도록 해주는 기능이다.

27. 트위터, 인공지능 스타트업 '매직포니' 사들여 동영상 강화
http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=101&oid=018&aid=0003568730
매직포니는 기계 학습을 통해 동영상의 화질을 개선하는 기술을 보유한 회사로 올해 초 저해상도 비디오의 해상도를 업그레이드 하는 알고리즘을 공개했다.




Posted by '김용환'
,




google place api response는 200이고, 

status 결과에 REQUEST_DENIED 라는 내용이 보인다. 



다양한 원인이 있을 수 있다. 동작되다가 갑자기 안된다면, ip whitelist 이슈 일 수 있다. 

whitelist를 관리 중에 새롭게 변경된 ip가 빠져 있거나,

아예 처음부터 whitelist ip를 넣지 않았다가 ip를 추가하면, 기존의 요청하던 IP가 disallow되면서 에러가 날 수도 있다.






https://developers.google.com/places/web-service/faq#_6


문제 해결

계속 "status": "REQUEST_DENIED"를 받는 이유는 무엇인가요?

다음과 같은 경우 Google Places API 웹 서비스에서 "status": "REQUEST_DENIED"를 반환합니다.

  • Google Developers Console에서 Google Places API 웹 서비스를 활성화하지 않았습니다.
  • 요청에서 key 매개변수가 누락되었습니다.
  • key 매개변수가 Google Developers Console의 API 키와 일치하지 않습니다.
  • Google Developers Console에서 API 키가 올바르게 설정되지 않았습니다.
    • 브라우저 키를 사용 중인 경우 허용된 리퍼러가 올바른지 확인합니다.
    • 서버 키를 사용중인 경우 허용된 IP가 올바른지 확인합니다.
    • Android 및 iOS 키는 지원되지 않으므로 브라우저 또는 서버 키를 사용하세요.
  • 요청이 HTTPS 요청으로 전송되지 않았습니다. 모든 Google Places API 웹 서비스 요청에는 HTTPS가 필요합니다.
  • 요청 전송에 잘못된 HTTP method가 사용되었습니다.
    • 장소 추가를 제외한 모든 요청은 GET 요청으로 전송해야 합니다.
    • 모든 장소 추가 요청은 POST 요청으로 전송해야 합니다.





Why do I keep receiving "status": "REQUEST_DENIED"?

The "status": "REQUEST_DENIED" is returned by the Google Places API Web Service when:

  • You have not activated the Google Places API Web Service in the Google Developers Console.
  • The key parameter is missing from your request.
  • The key parameter does not match the your API key in the Google Developers Console.
  • Your API key has not been correctly set up in the Google Developers Console:
    • If you are using a browser key, check that your allowed referer(s) are correct.
    • If you are using a server key, check that your allowed IP(s) are correct.
    • Android and iOS keys are not supported, please use a Browser or Server key.
  • The request was not sent as an HTTPS request, HTTPS is required for all Google Places API Web Service requests.
  • The incorrect HTTP method was used to send the request:
    • All requests must be sent as a GET request except for Place Add.
    • All Place Add requests must be sent as a POST request.



Posted by '김용환'
,



linux 간 디렉토리를 복사할 때, 빠른 복사 툴이 여러 존재한다.


1. rsync

rsync는 다 좋은데, 

데몬 설치와 설정 작업이 필요하고.

sender와 receiver 간의 버전 때문에, 버전을 맞춰야 하는 작업이 있을 수 있다.

또한, 파일 분석 시간이 오래 걸릴 수 있다는 단점이 있다. 



2. scp


간단한 file copy로는 좋지만, 대용량 파일(디렉토리)에서는 속도가 나오지 않는다. 


예) scp 계정@원본ip:/home/www/ . 




3. tar + ssh

rsync 랑 비슷한 속도 수준이며, 초기 복사 준비 시간도 없다. (강추)


예) tar -c /var/lib/jenkins | ssh 장비이름 'tar -xvf - -C /var/lib/jenkins'








'unix and linux' 카테고리의 다른 글

[bash] 리스트(List)에서 중복 요소 제거하기  (0) 2016.08.03
[vagrant] 맥에서 centos 7 설치  (0) 2016.07.24
FQDN-도메인  (0) 2016.06.25
[리눅스] redir로 proxy 서버 만들기  (0) 2016.06.20
ipcalc - ip 계산기  (0) 2016.06.14
Posted by '김용환'
,

FQDN-도메인

unix and linux 2016. 6. 25. 14:14


도메인은 FQDN(https://wiki.kldp.org/KoreanDoc/html/PoweredByDNS-KLDP/fqdn.html)이라는 규칙을 따르고 있다. 마침표(.)를 항상 이름 뒤에 붙인다.

www.

google.

com. 

이런 단위로 구성된다. 기술적으로 마지막에 점이 빠지면 에러이지만, 계속 사용했던 관습을 따라 마지막 점은 생략해도 된다.


www.google.com. 

www.google.com. 


nslookup을 확인하면 확인할 수 있다. 




$ nslookup www.google.com.

Server: 1.214.68.2

Address: 1.214.68.2#53


Non-authoritative answer:

Name: www.google.com

Address: 203.252.15.151

Name: www.google.com

...



$ nslookup www.google.com

Server: 1.214.68.2

Address: 1.214.68.2#53


Non-authoritative answer:

Name: www.google.com

Address: 210.94.153.34

...




실제로 웹 브라우져에서 테스트해보면 잘 알 수 있다.

웹 브라우져는 간단한 문법 이슈까지 문제를 해결한다. 


Posted by '김용환'
,


구글 크롬 브라우져의 단축키가 있다.

https://support.google.com/chrome/answer/157179?hl=ko



유용한 단축키를 소개한다면.. 다음과 같다.


검색주소창으로 이동⌘ + L
개발자 도구 열기⌘ + Option + I


페이지의 모든 항목 확대 및 +
페이지의 모든 항목 축소 및 -



새 탭을 열어 이동⌘ + T


새 창 열기⌘ + N



마지막으로 닫은 탭 다시 열어 이동⌘ + Shift + T
다음에 연 탭으로 이동⌘ + Option + 오른쪽 화살표
이전에 연 탭으로 이동⌘ + Option + 왼쪽 화살표






이 것 외에도 구글 검색시 단축키를 사용할 수 있다.


구글 검색 후, 

j (또는 아래 키): 검색 결과 아래로 이동

k (또는 위 키) : 검색 결과 위로 이동

/  : 검색 창 

command + return : 검색 내용으로 새 창 띄우기



Posted by '김용환'
,


up이라는 테이블이 존재하고 그에 맞는 간단한 모델 객체가 있다.

up이라는 테이블은 간단하게 id와 date가 존재하고, date 타입으로 update_at 이라는 필드가 있다고 가정하자.


public class Up {

public long id;

public long updateAt;

}



RowMapper를 정의한다. 유의할 점은 mysql date 타입을 java 객체에서 표현할 방법이 중요하다. Types.TIMESTAMP인지 메타데이터를 확인한다. Object로 먼저 읽은 후, TimeStamp 객체로 변경한 다음 getTime()을 호출하여 long 값으로 얻어내야 한다.

(String이나 그냥 Long 타입으로 받아들인후 Date 타입으로 쉽게 변환되지 않는다)

public class UpRowMapper implements RowMapper {

public Object mapRow(ResultSet rs, int rowNum) throws SQLException {

Up up = new Up();

up.id = rs.getLong("id");

ResultSetMetaData metadata = rs.getMetaData();

if (metadata.getColumnType(2) == Types.TIMESTAMP) {

Object updateAt = rs.getObject(2);


up. updateAt = ((Timestamp) updateAt).getTime();

}

return up;

}

}



실제 쿼리는 다음과 같이 사용한다.

List<Up> upList = jdbcTemplate.query("select id, updated_at from up", new UpRowMapper(), id);


jdbcTemplate에 배치성 데이터를 생성한다.  이 때 setTimestamp() 메소드를 사용한다.

jdbcTemplate.batchUpdate("INSERT IGNORE INTO up (id, updated_at) values (?, ?)  ", new BatchPreparedStatementSetter(){

@Override

public void setValues(PreparedStatement ps, int i) throws SQLException {

Up up = upList.get(i);

ps.setLong(1, up.id);

ps.setTimestamp(4, new Timestamp(up. updateAt));

}


@Override

public int getBatchSize() {

return upList.size();

}

});

Posted by '김용환'
,


java 일반 객체에 Set으로 추가할 때, 특정 필드로 유일성을 보장하려면 hashCode()를 구현해야 한다. (참고로 Comparator(isEqual), compare() 메소드는 sorting 용이다.)


public class Up { private id; // setter, getter public int hashCode() {
return Long.hashCode(id);
} }



테스트 코드


Up up = new Up();
up.id = 1;
Up up2 = new Up();
up2.id = 1;

Set set = Sets.newHashSet();
set.add(up);
set.add(up2);

System.out.println(set);


up 객체에 hashcode() 를 상속/구현하지 않으면 set의 크기는 2가 된다.

Up[id=1..], Up[id=1..]



up 객체에 hashcode()를 추가하면, set의 크기는 1이다.

Up[id=1..]


* HashSet 구현 참조

add 할 때, 객체의 hash 코드를 참조한다.

public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
public V put(K key, V value) {
return putVal(hash(key), key, value, false, true);
}
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}


Posted by '김용환'
,







자주 사용하는 redis cluster 명령어들 


클러스터 접속하는 방법이다. 그냥 redis-cli -p 7000 커맨드로 redis cluster에 접근할 수 없다.

slave 없이 master로 모인 정보이다.


$ ./src/redis-cli  -c -p 7000

> cluster nodes

928190fd... 1.1.1.1:7000 master - 0 1466475134595 2 connected 3277-6553

bb90967f... 1.1.1.2:7000 master - 0 1466475134595 4 connected 9830-13106

d2c52014... 1.1.1.3:7000 master - 0 1466475133995 1 connected 0-3276

7a31e871... 1.1.1.4:7000 master - 0 1466475134995 3 connected 6554-9829

ffc4b321... 1.1.1.5:7000 myself,master - 0 0 5 connected 13107-16383





만약 slave가 있다면, slave 뒤에 master 서버값이 들어가 있는 것을 볼 수 있다.  


> cluster nodes

6b38bb... 1.1.1.1:7379 master - 0 0 25 connected 0-5460                      

7bb78c... 127.0.0.1:7380 master - 0 1449730618304 2 connected 5461-10922       

164888... 127.0.0.1:7381 master - 0 1449730618304 3 connected 10923-16383      

b8b5ee... 127.0.0.1:7382 slave 6b38bb... 0 1449730618304 25 connected  




"키"가 어느 키슬롯에 저장될 지 보고 싶다면, 키 값을 살펴본다.

(keys  커맨드를 사용하려면 클러스터의 key slot를 찾고, 해당 key의 값을 찾는다.)

> cluster keyslot 20000226

(integer) 475

> cluster keyslot a

(integer) 15495




하지만, keys * 커맨드로 전체 키를 찾을 수 없도록 해놯고 SCAN을 쓸 수 있도록 권장하고 있다.


https://github.com/antirez/redis/issues/1962


You can't. You would have to ask each node seperately. But please avoid KEYS * whenever possible. If you really must iterate the whole keyspace of an instance use SCAN.


Btw, this issue tracker should be used for bugs or improvements to the Redis server. For questions like your's please ask on the mailing list or in the irc channel.






key *는 클러스터 중 특정 서버에 있을 때만 볼 수 있다.


> set a a

-> Redirected to slot [15495] located at 172.17.64.45:7000

OK


> set b b

-> Redirected to slot [3300] located at 172.17.64.42:7000

OK


> keys *

1) "b"


> del a

-> Redirected to slot [15495] located at 172.17.64.45:7000

(integer) 1


> del b

-> Redirected to slot [3300] located at 172.17.64.42:7000

(integer) 1





redis cluster : scan에 대한 내부 동작 원리를 보고 싶다면 다음 정보를 확인한다.


http://www.paluch.biz/blog/162-iterate-over-all-keys-in-a-redis-cluster.html






기존 info 명령어처럼 cluster 정보를 확인할 수 있다.


> cluster info

cluster_state:ok

cluster_slots_assigned:16384

cluster_slots_ok:16384

cluster_slots_pfail:0

cluster_slots_fail:0

cluster_known_nodes:5

cluster_size:5

cluster_current_epoch:5

cluster_my_epoch:1

cluster_stats_messages_sent:6824123

cluster_stats_messages_received:6824123







Posted by '김용환'
,