一個(gè)機(jī)構(gòu)化的數(shù)據(jù)庫(kù),創(chuàng)建在關(guān)系模型基礎(chǔ)上,一般面向于記錄
包括oracle,MySQL,sqlserver,db2
除了主流的關(guān)系型數(shù)據(jù)庫(kù)意外的數(shù)據(jù)庫(kù),都人為是非關(guān)系型的
包括redis,mongdb,hbase,couhdb
非關(guān)系型數(shù)據(jù)庫(kù)產(chǎn)生背景
對(duì)數(shù)據(jù)庫(kù)高并發(fā)讀寫(xiě)需求
對(duì)海量數(shù)據(jù)高效存儲(chǔ)與訪問(wèn)需求
對(duì)數(shù)據(jù)庫(kù)高可擴(kuò)展性與高可用需求
Redis基于內(nèi)存運(yùn)行并支持持久化
采用key-value(鍵值對(duì))的存儲(chǔ)形式
優(yōu)點(diǎn):
具有極高的數(shù)據(jù)讀寫(xiě)速度
支持豐富的數(shù)據(jù)類(lèi)型
支持?jǐn)?shù)據(jù)的持久化
原子性
支持?jǐn)?shù)據(jù)備份
[root@localhost ~]# yum install gcc gcc-c++ make -y ##安裝環(huán)境組件
[root@localhost ~]# mount.cifs //192.168.100.3/LNMP-C7 /mnt/ ##掛載
Password for root@//192.168.100.3/LNMP-C7:
[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]# cd utils/
[root@localhost utils]# ./install_server.sh ##執(zhí)行腳本進(jì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] ##默認(rèn)端口
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] ##數(shù)據(jù)文件
Selected default - /var/lib/redis/6379
Please select the redis executable path [] /usr/local/redis/bin/redis-server
##可執(zhí)行文件路徑
[root@localhost utils]# ln -s /usr/local/redis/bin/* /usr/local/bin/ ##便于系統(tǒng)識(shí)別
[root@localhost utils]# netstat -ntap | grep 6379
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 44510/redis-server
[root@localhost utils]# /etc/init.d/redis_6379 stop ##關(guān)閉redis
Stopping ...
Redis stopped
[root@localhost utils]# /etc/init.d/redis_6379 start ##開(kāi)啟redis
Starting Redis server...
[root@localhost utils]# vim /etc/redis/6379.conf ##修改配置文件
bind 127.0.0.1 192.168.13.128 ##設(shè)置監(jiān)聽(tīng)地址
[root@localhost utils]# /etc/init.d/redis_6379 restart ##重啟redis服務(wù)
Stopping ...
Redis stopped
Starting Redis server...
[root@localhost utils]# redis-cli -h 192.168.13.128 -p 6379 ##登錄redis
192.168.13.128:6379> help set ##help幫助
SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
summary: Set the string value of a key
since: 1.0.0
group: string
192.168.13.128:6379> set teacher zhangsan ##設(shè)置鍵值對(duì)
OK
192.168.13.128:6379> set tea red
OK
192.168.13.128:6379> KEYS * ##查看所有的鍵
1) "teacher"
2) "tea"
192.168.13.128:6379> keys t?? ##查看鍵是t開(kāi)頭后面是兩個(gè)字符的
1) "tea"
192.168.13.128:6379> get tea ##查看鍵的值
"red"
192.168.13.128:6379> EXISTS tea ##查看鍵是否存在
(integer) 1 ##1是存在,0是不存在
192.168.13.128:6379> EXISTS teas
(integer) 0
192.168.13.128:6379> del teacher ##刪除鍵
(integer) 1
192.168.13.128:6379> KEYS *
1) "tea"
192.168.13.128:6379> type tea ##查看鍵的類(lèi)型
string
192.168.13.128:6379> rename tea t1 ##給鍵重命名
OK
192.168.13.128:6379> keys *
1) "t1"
192.168.13.128:6379> get t1
"red"
192.168.13.128:6379> exit ##退出
[root@localhost utils]# redis-benchmark -h 192.168.13.128 -p 6379 -c 100 -n 100000
##并發(fā)100,100000個(gè)請(qǐng)求
====== SET ======
100000 requests completed in 1.14 seconds ##請(qǐng)求花費(fèi)的時(shí)間
100 parallel clients
3 bytes payload
keep alive: 1
84.66% <= 1 milliseconds
98.48% <= 2 milliseconds
99.69% <= 3 milliseconds
99.90% <= 18 milliseconds
100.00% <= 18 milliseconds
87642.41 requests per second
====== GET ======
100000 requests completed in 1.13 seconds
100 parallel clients
3 bytes payload
keep alive: 1
[root@localhost utils]# redis-benchmark -h 192.168.13.128 -p 6379 -q -d 100
##以字節(jié)形式指定set/get值的數(shù)據(jù)大小
SET: 90497.73 requests per second
GET: 90991.81 requests per second
[root@localhost utils]# redis-cli -h 192.168.13.128 -p 6379 ##進(jìn)入Redis
192.168.13.128:6379> select 10 ##進(jìn)入第11個(gè)庫(kù)
OK
192.168.13.128:6379[10]> keys *
(empty list or set)
192.168.13.128:6379[10]> select 0 ##進(jìn)入第1個(gè)庫(kù)
OK
192.168.13.128:6379> move t1 10 ##移動(dòng)鍵值對(duì)到第11個(gè)庫(kù)
(integer) 1
192.168.13.128:6379> select 10 ##進(jìn)入第11個(gè)庫(kù)
OK
192.168.13.128:6379[10]> keys * ## 查看鍵
1) "t1"
192.168.13.128:6379[10]> get t1
"red"
192.168.13.128:6379[10]> flushdb ##清除庫(kù)中數(shù)據(jù)
OK
192.168.13.128:6379[10]> keys * ##查看所有鍵
(empty list or set)
192.168.13.128:6379[10]> select 0 ##切換到第一個(gè)庫(kù)
OK
192.168.13.128:6379> keys * ##查看所有的鍵
1) "myset:__rand_int__"
2) "mylist"
3) "key:__rand_int__"
4) "counter:__rand_int__"
192.168.13.128:6379>
Redis持久化
Redis是運(yùn)行在內(nèi)存中,內(nèi)存中的數(shù)據(jù)斷電丟失
為了能后重用Redis數(shù)據(jù),或者防止系統(tǒng)故障,我們需要將Redis中的數(shù)據(jù)寫(xiě)入到磁盤(pán)空間中,即持久化
持久化分類(lèi)
RDB方式:創(chuàng)建快照的方式獲取某一時(shí)刻Redis中所有數(shù)據(jù)的副本
AOF方式:將執(zhí)行的寫(xiě)命令寫(xiě)到文件的末尾,以日志的方式來(lái)記錄數(shù)據(jù)的變化
RDB持久化
Redis的默認(rèn)持久化方式
默認(rèn)文件名dump.rdb
觸發(fā)條件:
在指定的時(shí)間間隔內(nèi),執(zhí)行指定次數(shù)的寫(xiě)操作(配置文件控制)
執(zhí)行save或者是bgsave(異步)命令
執(zhí)行flushall命令,清空數(shù)據(jù)庫(kù)所有數(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)存
通過(guò)RDB文件恢復(fù)數(shù)據(jù)
將dump.rdb文件拷貝到redis的安裝目錄的bin目錄下,重啟redis服務(wù)即可
配置RDB持久化
[root@localhost utils]# vim /etc/redis/6379.conf
#900秒之內(nèi)至少一次寫(xiě)操作
save 900 1
#300秒之內(nèi)至少發(fā)生10次寫(xiě)操作
save 300 10
#60秒之內(nèi)發(fā)生至少10000次寫(xiě)操作
save 60 10000
#只要滿足其一都會(huì)觸發(fā)快照操作,注釋所有的save項(xiàng)表示關(guān)閉RDB
#RDB文件名稱(chēng)
dbfilename dump.rdb
#RDB文件路徑
dir /var/lib/redis/6379
#開(kāi)啟壓縮功能
rdbcompression yes
AOF持久化
Redis默認(rèn)不開(kāi)啟
彌補(bǔ)RDB的不足(數(shù)據(jù)的不一致性)
采用日志的形式來(lái)記錄每個(gè)寫(xiě)操作,并追加到文件中
Redis重啟會(huì)根據(jù)日志文件的內(nèi)容將寫(xiě)指令從前到后執(zhí)行一次以完成數(shù)據(jù)的恢復(fù)工作
根據(jù)AOF文件恢復(fù)數(shù)據(jù)
將appendonly.aof文件拷貝到redis安裝目錄的bin目錄下,重啟redis服務(wù)即可
AOF持久化配置
[root@localhost utils]# vim /etc/redis/6379.conf
#開(kāi)啟AOF持久化
appendonly yes
#AOF文件名稱(chēng)
appendfilename "appendonly.aof"
#always:同步持久化,每次發(fā)生數(shù)據(jù)變化會(huì)立刻寫(xiě)入磁盤(pán)
#appendfsync always
#everysec:默認(rèn)推薦,每秒異步記錄次(默認(rèn)值)
appendfsync everysec
#no:不同步,交給操作系統(tǒng)決定如何同步
#appendfsync no
#忽略最后一條可能存在問(wèn)題的指令
aof-load-truncated yes
AOF的重寫(xiě)機(jī)制
AOF的工作原理是將寫(xiě)操作追加到文件中,文件的冗余內(nèi)容會(huì)越來(lái)越多
當(dāng)AOF文件的大小超過(guò)所設(shè)定的閥值時(shí),Redis就會(huì)對(duì)AOF文件的內(nèi)容壓縮
AOF重寫(xiě)的原理
Redis會(huì)fork出一條新進(jìn)程,讀取內(nèi)存中的數(shù)據(jù)(并沒(méi)有讀取舊文件),并重新寫(xiě)到一個(gè)臨時(shí)文件中,最后替換舊的aof文件
AOF重寫(xiě)配置
[root@localhost utils]# vim /etc/redis/6379.conf
#在日志進(jìn)行BGREWRITEAOF時(shí), 如果設(shè)置為yes表示新寫(xiě)操作不進(jìn)行同步fsync,
#只暫存在緩沖區(qū)里,避免造成磁盤(pán)I0操作沖突,等重寫(xiě)完成后在寫(xiě)入。redis中默認(rèn)為no
no-appendfsync-on-rewrite no
#當(dāng)前AOF文件大小是上次日志重寫(xiě)時(shí)AOF文件大小兩倍時(shí),發(fā)生BGREWRITEAOF操作
auto-aof-rewrite-percentage 100
#當(dāng)前AOF文件執(zhí)行BGREWRITEAOF命令的最小值,
#避免剛開(kāi)始啟動(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
內(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)存碎片率超過(guò)1.5,說(shuō)明redis消耗了實(shí)際需要物理內(nèi)存的150%,其中50%是內(nèi)存碎片率
內(nèi)存碎片率低于1的,說(shuō)明Redis內(nèi)存分配超出了物理內(nèi)存,操作系統(tǒng)正在進(jìn)行內(nèi)存交換
內(nèi)存使用率
●redis實(shí)例的內(nèi)存使用率超過(guò)可用最大內(nèi)存,操作系統(tǒng)將開(kāi)始進(jìn)行
內(nèi)存與swap空間交換
●避免內(nèi)存交換
針對(duì)緩存數(shù)據(jù)大小選擇
盡可能的使用Hash數(shù)據(jù)結(jié)構(gòu)
設(shè)置key的過(guò)期時(shí)間
回收key
●保證合理分配redis有限的內(nèi)存資源
●當(dāng)內(nèi)存使用達(dá)到設(shè)置的最大閥值時(shí),需要選擇一種key的回收策略
默認(rèn)情況下回收策略是禁止刪除
redis.conf配置文件中修改maxmemory-policy屬性值
- volatile-lru:使用LRU算法從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集合中淘汰數(shù)據(jù)
- volatile-ttl:從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集合中挑選即將過(guò)期的數(shù)據(jù)淘汰(建議使用)
- volatile-random:從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集合中隨機(jī)挑選數(shù)據(jù)淘汰
- allkeys-lru:使用LRU算法從所有數(shù)據(jù)集合中淘汰數(shù)據(jù)
- allkeys-random:從數(shù)據(jù)集合中任意選擇數(shù)據(jù)淘汰
- no-enviction:禁止淘汰數(shù)據(jù)
謝謝閱讀
創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)服務(wù),網(wǎng)站設(shè)計(jì),綿陽(yáng)服務(wù)器托管等一站式綜合服務(wù)型公司,專(zhuān)業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競(jìng)爭(zhēng)對(duì)手中脫穎而出創(chuàng)新互聯(lián)建站。
網(wǎng)頁(yè)名稱(chēng):redis數(shù)據(jù)庫(kù)
轉(zhuǎn)載源于:http://jinyejixie.com/article32/gdpppc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、建站公司、網(wǎng)站收錄、網(wǎng)站排名、服務(wù)器托管、域名注冊(cè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)