Redis-5.0.7配置與優化(最新版實戰!!!)

Redis概述

Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合可以對關係數據庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。

Redis優點

具有極高的數據讀寫速
支持豐富的數據類型
支持數據的持久化
原子性
支持數據備份

Redis配置文件(/etc/redis/6379.conf)bind: 監聽的主機地址

port: 端口
daemonize yes: 啓用守護進程
pidfile: 指定PID文件
loglevel notice: 日誌級別
logfile: 指定日誌文件

Redis安裝部署

#安裝編譯環境
[root@localhost ~]# yum install gcc gcc-c++ make -y

#遠程掛載源碼包
[root@localhost ~]# mount.cifs //192.168.142.1/redis /mnt
Password for root@//192.168.142.1/redis:  

#解壓源碼包
[root@localhost ~]# cd /mnt
[root@localhost mnt]# tar zxvf redis-5.0.7.tar.gz -C /opt

#編譯與安裝
[root@localhost mnt]# cd /opt/redis-5.0.7/
[root@localhost redis-5.0.7]# make
[root@localhost redis-5.0.7]# make PREFIX=/usr/local/redis/ install

#建立服務命令軟鏈接到系統
[root@localhost redis-5.0.7]# ln -s /usr/redis/bin/* /usr/local/bin/

#切入utils目錄
[root@localhost redis-5.0.7]# cd /opt/redis-5.0.7/utils/

#執行啓動腳本
[root@localhost utils]# ./install_server.sh
#以下內容,默認回車即可
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379] 
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] 
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 
Selected default - /var/lib/redis/6379
Please select the redis executable path [] /usr/local/redis/bin/redis-server
#此處需手動指定擴展目錄路徑/usr/local/redis/bin/redis-server

#使用進程控制啓動服務
[root@localhost utils]# /etc/init.d/redis_6379 start
Starting Redis server...

#配置redis的6379.conf文件,追加監聽地址
[root@localhost utils]# vim /etc/redis/6379.conf 
bind 127.0.0.1 192.168.142.136

#重啓服務
[root@localhost utils]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...

Redis常用命令演示

#連接本地數據庫
[root@localhost utils]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> 

#連接遠程數據庫
[root@localhost utils]# redis-cli -h 192.168.142.136 -p 6379
192.168.142.136:6379> 

[root@localhost utils]# /usr/local/redis/bin/redis-cli
#獲取set命令幫助
127.0.0.1:6379> help set

  SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
  summary: Set the string value of a key
  since: 1.0.0
  group: string

#存放數據
127.0.0.1:6379> set teacher wangmin
OK

#獲取數據
127.0.0.1:6379> get teacher
"wangmin"

#查看當前數據庫所有鍵
127.0.0.1:6379> keys *
1) "teacher"
2) "st"
3) "teacer"
4) "stu"
5) "student"

#查看當前數據庫中
127.0.0.1:6379> keys t*
1) "teacher"
2) "teacer"

#查看當前數據庫中以s開頭後面包含任意一個及字符的鍵
127.0.0.1:6379> keys s?
1) "st"

#查看當前數據庫中以s開頭後面包含任意二個及字符的鍵
127.0.0.1:6379> keys s??
1) "stu"

#判斷鍵值是否存
127.0.0.1:6379> exists stu
(integer) 1
#返回int值爲1,則表示鍵值存在

127.0.0.1:6379> exists std
(integer) 0
#返回int值爲0,則表示鍵值不存在

#刪除當前數據庫的指定key
127.0.0.1:6379> del st
(integer) 1

#獲取可以對應的value值類型
127.0.0.1:6379> type stu
string

#對已有的可以進行重命名覆蓋
127.0.0.1:6379> rename student stud
OK
127.0.0.1:6379> get stud
"yuanyuan"

#對已有的可以進行重命名不覆蓋
127.0.0.1:6379> renamenx stud st
(integer) 1
127.0.0.1:6379> get st
"yuanyuan"

#查看當前數據庫中key的數目
127.0.0.1:6379> dbsize
(integer) 4

redis-benchmark測試工具

-h:指定服務器主機名
-p:指定服務器端口
-C:指定併發連接數
-n: 指定請求數
-d:以字節的形式指定SET/GET值的數據大小
-q:強制推出redis。僅顯示query/sec值

1.向IP地址爲192.168.142.136端口爲6379的redis服務器發送100個併發連接與100000個請求測試性能

[root@localhost utils]# /usr/local/redis/bin/redis-benchmark -h 192.168.142.136 -p 6379 -c 100 -n 100000
...
#主要查看set和get性能參數
====== SET ======
  100000 requests completed in 1.03 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

93.23% <= 1 milliseconds
99.09% <= 2 milliseconds
99.82% <= 3 milliseconds
100.00% <= 3 milliseconds
96993.21 requests per second

====== GET ======
  100000 requests completed in 1.05 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

92.05% <= 1 milliseconds
99.12% <= 2 milliseconds
99.75% <= 3 milliseconds
99.90% <= 7 milliseconds
99.93% <= 8 milliseconds
100.00% <= 8 milliseconds
94966.77 requests per second
...

2.測試存取大小爲100字節的數據包的性能

[root@localhost utils]# /usr/local/redis/bin/redis-benchmark -h 192.168.142.136 -p 6379 -d 100
...
#主要查看set和get性能參數
====== SET ======
  100000 requests completed in 1.05 seconds
  50 parallel clients
  100 bytes payload
  keep alive: 1

99.17% <= 1 milliseconds
99.79% <= 2 milliseconds
100.00% <= 2 milliseconds
95328.88 requests per second

====== GET ======
  100000 requests completed in 1.02 seconds
  50 parallel clients
  100 bytes payload
  keep alive: 1

99.29% <= 1 milliseconds
99.70% <= 2 milliseconds
100.00% <= 2 milliseconds
97751.71 requests per second
...

Redis多數據庫操作

Redis支持多數據庫,默認支持16個數據庫,0-15命名,多數據庫相互獨立,互不干擾

多數據庫常用命令

#多數據庫間切換
#默認在第一個數據庫中
127.0.0.1:6379> select 10
OK
127.0.0.1:6379[10]> select 15
OK
127.0.0.1:6379[15]> 

#多數據庫間移動數據
127.0.0.1:6379> move st 3
(integer) 1

#切換數據庫並查看鍵值
127.0.0.1:6379> select 3
OK
127.0.0.1:6379[3]> keys *
1) "st"

#清除數據庫內數據
127.0.0.1:6379[3]> flushdb
OK
127.0.0.1:6379[3]> keys *
(empty list or set)

Redis持久化

持久化概述

Redis是運行在內存中,內存中的數據斷電丟失,爲了能夠重用Redis數據,或者防止系統故障,我們需要將Redis中的數據寫入到磁盤空間中,即持久化

持久化分類

●RDB方式:創建快照的方式獲取某- -時刻Redis中所有數據的副本
●AOF方式:將執行的寫命令寫到文件的末尾,以日誌的方式來記.錄數據的變化

RDB持久化

Redis的默認持久化方式
默認文件名dump.rdb

觸發條件
●在指定的時間間隔內,執行指定次數的寫操作(配置文件控制)
●執行save或者是bgsave (異步) 命令
●執行flushall命令,清空數據庫所有數據
●執行shutdown命令,保證服務器正常關閉且不丟失任何數據

優缺點
●適合大規模的數據恢復
●如果業務對數據完整性和一致性要求不高,RDB是很好的選擇
●數據的完整性和一致性不高
●備份時佔用內存

配置RDB持久化

[root@localhost utils]# vim /etc/redis/6379.conf 

#900秒之內至少一次寫操作
save 900 1

#300秒之內至少發生10次寫操作
save 300 10

#60秒之內發生至少10000次寫操作
save 60 10000

#只要滿足其一都會觸發快照操作,註釋所有的save項表示關閉RDB

#RDB文件名稱
dbfilename dump.rdb

#RDB文件路徑
dir /var/lib/redis/6379

#開啓壓縮功能
rdbcompression yes

AOF持久化

Redis默認不開啓
彌補RDB的不足(數據的不一致性)
採用日誌的形式來記錄每個寫操作,並追加到文件中
Redis重啓會根據日誌文件的內容將寫指令從前到後執
行一次以完成數據的恢復工作

配置AOF持久化

[root@localhost utils]# vim /etc/redis/6379.conf 

#開啓AOF持久化
appendonly yes

#AOF文件名稱
appendfilename "appendonly.aof"

#always:同步持久化,每次發生數據變化會立刻寫入磁盤
# appendfsync always

#everysec:默認推薦,每秒異步記錄次(默認值)
appendfsync everysec

#no:不同步,交給操作系統決定如何同步
# appendfsync no

#忽略最後一條可能存在問題的指令
aof-load-truncated yes

AOF的重寫機制

AOF的工作原理是將寫操作追加到文件中,文件的冗餘內容會越來越多
當AOF文件的大小超過所設定的閾值時,Redis就會對AOF文件的內容壓縮

AOF重寫的原理

Redis會fork出一條新進程,讀取內存中的數據(並沒有讀取舊文件),並重新寫到一個臨時文件中,最後替換舊的aof文件

AOF的重寫配置

[root@localhost utils]# vim /etc/redis/6379.conf 
#在日誌進行BGREWRITEAOF時, 如果設置爲yes表示新寫操作不進行同步fsync,
#只暫存在緩衝區裏,避免造成磁盤I0操作衝突,等重寫完成後在寫入。redis中默認爲no
no-appendfsync-on-rewrite no

#當前AOF文件大小是上次日誌重寫時AOF文件大小兩倍時,發生BGREWRITEAOF操作
auto-aof-rewrite-percentage 100

#當前AOF文件執行BGREWRITEAOF命令的最小值,
#避免剛開始啓動Reids時由於文件尺寸較小導致頻繁的BGREWRITEAOF
auto-aof-rewrite-min-size 64mb

Redis性能管理

查看redis內存使用

[root@localhost utils]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> info memory
# Memory
used_memory:11767592
used_memory_human:11.22M        #內存使用率
used_memory_rss:23867392
used_memory_rss_human:22.76M
used_memory_peak:24877056
used_memory_peak_human:23.72M
used_memory_peak_perc:47.30%
used_memory_overhead:841518
used_memory_startup:791416
used_memory_dataset:10926074
used_memory_dataset_perc:99.54%
allocator_allocated:12177712
allocator_active:12488704
allocator_resident:19542016
total_system_memory:1911832576
total_system_memory_human:1.78G
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
allocator_frag_ratio:1.03
allocator_frag_bytes:310992
allocator_rss_ratio:1.56
allocator_rss_bytes:7053312
rss_overhead_ratio:1.22
rss_overhead_bytes:4325376
mem_fragmentation_ratio:2.04        #內存碎片率
mem_fragmentation_bytes:12140824
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:49694
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章