Ubuntu的Java開發(fā)環(huán)境基本搭建

原文鏈接: http://yangbingdong.com/2017/ubuntu-install-jdk-ide-tomcat-mysql/

image

前言

最近公司的電腦由于不明原因老是奔潰,重裝過兩次形耗,在家里也比較喜歡折騰系統(tǒng)哥桥,為了不用每次都度娘谷歌,記錄下來激涤,一條龍走過拟糕。博主是搞爪哇開發(fā)的,那么以下搭建針對的是爪哇環(huán)境開發(fā)

安裝JDK以及配置環(huán)境變量

通過Apt安裝

https://linuxconfig.org/how-to-install-java-on-ubuntu-18-04-bionic-beaver-linux

OpenJDK

JDK8:

sudo apt install openjdk-8-jdk

JDK9:

sudo apt install openjdk-9-jdk

JDK11:

sudo apt install openjdk-11-jdk

OracleJDK

sudo add-apt-repository ppa:webupd8team/java && sudo apt update

JDK8:

sudo apt install oracle-java8-set-default

JDK9:

sudo apt install oracle-java9-set-default

手動(dòng)安裝

安裝JDK

安裝之前當(dāng)然是老規(guī)矩地下載jdkOracle JDK官方下載

# 把jdk的文件移動(dòng)到 /usr/local/ 目錄下
sudo mv ~/jdk*.tar.gz /usr/local/
# 解壓文件
cd /usr/local/
# sudo tar -zxvf jdk-8u101-linux-x64.tar.gz
# 創(chuàng)建軟鏈接
sudo ln -s jdk1.8.0_101 jdk

如需更換jdk倦踢,刪除舊版本的軟鏈接送滞,重新創(chuàng)建軟鏈接指向新版即可

sudo rm -rf jdk
sudo ln -s jdk* jdk

配置環(huán)境變量

  • 放到 /usr/local 里面的程序,建議使用系統(tǒng)變量辱挥。
  • 用戶變量
    ~/.profile 文件是用戶的私有配置文件
    ~/.bashrc 是在bash里面使用的私有配置文件犁嗅,優(yōu)先級在 .profile 文件之后
  • 系統(tǒng)變量
    /etc/profile 文件是系統(tǒng)的公用配置文件
    /etc/bash.bashrcbash專用的配置文件,優(yōu)先級在 profile 文件之后
  • 系統(tǒng)變量的配置晤碘,不建議修改前面說到的兩個(gè)文件褂微,而是建議在 /etc/profile.d/ 目錄下,創(chuàng)建一個(gè) .sh 結(jié)尾 的文件园爷。
sudo vi /etc/profile.d/jdk.sh

環(huán)境變量的配置內(nèi)容如下:

  1. 設(shè)置一個(gè)名為JAVA_HOME的變量宠蚂,并且使用export命令導(dǎo)出為環(huán)境變量, 如果不使用 export ,僅在當(dāng)前shell里面有效
export JAVA_HOME=/usr/local/jdk
  1. PATH不需要export童社,因?yàn)樵缭谄渌牡胤角蟛蓿呀?jīng)export過了!叠洗,\$JAVA_HOME 表示引用前面配置的 JAVA_HOME 變量甘改,分隔符一定是冒號旅东,Windows是分號,最后再引用原來的PATH的值
PATH=$JAVA_HOME/bin:$PATH
  1. 配置以后灭抑,可以重新登錄讓配置生效,也可以使用source臨時(shí)加載配置文件抵代。使用source命令加載的配置腾节,僅在當(dāng)前shell有效,關(guān)閉以后失效荤牍。
source /etc/profile.d/jdk.sh
  1. 查看jdk是否安裝成功案腺,一下兩條命令成功則安裝成功
java -version
javac -version
image

安裝Scala環(huán)境

更上面安裝JDK類似

1、去 官網(wǎng) 下載最新地SDK

image

2康吵、解壓到 /usr/local 目錄劈榨,并創(chuàng)建軟鏈接為 scala

3、在 /etc/profile.d 目錄下創(chuàng)建 scala.sh 晦嵌,輸入以下信息:

export SCALA_HOME=/usr/local/scala
PATH=$PATH:$SCALA_HOME/bin

4同辣、查看是否安裝成功

source /etc/profile.d/scala.sh
scala -version
image

安裝IDE

Eclipse

直接在 Eclipse官方網(wǎng)站 下載相關(guān)版本Eclipse
解壓

sudo tar zxvf eclipse-jee-mars-2-linux-gtk-x86_64.tar.gz -C ~/IDE

創(chuàng)建快捷方式
1. 在終端中執(zhí)行如下命令

sudo gedit /usr/share/applications/eclipse.desktop

2. 粘貼并保存如下內(nèi)容(注意更改相應(yīng)的名字和目錄)

[Desktop Entry] 
Name=Eclipse Mars.2 
Type=Application 
Exec=/home/ybd/IDE/eclipse 
Terminal=false 
Icon=/home/ybd/IDE/icon.xpm 
Comment=Integrated Development Environment 
NoDisplay=false 
Categories=Development;IDE; 
Name[en]=Eclipse Mars.2

通用設(shè)置
window → preferences →

  • 設(shè)置字體:general → appearance → color and font → basic → text font
  • 編輯器背景顏色:general → editors → text editors → background color → RGB:85,123,208,#C7EDCC
  • 工作空間字符編碼:general → workspace
  • 作者簽名:java → code style → code templates → types 簽名快捷鍵:alt + shift + j

MyEclipse

MyEclipse安裝請看:Ubuntu16.04下MyEclipse安裝與破解

IntelliJ IDEA

之前聽說過IDE拷姿,都是大公司用的,并沒有用過
日后再研究補(bǔ)上
官網(wǎng):http://www.jetbrains.com/idea/

新公司好多大牛旱函,用的都是IDEA响巢,于是乎“近墨者黑”,那么既然有機(jī)會(huì)跟大牛接觸棒妨,我也開始真正意義上的學(xué)習(xí)IDEA了

安裝

進(jìn)過查閱踪古,我選擇官方的盒子下載:http://www.jetbrains.com/toolbox/app/?fromMenu
優(yōu)點(diǎn)是可以自動(dòng)更新

image

激活

博主使用授權(quán)服務(wù)器,可以自己搭建券腔,詳情請看 這里

部署Tomcat

若是服務(wù)器版切換root用戶解壓到 /opt/ 或者 /usr/local/
直接運(yùn)行tomcat目錄下bin/start.sh即可開啟伏穆,前提是配置好JDK

桌面版?zhèn)€人使用就解壓到/home/{user}目錄下就可以了

安裝MySQL以及GUI工具

基于Docker安裝

拉取鏡像

docker pull mysql:5.7

運(yùn)行實(shí)例

MYSQL=/home/ybd/data/docker/mysql && \
docker run --name=mysql -p 3306:3306  \
-v $MYSQL/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root -d mysql \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci \
--sql-mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION \
--lower-case-table-names=1

終端鏈接

sudo apt-get install mysql-client

// 鏈接
mysql -h 127.0.0.1 -P 3306 -u root -p
image

手動(dòng)折騰安裝

mysql5.7以上版本為例 --> mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz

必須要先安裝依賴的libaio才能正常按照mysql

sudo apt-get update
sudo apt-get install libaio-dev

創(chuàng)建用戶組以及用戶

sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql

盡量把mysql安裝到/usr/local目錄下面

cd /usr/local
sudo cp /home/data/software/DataBase/mysql/mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz ./
<-- 解壓縮安裝包 -->
sudo tar zxvf mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz
<-- 創(chuàng)建軟連接 -->
sudo ln -s mysql-5.7.10-linux-glibc2.5-x86_64 mysql

創(chuàng)建必須的目錄和進(jìn)行授權(quán)

cd mysql
sudo mkdir mysql-files
sudo chmod 770 mysql-files
sudo chown -R mysql .
sudo chgrp -R mysql .

執(zhí)行安裝腳本

sudo bin/mysqld --initialize --user=mysql   
sudo bin/mysql_ssl_rsa_setup

在初始化的時(shí)候,一定要仔細(xì)看屏幕纷纫,最后大概有一行:[Note] A temporary password is generated for root@localhost: kklNBwkei1.t
注意這是root的臨時(shí)密碼,記錄下來以便后面修改密碼蜈出!

重新對一些主要的目錄進(jìn)行授權(quán),確保安全性

sudo chown -R root .
sudo chown -R mysql data mysql-files

從默認(rèn)的模板創(chuàng)建配置文件涛酗,需要在文件中增加 skip-grant-tables 铡原,以便啟動(dòng)mysql以后修改root用戶的密碼

sudo cp support-files/my-default.cnf ./my.cnf 

測試啟動(dòng),修改密碼

# 后臺(tái)啟動(dòng)mysql
sudo bin/mysqld_safe --user=mysql &  
# 啟動(dòng)
./bin/mysql -u root -p

方式一

因?yàn)榍懊嫘薷牧?code>my.cnf文件商叹,增加了 skip-grant-tables 參數(shù)燕刻,所以不需要用戶名即可登陸
進(jìn)去后立即修改root用戶的密碼,密碼的字段是 authentication_string

update mysql.user set authentication_string=password('root') where user='root';

修改密碼后剖笙,再把my.cnf里面的 skip-grant-tables 去掉

方式二

修改密碼也可以使用安裝到時(shí)候提示到隨機(jī)密碼進(jìn)行登錄卵洗,然后使用下面到命令修改密碼。
建議用下面的方式設(shè)置數(shù)據(jù)庫的密碼

alter user user() identified by 'root';

復(fù)制啟動(dòng)腳本到合適的位置

sudo cp support-files/mysql.server /etc/init.d/mysql

(Optional)增加自動(dòng)啟動(dòng)

sudo update-rc.d -f mysql defaults

增加mysql命令的路徑到PATH環(huán)境變量

sudo touch /etc/profile.d/mysql.sh
sudo chmod 777 /etc/profile.d/mysql.sh
sudo echo "PATH=/usr/local/mysql/bin:\$PATH" > /etc/profile.d/mysql.sh
sudo chmod 644 /etc/profile.d/mysql.sh

<font color=red>到此弥咪,mysql的安裝基本完成</font>

修復(fù)亂碼以及忽略大小寫过蹂,找到MySQL文件里的my.cnf在末尾添加

lower_case_table_names=1
character_set_server=utf8

查看以及修改MySQL字符編碼

查看

mysql> show variables like 'collation_%';

mysql> show variables like 'character_set_%';

修改

mysql> set character_set_client=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_connection=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_database=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_results=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_server=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_system=utf8;
Query OK, 0 rows affected (0.01 sec)

mysql> set collation_connection=utf8_general_ci;
Query OK, 0 rows affected (0.01 sec)

mysql> set collation_database=utf8mb4_general_ci;
Query OK, 0 rows affected (0.01 sec)

mysql> set collation_server=utf8mb4_general_ci;
Query OK, 0 rows affected (0.01 sec)

如果登錄mysql出現(xiàn)以下錯(cuò)誤

image

則可能配置未加載或服務(wù)未啟動(dòng),請重啟系統(tǒng)聚至,然后啟動(dòng)mysql服務(wù)

sudo service mysql start

結(jié)束mysql服務(wù)

sudo service mysql stop

開啟遠(yuǎn)程鏈接

鏈接mysql后:

use mysql

// 下面兩個(gè)root分別是帳號密碼
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
// 刷新特權(quán)
flush privileges;
// 查看修改是否成功
select host,user from user;

Mysql GUI

傳統(tǒng)終端客戶端

sudo apt-get install mysql-client

// 鏈接
mysql -h 127.0.0.1 -P 3306 -u root -p

智能補(bǔ)全命令客戶端

這個(gè)一個(gè)智能補(bǔ)全并且高亮語法的終端客戶端 mycli

image

安裝:

sudo apt install mycli

使用:

$ mycli --help
Usage: mycli [OPTIONS] [DATABASE]

  A MySQL terminal client with auto-completion and syntax highlighting.

  Examples:
    - mycli my_database
    - mycli -u my_user -h my_host.com my_database
    - mycli mysql://my_user@my_host.com:3306/my_database

Options:
  -h, --host TEXT               Host address of the database.
  -P, --port INTEGER            Port number to use for connection. Honors
                                $MYSQL_TCP_PORT.
  -u, --user TEXT               User name to connect to the database.
  -S, --socket TEXT             The socket file to use for connection.
  -p, --password TEXT           Password to connect to the database.
  --pass TEXT                   Password to connect to the database.
  --ssl-ca PATH                 CA file in PEM format.
  --ssl-capath TEXT             CA directory.
  --ssl-cert PATH               X509 cert in PEM format.
  --ssl-key PATH                X509 key in PEM format.
  --ssl-cipher TEXT             SSL cipher to use.
  --ssl-verify-server-cert      Verify server's "Common Name" in its cert
                                against hostname used when connecting. This
                                option is disabled by default.
  -v, --version                 Output mycli's version.
  -D, --database TEXT           Database to use.
  -R, --prompt TEXT             Prompt format (Default: "\t \u@\h:\d> ").
  -l, --logfile FILENAME        Log every query and its results to a file.
  --defaults-group-suffix TEXT  Read MySQL config groups with the specified
                                suffix.
  --defaults-file PATH          Only read MySQL options from the given file.
  --myclirc PATH                Location of myclirc file.
  --auto-vertical-output        Automatically switch to vertical output mode
                                if the result is wider than the terminal
                                width.
  -t, --table                   Display batch output in table format.
  --csv                         Display batch output in CSV format.
  --warn / --no-warn            Warn before running a destructive query.
  --local-infile BOOLEAN        Enable/disable LOAD DATA LOCAL INFILE.
  --login-path TEXT             Read this path from the login file.
  -e, --execute TEXT            Execute command and quit.
  --help                        Show this message and exit.

Navicat Premium

破解

  1. 官網(wǎng)下載對應(yīng)系統(tǒng)版本酷勺,這里選擇linux版本,并解壓

  2. Github下載注冊機(jī)扳躬,并解壓

    CHS - > Navicat簡體中文版脆诉。
    CHT - > Navicat繁體中文版。
    ENG - > Navicat英文版

  3. 安裝wine

sudo add-apt-repository ppa:ubuntu-wine/ppa
sudo apt-get update
sudo apt-get install wine1.8
  1. 進(jìn)入注冊機(jī)解壓目錄贷币,在此目錄下打開命令窗口輸入

    wine navicat-patcher.exe <navicat.exe path>
    

    <navicat.exe path>就是navicat.exe的路徑击胜,最好是完整的。

    可能會(huì)出現(xiàn)N個(gè)error日志信息不用鳥他 能正常success就行
    之后在當(dāng)前目錄下會(huì)生成對應(yīng)的私鑰文件RegPrivateKey.pem

  2. 接著再用navicat-keygen.exe生成注冊碼役纹,使用命令

    wine navicat-keygen.exe  RegPrivateKey.pem
    

    先填名字和組織名稱偶摔,之后會(huì)生成一個(gè)序列號,并要求填入請求碼促脉。

    打開navicat辰斋,然后斷網(wǎng)

  3. 在注冊界面填入序列號信不,然后激活。這時(shí)會(huì)提示要手動(dòng)激活亡呵,ok就選這個(gè)
    接下來會(huì)有請求碼抽活,復(fù)制然后貼入控制臺(tái),就可以得到注冊碼了锰什。

image
image

創(chuàng)建快捷方式

cd /usr/share/applications/
sudo touch navicat.desktop
sudo vi navicat.desktop

加入以下內(nèi)容

[Desktop Entry]
Encoding=UTF-8
Name=Navicat
Comment=The Smarter Way to manage dadabase
Exec=/bin/sh "/home/ybd/Data/soft/application/navicat112_mysql_en_x64/start_navicat"
Icon=/home/ybd/Data/soft/application/navicat112_mysql_en_x64/Navicat/navicat.png
Categories=Application;Database;MySQL;navicat
Version=1.0
Type=Application
Terminal=0

參考:https://www.52pojie.cn/thread-705020-1-1.html

后臺(tái)運(yùn)行

nohup /home/ybd/data/application/navicat/navicat120_premium_en_x64/start_navicat > /dev/null 2>&1 &

安裝Redis

安裝

終端執(zhí)行:

sudo apt-get update
sudo apt-get install redis-server

啟動(dòng)

redis-server

查看是否啟動(dòng)成功

redis-cli

HelloWorld

set k1 helloword
get k1

配置相關(guān)

/etc/redis:存放redis配置文件
/var/redis/端口號:存放redis的持久化文件

通過下面的命令停止/啟動(dòng)/重啟redis:

/etc/init.d/redis-server stop
/etc/init.d/redis-server start
/etc/init.d/redis-server restart

如果是通過源碼安裝的redis下硕,則可以通過redis的客戶端程序redis-clishutdown命令來重啟redis

redis-cli -h 127.0.0.1 -p 6379 shutdown

如果上述方式都沒有成功停止redis,則可以使用終極武器 kill -9

開啟遠(yuǎn)程訪問

找到redis.conf文件汁胆,一般在/etc下面:

?  ~ sudo find /etc -name redis.conf
/etc/redis/redis.conf
?  ~ sudo gedit /etc/redis/redis.conf

找到bind 127.0.0.1注釋掉
注釋掉本機(jī),局域網(wǎng)內(nèi)的所有計(jì)算機(jī)都能訪問梭姓。
band localhost 只能本機(jī)訪問,局域網(wǎng)內(nèi)計(jì)算機(jī)不能訪問。
bind 局域網(wǎng)IP 只能局域網(wǎng)內(nèi)IP的機(jī)器訪問, 本地localhost都無法訪問嫩码。

博主選擇將bind 127.0.0.1 改成了bind 0.0.0.0

開啟發(fā)布訂閱監(jiān)聽

還是修改redis.conf文件誉尖,找到notify-keyspace-events "",修改為notify-keyspace-events Ex或者notify-keyspace-events AKE铸题,然后重啟铡恕。

附加1:基于Docker

拉取鏡像:

docker pull redis:latest

運(yùn)行實(shí)例:

REDIS=/home/ybd/data/docker/redis && docker run -p 6379:6379 --restart=always -v $REDIS/redis.conf:/usr/local/etc/redis/redis.conf -v $REDIS/data:/data --name redis -d redis redis-server /usr/local/etc/redis/redis.conf --appendonly yes

安裝鏈接工具:

sudo apt-get install redis-tools

// 鏈接
redis-cli

附加2:Redis常用命令

連接操作命令

  • quit:關(guān)閉連接(connection)
  • auth:簡單密碼認(rèn)證
  • help cmd: 查看cmd幫助,例如:help quit

持久化

  • save:將數(shù)據(jù)同步保存到磁盤
  • bgsave:將數(shù)據(jù)異步保存到磁盤
  • lastsave:返回上次成功將數(shù)據(jù)保存到磁盤的Unix時(shí)戳
  • shutdown:將數(shù)據(jù)同步保存到磁盤丢间,然后關(guān)閉服務(wù)

遠(yuǎn)程服務(wù)控制

  • info:提供服務(wù)器的信息和統(tǒng)計(jì)
  • monitor:實(shí)時(shí)轉(zhuǎn)儲(chǔ)收到的請求
  • slaveof:改變復(fù)制策略設(shè)置
  • config:在運(yùn)行時(shí)配置Redis服務(wù)器

對key操作的命令

  • exists(key):確認(rèn)一個(gè)key是否存在
  • del(key):刪除一個(gè)key
  • type(key):返回值的類型
  • keys(pattern):返回滿足給定pattern的所有key
  • randomkey:隨機(jī)返回key空間的一個(gè)
  • keyrename(oldname, newname):重命名key
  • dbsize:返回當(dāng)前數(shù)據(jù)庫中key的數(shù)目
  • expire:設(shè)定一個(gè)key的活動(dòng)時(shí)間(s)
  • ttl:獲得一個(gè)key的活動(dòng)時(shí)間
  • select(index):按索引查詢
  • move(key, dbindex):移動(dòng)當(dāng)前數(shù)據(jù)庫中的key到dbindex數(shù)據(jù)庫
  • flushdb:刪除當(dāng)前選擇數(shù)據(jù)庫中的所有key
  • flushall:刪除所有數(shù)據(jù)庫中的所有key

String

  • set(key, value):給數(shù)據(jù)庫中名稱為key的string賦予值value
  • get(key):返回?cái)?shù)據(jù)庫中名稱為key的string的value
  • getset(key, value):給名稱為key的string賦予上一次的value
  • mget(key1, key2,…, key N):返回庫中多個(gè)string的value
  • setnx(key, value):添加string探熔,名稱為key,值為value
  • setex(key, time, value):向庫中添加string烘挫,設(shè)定過期時(shí)間time
  • mset(key N, value N):批量設(shè)置多個(gè)string的值
  • msetnx(key N, value N):如果所有名稱為key i的string都不存在
  • incr(key):名稱為key的string增1操作
  • incrby(key, integer):名稱為key的string增加integer
  • decr(key):名稱為key的string減1操作
  • decrby(key, integer):名稱為key的string減少integer
  • append(key, value):名稱為key的string的值附加value
  • substr(key, start, end):返回名稱為key的string的value的子串

List

  • rpush(key, value):在名稱為key的list尾添加一個(gè)值為value的元素
  • lpush(key, value):在名稱為key的list頭添加一個(gè)值為value的 元素
  • llen(key):返回名稱為key的list的長度
  • lrange(key, start, end):返回名稱為key的list中start至end之間的元素
  • ltrim(key, start, end):截取名稱為key的list
  • lindex(key, index):返回名稱為key的list中index位置的元素
  • lset(key, index, value):給名稱為key的list中index位置的元素賦值
  • lrem(key, count, value):刪除count個(gè)key的list中值為value的元素
  • lpop(key):返回并刪除名稱為key的list中的首元素
  • rpop(key):返回并刪除名稱為key的list中的尾元素
  • blpop(key1, key2,… key N, timeout):lpop命令的block版本诀艰。
  • brpop(key1, key2,… key N, timeout):rpop的block版本。
  • rpoplpush(srckey, dstkey):返回并刪除名稱為srckey的list的尾元素饮六,并將該元素添加到名稱為dstkey的list的頭部

Set

  • sadd(key, member):向名稱為key的set中添加元素member
  • srem(key, member) :刪除名稱為key的set中的元素member
  • spop(key) :隨機(jī)返回并刪除名稱為key的set中一個(gè)元素
  • smove(srckey, dstkey, member) :移到集合元素
  • scard(key) :返回名稱為key的set的基數(shù)
  • sismember(key, member) :member是否是名稱為key的set的元素
  • sinter(key1, key2,…key N) :求交集
  • sinterstore(dstkey, (keys)) :求交集并將交集保存到dstkey的集合
  • sunion(key1, (keys)) :求并集
  • sunionstore(dstkey, (keys)) :求并集并將并集保存到dstkey的集合
  • sdiff(key1, (keys)) :求差集
  • sdiffstore(dstkey, (keys)) :求差集并將差集保存到dstkey的集合
  • smembers(key) :返回名稱為key的set的所有元素
  • srandmember(key) :隨機(jī)返回名稱為key的set的一個(gè)元素

Hash

  • hset(key, field, value):向名稱為key的hash中添加元素field
  • hget(key, field):返回名稱為key的hash中field對應(yīng)的value
  • hmget(key, (fields)):返回名稱為key的hash中field i對應(yīng)的value
  • hmset(key, (fields)):向名稱為key的hash中添加元素field
  • hincrby(key, field, integer):將名稱為key的hash中field的value增加integer
  • hexists(key, field):名稱為key的hash中是否存在鍵為field的域
  • hdel(key, field):刪除名稱為key的hash中鍵為field的域
  • hlen(key):返回名稱為key的hash中元素個(gè)數(shù)
  • hkeys(key):返回名稱為key的hash中所有鍵
  • hvals(key):返回名稱為key的hash中所有鍵對應(yīng)的value
  • hgetall(key):返回名稱為key的hash中所有的鍵(field)及其對應(yīng)的value

附加3:慢查詢查看

Redis 通過 slowlog-log-slower-thanslowlog-max-len 分別配置慢查詢的閾值其垄,以及慢查詢記錄的日志長度。 slowlog-log-slower-than 默認(rèn)值 10*1000 微秒卤橄,當(dāng)命令執(zhí)行時(shí)間查過設(shè)定時(shí)绿满,那么將會(huì)被記錄在慢查詢?nèi)罩局小H绻?code>slowlog-log-slower-than=0會(huì)記錄所有的命令虽风,slowlog-log-slower-than<0 對于任何命令都不會(huì)進(jìn)行記錄棒口。

參數(shù)設(shè)定:

config set slowlog-log-slower-than 20000
config set slowlog-max-len 1000
config rewrite

如果要 Redis 將配置持久化到本地配置文件寄月,需要執(zhí)行 config rewrite 命令.

獲取慢查詢?nèi)罩?

slowlog get [n] // n 表示返回的日志記錄條數(shù)

每個(gè)慢查詢?nèi)罩居?4 個(gè)屬性組成辜膝,分別是慢查詢?nèi)罩镜臉?biāo)識(shí) id、發(fā)生時(shí)間戳漾肮、命令耗時(shí)厂抖、執(zhí)行命令和參數(shù),慢查詢列表如下:

127.0.0.1:6378> slowlog get
1) 1) (integer) 0                       //標(biāo)識(shí) id
   2) (integer) 1501750261      //時(shí)間戳
   3) (integer) 19                      // 命令耗時(shí)
   4) 1) "config"                        // 執(zhí)行命令
      2) "set"
      3) "slowlog-log-slower-than"
      4) "0"
127.0.0.1:6378> 

獲取慢查詢?nèi)罩玖斜懋?dāng)前的長度:

127.0.0.1:6378> slowlog len
(integer) 2
127.0.0.1:6378> 

慢查詢最佳實(shí)踐

  • slowlog-max-len 配置建議:線上建議調(diào)大慢查詢列表克懊,記錄慢查詢時(shí) Redis 會(huì)對長命令做截?cái)嗖僮鞒栏ǎ⒉粫?huì)占用大量內(nèi)存七蜘。增大慢查詢列表可以減緩慢查詢被剔除的可能,例如線上可設(shè)置為 1000 以上墙懂。
  • slowlog-log-slower-than 配置建議:默認(rèn)值超過 10 毫秒判定為慢查詢橡卤,需要根據(jù) Redis 并發(fā)量調(diào)整該值。由于 Redis 采用單線程響應(yīng)命令损搬,對于高流量的場景碧库,如果命令執(zhí)行時(shí)間在 1 毫秒以上,那么 Redis 最多可支撐 OPS 不到 1000巧勤。因此對于高 OPS (operation per second)場景的 Redis 建議設(shè)置為 1 毫秒嵌灰。
  • 慢查詢只記錄命令執(zhí)行時(shí)間,并不包括命令排隊(duì)和網(wǎng)絡(luò)傳輸時(shí)間颅悉。因此客戶端執(zhí)行命
    令的時(shí)間會(huì)大于命令實(shí)際執(zhí)行時(shí)間沽瞭。因?yàn)槊顖?zhí)行排隊(duì)機(jī)制,慢查詢會(huì)導(dǎo)致其他命令級聯(lián)阻塞剩瓶,因此當(dāng)客戶端出現(xiàn)請求超時(shí)驹溃,需要檢查該時(shí)間點(diǎn)是否有對應(yīng)的慢查詢,從
    而分析出是否為慢查詢導(dǎo)致的命令級聯(lián)阻塞延曙。
  • 由于慢查詢?nèi)罩臼且粋€(gè)先進(jìn)先出的隊(duì)列吠架,也就是說如果慢查詢比較多的情況下,可能
    會(huì)丟失部分慢查詢命令搂鲫,為了防止這種情況發(fā)生傍药,可以定期執(zhí)行 slow get 命令將慢查詢?nèi)罩境志没狡渌鎯?chǔ)中(例如 MySQL),然后可以制作可視化界面進(jìn)行查詢魂仍。

安裝Maven

下載

官網(wǎng)下載或者點(diǎn)擊鏡像獲取

配置

1拐辽、下載解壓到自己的指定的目錄后,將命令放到/bin下:

sudo ln -s /自定義目錄/apache-maven-3.3.9/bin/mvn /bin/mvn

2擦酌、添加環(huán)境變量
老規(guī)矩俱诸,在/etc/profile.d下創(chuàng)建一個(gè)maven.sh的文件:

sudo touch /etc/profile.d/maven.sh
sudo vi /etc/profile.d/maven.sh

輸入以下內(nèi)容:

export M2_HOME=/自定義目錄/apache-maven-3.3.9
export PATH=${M2_HOME}/bin:$PATH

然后source一下:

source /etc/profile.d/maven.sh

查看是否配置成功:

mvn -v

輸入內(nèi)容如下:

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /home/ybd/Data/application/maven/apache-maven-3.3.9
Java version: 1.8.0_65, vendor: Oracle Corporation
Java home: /usr/local/jdk1.8.0_65/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "4.4.0-67-generic", arch: "amd64", family: "unix"

淘寶鏡像

<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf> 
    </mirror>
</mirrors>

MongoDB

安裝

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6

#下面命令針對ubuntu16.04版本,在其他ubuntu版本系統(tǒng)請查看MongoDB官網(wǎng)
echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

sudo apt-get update

sudo apt-get install -y mongodb-org

安裝完成后查看版本:

mongo -version
image

啟動(dòng)赊舶、重新啟動(dòng)和關(guān)閉mongodb命令:

sudo service mongod start
sudo service mongod stop
sudo service mongod restart

查看是否啟動(dòng)成功:

sudo cat /var/log/mongodb/mongod.log

mongod.log 日志中若出現(xiàn)如下信息睁搭,說明啟動(dòng)成功:

[initandlisten] waiting for connections on port 27017

MongoDB 卸載

刪除 mongodb 包

sudo apt-get purge mongodb-org*

刪除 MongoDB 數(shù)據(jù)庫和日志文件

sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb

MongoDB 使用

shell命令模式
輸入mongo進(jìn)入shell命令模式,默認(rèn)連接的數(shù)據(jù)庫是test數(shù)據(jù)庫笼平,命令如下:

?  ~ mongo

常用操作命令:

show dbs:顯示數(shù)據(jù)庫列表
show collections:顯示當(dāng)前數(shù)據(jù)庫中的集合(類似關(guān)系數(shù)據(jù)庫中的表table)
show users:顯示所有用戶
use yourDB:切換當(dāng)前數(shù)據(jù)庫至yourDB
db.help() :顯示數(shù)據(jù)庫操作命令
db.yourCollection.help() :顯示集合操作命令园骆,yourCollection是集合名

官方文檔:https://docs.mongodb.com/master/tutorial/install-mongodb-on-ubuntu/

GUI客戶端

Robomongo

RabbitMQ

選擇Docker安裝。寓调。锌唾。不折騰了。。

docker pull rabbitmq:3-management
docker run -d --name rabbitmq -p 5673:5672 -p 15673:15672 --restart=always rabbitmq:3-management

(注意版本晌涕,是management)

瀏覽器打開localhost:15673滋捶,默認(rèn)帳號密碼都是guest

image

集群:http://www.reibang.com/p/624871c646b9

Kafka&Zookeeper集群

docker-compose.yml:

version: '3'
services:
  kafka1:
    image: wurstmeister/kafka:1.0.0
    depends_on:
      - zoo1
      - zoo2
      - zoo3
    ports:
      - "9092:9092"
    environment:
      KAFKA_LOG_DIRS: /kafka
      KAFKA_BROKER_ID: 1
      KAFKA_CREATE_TOPICS: test:6:1
      KAFKA_ADVERTISED_HOST_NAME: 192.168.6.113
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181

  kafka2:
    image: wurstmeister/kafka:1.0.0
    depends_on:
      - zoo1
      - zoo2
      - zoo3
    ports:
      - "9093:9092"
    environment:
      KAFKA_LOG_DIRS: /kafka
      KAFKA_BROKER_ID: 2
      KAFKA_ADVERTISED_HOST_NAME: 192.168.6.113
      KAFKA_ADVERTISED_PORT: 9093
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181

  kafka3:
    image: wurstmeister/kafka:1.0.0
    depends_on:
      - zoo1
      - zoo2
      - zoo3
    ports:
      - "9094:9092"
    environment:
      KAFKA_LOG_DIRS: /kafka
      KAFKA_BROKER_ID: 3
      KAFKA_ADVERTISED_HOST_NAME: 192.168.6.113
      KAFKA_ADVERTISED_PORT: 9094
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181

  zoo1:
    image: zookeeper:latest
    environment:
      ZOO_MY_ID: 1
      SERVERS: zoo1,zoo2,zoo3
    ports:
      - "2181:2181"
      - "2888"
      - "3888"

  zoo2:
    image: zookeeper:latest
    environment:
      ZOO_MY_ID: 2
      SERVERS: zoo1,zoo2,zoo3
    ports:
      - "2182:2181"
      - "2888"
      - "3888"

  zoo3:
    image: zookeeper:latest
    environment:
      ZOO_MY_ID: 3
      SERVERS: zoo1,zoo2,zoo3
    ports:
      - "2183:2181"
      - "2888"
      - "3888"

啟動(dòng):

docker-compose up -d

測試:

#創(chuàng)建主題
docker exec -it ${CONTAINER_ID} /opt/kafka/bin/kafka-topics.sh --create --zookeeper zoo1:2181 --replication-factor 1 --partitions 1 --topic test

#查看topic列表
docker exec -it ${CONTAINER_ID} /opt/kafka/bin/kafka-topics.sh --list --zookeeper zoo1:2181

#生產(chǎn)者
docker exec -it ${CONTAINER_ID} /opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

#消費(fèi)者
docker exec -it ${CONTAINER_ID} /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

搭建ngrok配置

image

ngrok 是一個(gè)反向代理,通過在公共的端點(diǎn)和本地運(yùn)行的 Web 服務(wù)器之間建立一個(gè)安全的通道余黎。ngrok 可捕獲和分析所有通道上的流量重窟,便于后期分析和重放【宀疲可以被使用來進(jìn)行微信借口的本地調(diào)試亲族。在ngrok被墻之后,我們需要通過ngrok開源的源碼自行搭建ngrok服務(wù)可缚。

參考地址:Ubuntu下配置安裝ngrok
搞了一上午霎迫,服務(wù)運(yùn)行起來了,客戶端也運(yùn)行起來了帘靡,瀏覽器就是訪問不到V!
不知道是不是因?yàn)閭€(gè)人電腦沒有域名所以才訪問不到描姚,日后再深究涩赢。
無奈,還好互聯(lián)網(wǎng)開源精神無處不在轩勘,某大神搭建的ngrok:
http://www.qydev.com/
客戶端和教程都在里面哦筒扒。

Update:Ngrok已搭建成功~ ,記錄于self-hosted-build-ngrok-server

其他tunnel的代理服務(wù)器
natapp.cn
www.ngrok.cc

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绊寻,一起剝皮案震驚了整個(gè)濱河市花墩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌澄步,老刑警劉巖冰蘑,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異村缸,居然都是意外死亡祠肥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門梯皿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仇箱,“玉大人,你說我怎么就攤上這事东羹〖燎牛” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵百姓,是天一觀的道長渊额。 經(jīng)常有香客問我,道長垒拢,這世上最難降的妖魔是什么旬迹? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮求类,結(jié)果婚禮上奔垦,老公的妹妹穿的比我還像新娘。我一直安慰自己尸疆,他們只是感情好椿猎,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著寿弱,像睡著了一般犯眠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上症革,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天筐咧,我揣著相機(jī)與錄音,去河邊找鬼噪矛。 笑死量蕊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的艇挨。 我是一名探鬼主播残炮,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缩滨!你這毒婦竟也來了势就?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤脉漏,失蹤者是張志新(化名)和其女友劉穎蛋勺,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸠删,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抱完,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了刃泡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巧娱。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖烘贴,靈堂內(nèi)的尸體忽然破棺而出禁添,到底是詐尸還是另有隱情,我是刑警寧澤桨踪,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布老翘,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏铺峭。R本人自食惡果不足惜墓怀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卫键。 院中可真熱鬧傀履,春花似錦、人聲如沸莉炉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽絮宁。三九已至梆暮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绍昂,已是汗流浹背啦粹。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留治专,地道東北人卖陵。 一個(gè)月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像张峰,于是被迫代替她去往敵國和親泪蔫。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容