Redis建立

介紹 Redis 是一個開源的in memory key value cache,常用來降低服務內的延遲情況 Redis 支援的data type Strings Lists Sets Hash Sroted sets Streams Geospatial HyperLogLog Bitmaps Bitfields 現在讓我們開始安裝Redis 建立 Redis 建立一個新的folder,命名redis-server 在redis-server目錄底下,建立docker-compose.yml docker-compose.yml 底下輸入 version: '3' services: redis: restart: always container_name: redis image: redis:6.2.7-alpine ports: - 6379:6379 執行docker-compose up -d,redis服務即可啟動 確認redis服務,已經在執行 λ docker exec -it redis sh /data # redis-cli 127.0.0.1:6379> ping PONG 127.0.0.1:6379> exit /data # redis-cli ping PONG /data # 小結 redis 已經安裝完成,下一章節將會開始使用java連接redis 參考連結 Redis

2022-10-30 October Sunday · 1 分鐘 · Tony

Aop(上)

前言 AOP 全名為:Aspect-Oriented Programming,在Java中如何實現呢? 透過Design Pattern 中的Proxy Pattern來實現 透過AspectJ or Spring Aop來實現 本章節主要講Proxy Pattern的實現方式 主要內容 我們有個需求是,需要提升查詢的效能,所以我們的做法是增加Cache Version 1 第一個版本,我們先建立的代碼 建立一個service 和一個repo,從repo 拿取相對應的user public class FindUserService { private final UserRepo userRepo; public FindUserService(final UserRepo userRepo) { this.userRepo = userRepo; } public User find(String username) { return userRepo.findByUsername(username); } } @AllArgsConstructor @NoArgsConstructor @Data @Builder public class User { String username; String password; } public interface UserRepo { User findByUsername(String username); } public class UserAdapter implements UserRepo { private final Map<String, User> userMap; private final ReentrantReadWriteLock lock; public UserAdapter(final Map<String, User> userMap) { this....

2022-05-28 May Saturday · 2 分鐘 · Tony

SSH_Tunnel

前言 使用到 SSH Tunnel 情境 這裡有一台Server,上面架設一個Postgres,因為公司資安的關係,並不對外開啟port:5432 我們目前在Local開發一個服務,需要連線到Server上的Postgres,不太可能每次改完程式,部署上去測試,這樣來回時間會拉很長 主要內容 ssh -L [local_ip]:[local_port]:[host_ip]:[host_port] username@host local_ip :本地ip位置,預設綁定本機 local_port:本地開啟port host_ip:遠端Server ip host_port:遠端要轉發port L: 建立Tunnel Example ssh -L 5432:localhost:5432 tony@123.456.789.10 參考連結 SSH Tunnel 突破防火牆限制

2022-05-27 May Friday · 1 分鐘 · Tony

Node Exporter建立

前言 node exporter是用來監控Linux vm的一個Prometheus Client 提供: CPU 使用率、硬碟使用率… metrics 步驟 安裝Node Exporter在Ubuntu20.04 #!/bin/bash version="${VERSION:-1.2.2}" arch="${ARCH:-linux-amd64}" bin_dir="${BIN_DIR:-/usr/local/bin}" wget "https://github.com/prometheus/node_exporter/releases/download/v$version/node_exporter-$version.$arch.tar.gz" \ -O /tmp/node_exporter.tar.gz mkdir -p /tmp/node_exporter cd /tmp || { echo "ERROR! No /tmp found.."; exit 1; } tar xfz /tmp/node_exporter.tar.gz -C /tmp/node_exporter || { echo "ERROR! Extracting the node_exporter tar"; exit 1; } sudo cp "/tmp/node_exporter/node_exporter-$version.$arch/node_exporter" "$bin_dir" chown root:staff "$bin_dir/node_exporter" sudo cat <<EOF > /etc/systemd/system/node_exporter.service [Unit] Description=Node Exporter After=network.target [Service] Type=simple ExecStart=/usr/local/bin/node_exporter [Install] WantedBy=multi-user....

2021-10-03 October Sunday · 1 分鐘 · Tony

Spring Boot監控(中)

步驟 安裝Prometheus/Grafana 設定Prometheus設定向我們spring boot application位置 # my global config global: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: 'My-Spring-Boot-Application' # Override the global default and scrape targets from this job every 5 seconds....

2021-10-03 October Sunday · 1 分鐘 · Tony

Spring Boot監控(上)

前言 常在河邊走那裡不失鞋,當一個後端工程師,常常會遇到上線Application server突然無法壞掉的問題,因此我們需要一個監控的Server來輔助我們上線的Application,本篇將使用Prometheus監控server當作範例來做為展示 步驟 Spring boot 安裝Prometheus Client 在pom.xml上新增兩個dependency spring-boot-starter-actuator: spring boot內建的監控library micrometer-registry-prometheus: 在spring boot上提供prometheus metrics格式 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency> Spring boot 調整設定檔 在applcation.yml 新增下列設定 management: endpoint: health: show-details: always prometheus: enabled: true endpoints: web: exposure: include: prometheus,health metrics: tags: application: ${spring.application.name} health: diskspace: enabled: true defaults: enabled: false 設定好,啟動spring boot即可在http://:/actuator/prometheus看到metrics 參考連結 Spring boot Spring boot Actuator Micrometer Registry Prometheus

2021-09-22 September Wednesday · 1 分鐘 · Tony

Ngork

介紹 在本機上開發的時候常常遇到需要https和domain name的狀況,例如:Line Bot的webhook測試,這時候使用ngrok就可以解決這個問題,ngork賦予你一個暫時domain name和https 安裝 Windows choco install ngrok Mac brew install ngrok 在本機上登入ngork(使用token認證) ngrok authtoken <token> 使用 ngrok http <Port> 參考連結 ngork

2021-09-21 September Tuesday · 1 分鐘 · Tony

Mongo備份與還原

介紹 在工作上不免要定期備份database的資料與還原datdabase的資料 備份步驟 連線進入mongo mongo -u <username> -p <password> 切換db use admin 磁碟同步與上鎖 db.runCommand({fsync:1,lock:1}) 確認是否上鎖 db.currentOp() 備份資料 mongodump --host <host-ip> --port 27017 --db <database> --authenticationDatabase admin --username <username> --password <password> --out <Path> 解鎖 db.fsyncUnlock() 還原步驟 還原 mongorestore --host <host-ip> --port 27017 --username <username> --password <password> --db <database> <backup file path> 參考連結 Mongo

2021-09-21 September Tuesday · 1 分鐘 · Tony

Sdkman

介紹 SDKMAN是一款基於Linux/Mac的SDK管理工具,可以管理多個版本JDK,也可以安裝與JDK相容的套件 安裝SDKMAN $ curl -s "https://get.sdkman.io" | bash $ source "$HOME/.sdkman/bin/sdkman-init.sh" sdk version > sdkman 5.0.0+51 羅列Java版本 sdk list java 安裝JAVA sdk install java x.y.z-open 移除 sdk uninstall java ... 指定預設JAVA sdk default java 11 參考連結 SDKMAN

2021-09-21 September Tuesday · 1 分鐘 · Tony