Redis配置與優(yōu)化-創(chuàng)新互聯(lián)

Redis配置與優(yōu)化

Redis概述

Redis 是一個(gè)高性能的key-value數(shù)據(jù)庫。

創(chuàng)新互聯(lián)公司長期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為博白企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作,博白網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

redis的出現(xiàn),很大程度補(bǔ)償了memcached這類key/value存儲(chǔ)的不足,在部分場合可以對(duì)關(guān)系數(shù)據(jù)庫起到很好的補(bǔ)充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。

Redis優(yōu)點(diǎn)

具有極高的數(shù)據(jù)讀寫速
支持豐富的數(shù)據(jù)類型
支持?jǐn)?shù)據(jù)的持久化
原子性
支持?jǐn)?shù)據(jù)備份

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

port: 端口
daemonize yes: 啟用守護(hù)進(jìn)程
pidfile: 指定PID文件
loglevel notice: 日志級(jí)別
logfile: 指定日志文件

Redis安裝部署

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

#遠(yuǎn)程掛載源碼包
[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

#建立服務(wù)命令軟鏈接到系統(tǒng)
[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/

#執(zhí)行啟動(dòng)腳本
[root@localhost utils]# ./install_server.sh
#以下內(nèi)容,默認(rèn)回車即可
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
#此處需手動(dòng)指定擴(kuò)展目錄路徑/usr/local/redis/bin/redis-server

#使用進(jìn)程控制啟動(dòng)服務(wù)
[root@localhost utils]# /etc/init.d/redis_6379 start
Starting Redis server...

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

#重啟服務(wù)
[root@localhost utils]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...

Redis常用命令演示

#連接本地?cái)?shù)據(jù)庫
[root@localhost utils]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> 

#連接遠(yuǎn)程數(shù)據(jù)庫
[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

#存放數(shù)據(jù)
127.0.0.1:6379> set teacher wangmin
OK

#獲取數(shù)據(jù)
127.0.0.1:6379> get teacher
"wangmin"

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

#查看當(dāng)前數(shù)據(jù)庫中
127.0.0.1:6379> keys t*
1) "teacher"
2) "teacer"

#查看當(dāng)前數(shù)據(jù)庫中以s開頭后面包含任意一個(gè)及字符的鍵
127.0.0.1:6379> keys s?
1) "st"

#查看當(dāng)前數(shù)據(jù)庫中以s開頭后面包含任意二個(gè)及字符的鍵
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,則表示鍵值不存在

#刪除當(dāng)前數(shù)據(jù)庫的指定key
127.0.0.1:6379> del st
(integer) 1

#獲取可以對(duì)應(yīng)的value值類型
127.0.0.1:6379> type stu
string

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

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

#查看當(dāng)前數(shù)據(jù)庫中key的數(shù)目
127.0.0.1:6379> dbsize
(integer) 4

redis-benchmark測試工具

-h:指定服務(wù)器主機(jī)名
-p:指定服務(wù)器端口
-C:指定并發(fā)連接數(shù)
-n: 指定請(qǐng)求數(shù)
-d:以字節(jié)的形式指定SET/GET值的數(shù)據(jù)大小
-q:強(qiáng)制推出redis。僅顯示query/sec值

1.向IP地址為192.168.142.136端口為6379的redis服務(wù)器發(fā)送100個(gè)并發(fā)連接與100000個(gè)請(qǐng)求測試性能

[root@localhost utils]# /usr/local/redis/bin/redis-benchmark -h 192.168.142.136 -p 6379 -c 100 -n 100000
...
#主要查看set和get性能參數(shù)
====== 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字節(jié)的數(shù)據(jù)包的性能

[root@localhost utils]# /usr/local/redis/bin/redis-benchmark -h 192.168.142.136 -p 6379 -d 100
...
#主要查看set和get性能參數(shù)
====== 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多數(shù)據(jù)庫操作

Redis支持多數(shù)據(jù)庫,默認(rèn)支持16個(gè)數(shù)據(jù)庫,0-15命名,多數(shù)據(jù)庫相互獨(dú)立,互不干擾

多數(shù)據(jù)庫常用命令

#多數(shù)據(jù)庫間切換
#默認(rèn)在第一個(gè)數(shù)據(jù)庫中
127.0.0.1:6379> select 10
OK
127.0.0.1:6379[10]> select 15
OK
127.0.0.1:6379[15]> 

#多數(shù)據(jù)庫間移動(dòng)數(shù)據(jù)
127.0.0.1:6379> move st 3
(integer) 1

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

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

Redis持久化

持久化概述

Redis是運(yùn)行在內(nèi)存中,內(nèi)存中的數(shù)據(jù)斷電丟失,為了能夠重用Redis數(shù)據(jù),或者防止系統(tǒng)故障,我們需要將Redis中的數(shù)據(jù)寫入到磁盤空間中,即持久化

持久化分類

●RDB方式:創(chuàng)建快照的方式獲取某- -時(shí)刻Redis中所有數(shù)據(jù)的副本
●AOF方式:將執(zhí)行的寫命令寫到文件的末尾,以日志的方式來記.錄數(shù)據(jù)的變化

RDB持久化

Redis的默認(rèn)持久化方式
默認(rèn)文件名dump.rdb

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

優(yōu)缺點(diǎn)
●適合大規(guī)模的數(shù)據(jù)恢復(fù)
●如果業(yè)務(wù)對(duì)數(shù)據(jù)完整性和一致性要求不高,RDB是很好的選擇
●數(shù)據(jù)的完整性和一致性不高
●備份時(shí)占用內(nèi)存

配置RDB持久化

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

#900秒之內(nèi)至少一次寫操作
save 900 1

#300秒之內(nèi)至少發(fā)生10次寫操作
save 300 10

#60秒之內(nèi)發(fā)生至少10000次寫操作
save 60 10000

#只要滿足其一都會(huì)觸發(fā)快照操作,注釋所有的save項(xiàng)表示關(guān)閉RDB

#RDB文件名稱
dbfilename dump.rdb

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

#開啟壓縮功能
rdbcompression yes

AOF持久化

Redis默認(rèn)不開啟
彌補(bǔ)RDB的不足(數(shù)據(jù)的不一致性)
采用日志的形式來記錄每個(gè)寫操作,并追加到文件中
Redis重啟會(huì)根據(jù)日志文件的內(nèi)容將寫指令從前到后執(zhí)
行一次以完成數(shù)據(jù)的恢復(fù)工作

配置AOF持久化

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

#開啟AOF持久化
appendonly yes

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

#always:同步持久化,每次發(fā)生數(shù)據(jù)變化會(huì)立刻寫入磁盤
# appendfsync always

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

#no:不同步,交給操作系統(tǒng)決定如何同步
# appendfsync no

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

AOF的重寫機(jī)制

AOF的工作原理是將寫操作追加到文件中,文件的冗余內(nèi)容會(huì)越來越多
當(dāng)AOF文件的大小超過所設(shè)定的閾值時(shí),Redis就會(huì)對(duì)AOF文件的內(nèi)容壓縮

AOF重寫的原理

Redis會(huì)fork出一條新進(jìn)程,讀取內(nèi)存中的數(shù)據(jù)(并沒有讀取舊文件),并重新寫到一個(gè)臨時(shí)文件中,最后替換舊的aof文件

AOF的重寫配置

[root@localhost utils]# vim /etc/redis/6379.conf 
#在日志進(jìn)行BGREWRITEAOF時(shí), 如果設(shè)置為yes表示新寫操作不進(jìn)行同步fsync,
#只暫存在緩沖區(qū)里,避免造成磁盤I0操作沖突,等重寫完成后在寫入。redis中默認(rèn)為no
no-appendfsync-on-rewrite no

#當(dāng)前AOF文件大小是上次日志重寫時(shí)AOF文件大小兩倍時(shí),發(fā)生BGREWRITEAOF操作
auto-aof-rewrite-percentage 100

#當(dāng)前AOF文件執(zhí)行BGREWRITEAOF命令的最小值,
#避免剛開始啟動(dòng)Reids時(shí)由于文件尺寸較小導(dǎo)致頻繁的BGREWRITEAOF
auto-aof-rewrite-min-size 64mb

Redis性能管理

查看redis內(nèi)存使用

[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        #內(nèi)存使用率
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        #內(nèi)存碎片率
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

內(nèi)存碎片率

●操系統(tǒng)分配的內(nèi)存值used_ _memory_ _rss除以redis使用的內(nèi)存值
used_ _memory計(jì)算得出
●內(nèi)存碎片是由操作系統(tǒng)低效的分配/回收物理內(nèi)存導(dǎo)致的
不連續(xù)的物理內(nèi)存分配
●跟蹤內(nèi)存碎片率對(duì)理解redis實(shí)例的資源性能是非常重要的
內(nèi)存碎片率稍大于1是合理的,這個(gè)值表示內(nèi)存碎片率比較低
內(nèi)存碎片率超過1.5,說明redis消耗了實(shí)際需要物理內(nèi)存的150%,其中50%是內(nèi)存碎片率
內(nèi)存碎片率低于1的,說明Redis內(nèi)存分配超出了物理內(nèi)存,操作系統(tǒng)正在進(jìn)行內(nèi)存交換

內(nèi)存使用率

●redis實(shí)例的內(nèi)存使用率超過可用大內(nèi)存,操作系統(tǒng)將開始進(jìn)行
內(nèi)存與swap空間交換
●避免內(nèi)存交換
針對(duì)緩存數(shù)據(jù)大小選擇
盡可能的使用Hash數(shù)據(jù)結(jié)構(gòu)
設(shè)置key的過期時(shí)間

回收key

●保證合理分配redis有限的內(nèi)存資源
●當(dāng)內(nèi)存使用達(dá)到設(shè)置的大閥值時(shí),需要選擇一種key的回收策略
默認(rèn)情況下回收策略是禁止刪除
redis.conf配置文件中修改maxmemory-policy屬性值
- volatile-lru:使用LRU算法從已設(shè)置過期時(shí)間的數(shù)據(jù)集合中淘汰數(shù)據(jù)
- volatile-ttl:從已設(shè)置過期時(shí)間的數(shù)據(jù)集合中挑選即將過期的數(shù)據(jù)淘汰
- volatile-random:從已設(shè)置過期時(shí)間的數(shù)據(jù)集合中隨機(jī)挑選數(shù)據(jù)淘汰
- allkeys-lru:使用LRU算法從所有數(shù)據(jù)集合中淘汰數(shù)據(jù)
- allkeys-random:從數(shù)據(jù)集合中任意選擇數(shù)據(jù)淘汰
- no-enviction:禁止淘汰數(shù)據(jù)

感謝閱讀~ ~ ~ ~

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站muchs.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

分享名稱:Redis配置與優(yōu)化-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://muchs.cn/article2/ceojoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)營銷型網(wǎng)站建設(shè)、定制開發(fā)、品牌網(wǎng)站設(shè)計(jì)、響應(yīng)式網(wǎng)站品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)