2020年05月20日(Network Valentine’s Day),很開心,喜歡的人的甜言蜜語、鮮花禮品不算什麼,今日是工資發放日纔是真理,叮!
來一張《挪威的森林》劇照:
再煽情的來一段文中的經典語醒醒神:
正值青春年華的我們,總會一次次不知覺望向遠方,對遠方的道路充滿憧憬,儘管忽隱忽現,充滿迷茫。有時候身邊就像被濃霧緊緊包圍,那種迷茫和無助只有自己能懂。儘管有點孤獨,儘管帶着迷茫和無奈,但我依然勇敢地面對,因爲這就是我的青春,不是別人的,只屬於我的。
不要因爲寂寞隨便牽手,然後依賴上,人自由自在多好,縱使漂泊,那種經歷也好過牢獄般的生活,所以我刻意不讓自己對網絡太依賴,對失去的人也保持淡然的態度,數千個擦肩而過中,你給誰機會誰就和你有緣分,縱沒有甲,也會有乙。
言歸正傳,轉彎正題Redis:
1. Redis介紹
Redis是一個開源免費的(BSD許可)、高性能的key-value數據庫,內存存儲的數據結構服務器,可用作數據庫,高速緩存和消息隊列代理。跟Memcached類似,不過數據可以持久化,而且支持的數據類型很豐富,它支持字符串、哈希表、列表、集合、有序集合,位圖,hyperloglogs等數據類型。內置複製、Lua腳本、LRU收回、事務以及不同級別磁盤持久化功能,同時通過Redis Sentinel提供高可用,通過Redis Cluster提供自動分區。
Redis所有數據都是保存在內存中,然後不定期的通過異步方式保存到磁盤上(這稱爲“半持久化模式”);也可以把每一次數據變化都寫入到一個append only file(aof)裏面(稱爲“全持久化模式”),官方教程:https://www.redis.net.cn/tutorial/3501.html
或者黃健宏編譯的參考:http://redisdoc.com/。
Redis與其他key - value緩存產品有以下三個特點:
- Redis支持數據的持久化,可以將內存中的數據保持在磁盤中,重啓的時候可以再次加載進行使用;
- Redis不僅僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲;
- Redis支持數據的備份,即master-slave模式的數據備份。
2. Redis 5.0.4安裝使用
Redis的代碼遵循ANSI-C編寫,可以在所有POSIX系統(如Linux, *BSD, Mac OS X, Solaris等)上安裝運行,而且Redis並不依賴任何非標準庫,也沒有編譯參數必需添加,Redis的安裝簡單易上手。
[root@chengyu ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
1. 下載解壓Redis
Redis可以到它的官網:http://www.redis.cn/進行下載:
[root@chengyu ~]# mkdir -p /home/softwares/nosql
[root@chengyu ~]# cd /home/softwares/nosql/
[root@chengyu nosql]# wget http://download.redis.io/releases/redis-5.0.4.tar.gz
Redis可以解壓至任何目錄,一個make安裝即可獲得執行、配置文件。
[root@chengyu nosql]# tar xzf redis-5.0.4.tar.gz
[root@chengyu nosql]# cd redis-5.0.4
2. 編譯
可以直接make,但是建議先make test確認當前系統環境與Redis 5.0.4適配:
[root@chengyu redis-5.0.4]# make
cd src && make all
make[1]: Entering directory `/home/softwares/nosql/redis-5.0.4/src'
Hint: It's a good idea to run 'make test' ;)
make[1]: Leaving directory `/home/softwares/nosql/redis-5.0.4/src'
所以還是先make test:
[root@chengyu redis-5.0.4]# make test
cd src && make test
make[1]: Entering directory `/home/softwares/nosql/redis-5.0.4/src'
You need tcl 8.5 or newer in order to run the Redis test
make[1]: *** [test] Error 1
make[1]: Leaving directory `/home/softwares/nosql/redis-5.0.4/src'
make: *** [test] Error 2
報錯提示:需要tcl 8.5或者更高版本的tcl來運行Redis test
解決:工具命令語言(Tcl:Tool Command Language)是一種解釋性語言,可在 Unix、Windows 和 Apple Macintosh 操作系統上跨平臺運行,並且是該語言的非常可移植的解釋器,Tcl具有可嵌入性和可擴展性,自1988年由John Ousterhout創建以來已被廣泛使用,可以直接yum install tcl安裝使用,也可以自行下載安裝:
[root@chengyu redis-5.0.4]# wget -P /home/softwares/nosql/ http://downloads.sourceforge.net/tcl/tcl8.6.8-src.tar.gz
[root@chengyu redis-5.0.4]# ll /home/softwares/nosql/
-rw-r--r-- 1 root root 9793786 Dec 22 2017 tcl8.6.8-src.tar.gz
[root@chengyu redis-5.0.4]# tar xzvf /home/softwares/nosql/tcl8.6.8-src.tar.gz -C /home/softwares/nosql/
[root@chengyu tcl8.6.8]# cd /home/softwares/nosql/tcl8.6.8/unix/
[root@chengyu unix]# ./configure
configure: creating ./config.status
config.status: creating Makefile
config.status: creating dltest/Makefile
config.status: creating tclConfig.sh
config.status: creating tcl.pc
[root@chengyu unix]# make
gcc -pipe -O2 -fomit-frame-pointer -DNDEBUG -Wall -fPIC -Wl,--export-dynamic -shared -o libthread2.8.2.so threadNs.o threadCmd.o threadSvCmd.o threadSpCmd.o threadPoolCmd.o psGdbm.o psLmdb.o threadSvListCmd.o threadSvKeylistCmd.o tclXkeylist.o threadUnix.o -L/home/softwares/nosql/tcl8.6.8/unix -ltclstub8.6
: libthread2.8.2.so
make[1]: Leaving directory `/home/softwares/nosql/tcl8.6.8/unix/pkgs/thread2.8.2'
[root@chengyu unix]# make install
Installing header files in /usr/local/include
Installing /home/softwares/nosql/tcl8.6.8/pkgs/thread2.8.2/generic/tclThread.h
Installing documentation in /usr/local/share/man
Installing /home/softwares/nosql/tcl8.6.8/pkgs/thread2.8.2/doc/man/thread.n
Installing /home/softwares/nosql/tcl8.6.8/pkgs/thread2.8.2/doc/man/tpool.n
Installing /home/softwares/nosql/tcl8.6.8/pkgs/thread2.8.2/doc/man/tsv.n
Installing /home/softwares/nosql/tcl8.6.8/pkgs/thread2.8.2/doc/man/ttrace.n
make[1]: Leaving directory `/home/softwares/nosql/tcl8.6.8/unix/pkgs/thread2.8.2'
重新make test:
[root@chengyu unix]# cd /home/softwares/nosql/redis-5.0.4/
[root@chengyu redis-5.0.4]# make test
對於最新穩定版5.0.4,可以先進行make test,test完畢後,如下表明當前環境下運行無誤:
接下來clean後重新make然後安裝:
[root@chengyu redis-5.0.4]# make clean
cd src && make clean
make[1]: Entering directory `/home/softwares/nosql/redis-5.0.4/src'
rm -rf redis-server redis-sentinel redis-cli redis-benchmark redis-check-rdb redis-check-aof *.o *.gcda *.gcno *.gcov redis.info lcov-html Makefile.dep dict-benchmark
make[1]: Leaving directory `/home/softwares/nosql/redis-5.0.4/src'
make試試:
make命令執行完成之後,會在src目錄下生成8個可執行文件:
[root@chengyu redis-5.0.4]# ls src -F | grep "*"
mkreleasehdr.sh*
redis-benchmark*
redis-check-aof*
redis-check-rdb*
redis-cli*
redis-sentinel*
redis-server*
redis-trib.rb*
主要幾個分別是redis-server、redis-cli、redis-benchmark、redis-check-aof、redis-check-rdb、redis-check-dump,它們的作用如下:
- redis-server:Redis服務器的daemon啓動程序;
- redis-cli:Redis命令行操作工具,或者通過telnet進行純文本協議操作;
- redis-benchmark:Redis性能測試工具,測試Redis在你的系統及你的配置下的讀寫性能;
- redis-check-dump:用於本地數據庫檢查;
- redis-check-aof:更新日誌檢查;
- redis-check-rdb:修復損壞的rdb備份文件。
3.安裝
可以使用make install PREFIX=/usr/local/redis 指定安裝目錄:
[root@chengyu redis-5.0.4]# mkdir -p /usr/local/redis
[root@chengyu redis-5.0.4]# make install PREFIX=/usr/local/redis
4.自啓動
make install安裝命令是不帶自啓動腳本的,而redis官方提供了一個手動編譯時的自啓動腳本,但是需要通過另外一個工具來安裝,切換到目錄中的utils目錄下:
[root@chengyu redis-5.0.4]# utils/install_server.sh
在/etc/init.d/目錄下可以看到redis_6379這個自啓動腳本:
[root@chengyu redis-5.0.4]# ll /etc/init.d/
total 52
-rw-r--r--. 1 root root 13948 Sep 16 2015 functions
-rwxr-xr-x. 1 root root 10571 Sep 28 2018 mysqld
-rwxr-xr-x. 1 root root 2989 Sep 16 2015 netconsole
-rwxr-xr-x. 1 root root 6630 Sep 16 2015 network
-rw-r--r-- 1 root root 1160 Mar 18 07:46 README
-rwxr-xr-x 1 root root 1702 May 20 11:16 redis_6379
-rwxr-xr-x 1 root root 406 Mar 19 2019 zookeeper
也可以自己編寫自啓動腳本:
PATH=/usr/local/redis/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server
REDIS_CLI=/usr/local/redis/bin/redis-cli
PIDFILE=/var/run/redis_6379.pid
CONF="/etc/redis.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
if [ "$?"="0" ]
then
echo "Redis is running..."
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$REDIS_CLI -p $REDISPORT SHUTDOWN
while [ -x ${PIDFILE} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
restart|force-reload)
${0} stop
${0} start
;;
*)
echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
exit 1
esac
下面驗證安裝成果:
[root@chengyu redis-5.0.4]# systemctl status redis_6379
● redis_6379.service - LSB: start and stop redis_6379
Loaded: loaded (/etc/rc.d/init.d/redis_6379; bad; vendor preset: disabled)
Active: active (running) since Wed 2020-05-20 08:05:11 CST; 3h 13min ago
Docs: man:systemd-sysv-generator(8)
CGroup: /system.slice/redis_6379.service
└─1707 /usr/local/redis/bin/redis-server 127.0.0.1:6379
May 20 08:05:11 chengyu systemd[1]: Starting LSB: start and stop redis_6379...
May 20 08:05:11 chengyu redis_6379[1701]: Starting Redis server...
May 20 08:05:11 chengyu systemd[1]: Started LSB: start and stop redis_6379.
[root@chengyu redis-5.0.4]# systemctl stop redis_6379
[root@chengyu redis-5.0.4]# systemctl status redis_6379
● redis_6379.service - LSB: start and stop redis_6379
Loaded: loaded (/etc/rc.d/init.d/redis_6379; bad; vendor preset: disabled)
Active: inactive (dead) since Wed 2020-05-20 11:19:05 CST; 2s ago
Docs: man:systemd-sysv-generator(8)
Process: 5158 ExecStop=/etc/rc.d/init.d/redis_6379 stop (code=exited, status=0/SUCCESS)
May 20 08:05:11 chengyu systemd[1]: Starting LSB: start and stop redis_6379...
May 20 08:05:11 chengyu redis_6379[1701]: Starting Redis server...
May 20 08:05:11 chengyu systemd[1]: Started LSB: start and stop redis_6379.
May 20 11:19:05 chengyu systemd[1]: Stopping LSB: start and stop redis_6379...
May 20 11:19:05 chengyu redis_6379[5158]: Stopping ...
May 20 11:19:05 chengyu redis_6379[5158]: Redis stopped
May 20 11:19:05 chengyu systemd[1]: Stopped LSB: start and stop redis_6379.
[root@chengyu redis-5.0.4]# systemctl start redis_6379
[root@chengyu redis-5.0.4]# systemctl status redis_6379
● redis_6379.service - LSB: start and stop redis_6379
Loaded: loaded (/etc/rc.d/init.d/redis_6379; bad; vendor preset: disabled)
Active: active (running) since Wed 2020-05-20 11:19:14 CST; 1s ago
Docs: man:systemd-sysv-generator(8)
Process: 5158 ExecStop=/etc/rc.d/init.d/redis_6379 stop (code=exited, status=0/SUCCESS)
Process: 5185 ExecStart=/etc/rc.d/init.d/redis_6379 start (code=exited, status=0/SUCCESS)
Tasks: 4
CGroup: /system.slice/redis_6379.service
└─5187 /usr/local/bin/redis-server 127.0.0.1:6379
May 20 11:19:14 chengyu systemd[1]: Starting LSB: start and stop redis_6379...
May 20 11:19:14 chengyu redis_6379[5185]: Starting Redis server...
May 20 11:19:14 chengyu systemd[1]: Started LSB: start and stop redis_6379.
5.查看進程,確認Redis已經啓動
[root@chengyu redis-5.0.4]# ps -ef | grep redis
6.驗證並關閉Redis服務
[root@chengyu redis-5.0.4]# redis-cli ping
PONG
[root@chengyu redis-5.0.4]# redis-cli shutdown
[root@chengyu redis-5.0.4]# redis-cli ping
Could not connect to Redis at 127.0.0.1:6379:
Connection refused
7.用客戶端測試一下是否啓動成功
[root@chengyu redis-5.0.4]# systemctl restart redis_6379
[root@chengyu redis-5.0.4]# redis-cli
已經成功安裝了Redis客戶端,嘗試一下:
[root@chengyu ~]# redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set test 20200520-loveday
OK
127.0.0.1:6379> get test
"20200520-loveday"
另外想要除本地以外的機子訪問修改配置文件:
[root@chengyu ~]# vim /etc/redis.conf
bind 192.183.3.194 127.0.0.1 --這是指redis所在服務器的IP地址,而不是遠程訪問的機子IP
protected-mode no
設置密碼(保證連接保密與安全性):
requirepass redistest
daemonize yes --Redis進程後臺運行
這是往日測試機Redis的安裝筆記,今天抽空整理一下。
2020年05月20日,借一句“我永遠喜歡你,不是說我會十年二十年一輩子都喜歡你,而是指,我這一刻喜歡你的程度,讓我有勇氣說出來我永遠喜歡你!”,鍾哥,十五年了,節日快樂!END!