国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

web網(wǎng)站開發(fā)試題成都seo培

web網(wǎng)站開發(fā)試題,成都seo培,wordpress破解密碼破解,上海靜安網(wǎng)站建設(shè)一、redis與memcache總體對(duì)比 1.性能 Redis:只使用單核,平均每一個(gè)核上Redis在存儲(chǔ)小數(shù)據(jù)時(shí)比Memcached性能更高。 Memcached:可以使用多核,而在100k以上的數(shù)據(jù)中,Memcached性能要高于Redis。 2.內(nèi)存使用效率 Mem…

一、redis與memcache總體對(duì)比

1.性能

Redis:只使用單核,平均每一個(gè)核上Redis在存儲(chǔ)小數(shù)據(jù)時(shí)比Memcached性能更高。

Memcached:可以使用多核,而在100k以上的數(shù)據(jù)中,Memcached性能要高于Redis。

2.內(nèi)存使用效率

MemCached:使用簡(jiǎn)單的key-value存儲(chǔ),Memcached的內(nèi)存利用率更高。

Redis:如果采用hash結(jié)構(gòu)來做key-value存儲(chǔ),由于其組合式的壓縮,其內(nèi)存利用率會(huì)高于Memcached。

3.內(nèi)存空間和數(shù)據(jù)量大小

MemCached:可以修改最大內(nèi)存,采用LRU算法。Memcached單個(gè)key-value大小有限,一個(gè)value最大只支持1MB。

Redis:增加了VM的特性,突破了物理內(nèi)存的限制。Redis單個(gè)key-value大小最大支持512MB 。

4.數(shù)據(jù)結(jié)構(gòu)支持

MemCached:數(shù)據(jù)結(jié)構(gòu)單一,僅用來緩存數(shù)據(jù)。

Redis:支持更加豐富的數(shù)據(jù)類型,Redis不僅僅支持簡(jiǎn)單的k/v類型的數(shù)據(jù),同時(shí)還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。

可以在服務(wù)器端直接對(duì)數(shù)據(jù)進(jìn)行豐富的操作,這樣可以減少網(wǎng)絡(luò)IO次數(shù)和數(shù)據(jù)體積。

5.可靠性

Memcached:只是個(gè)內(nèi)存緩存,對(duì)可靠性要求低。MemCached不支持?jǐn)?shù)據(jù)持久化,斷電或重啟后數(shù)據(jù)消失,但穩(wěn)定性是有保證的。

Redis:對(duì)可靠性要求高,支持?jǐn)?shù)據(jù)持久化和數(shù)據(jù)恢復(fù),允許單點(diǎn)故障,同時(shí)也會(huì)影響部分性能。支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存到磁盤中,重啟的時(shí)候可以再次加載進(jìn)行使用。

6.應(yīng)用場(chǎng)景

Memcached:動(dòng)態(tài)系統(tǒng)中減輕數(shù)據(jù)庫負(fù)載,提升性能;做緩存,適合多讀少寫,大數(shù)據(jù)量場(chǎng)景。

Redis:適用于對(duì)讀寫效率要求都很高,數(shù)據(jù)處理業(yè)務(wù)復(fù)雜和對(duì)安全性要求較高的系統(tǒng)。

二、redis與memcache內(nèi)存管理機(jī)制對(duì)比

1. Memcached的內(nèi)存管理機(jī)制

Memcached默認(rèn)使用Slab Allocation機(jī)制管理內(nèi)存,其主要思想是按照預(yù)先規(guī)定的大小,將分配的內(nèi)存分割成特定長(zhǎng)度的塊以存儲(chǔ)相應(yīng)長(zhǎng)度的key-value數(shù)據(jù)記錄,以完全解決內(nèi)存碎片問題。Slab Allocation機(jī)制只為存儲(chǔ)外部數(shù)據(jù)而設(shè)計(jì),也就是說所有的key-value數(shù)據(jù)都存儲(chǔ)在Slab Allocation系統(tǒng)里,而Memcached的其它內(nèi)存請(qǐng)求則通過普通的malloc/free來申請(qǐng),因?yàn)檫@些請(qǐng)求的數(shù)量和頻率決定了它們不會(huì)對(duì)整個(gè)系統(tǒng)的性能造成影響

2. Redis的內(nèi)存管理機(jī)制

Redis的內(nèi)存管理主要通過源碼中zmalloc.h和zmalloc.c兩個(gè)文件來實(shí)現(xiàn)的。Redis為了方便內(nèi)存的管理,在分配一塊內(nèi)存之后,會(huì)將這塊內(nèi)存的大小存入內(nèi)存塊的頭部。如圖 5所示,real_ptr是redis調(diào)用malloc后返回的指針。redis將內(nèi)存塊的大小size存入頭部,size所占據(jù)的內(nèi)存大小是已知的,為 size_t類型的長(zhǎng)度,然后返回ret_ptr。當(dāng)需要釋放內(nèi)存的時(shí)候,ret_ptr被傳給內(nèi)存管理程序。通過ret_ptr,程序可以很容易的算出 real_ptr的值,然后將real_ptr傳給free釋放內(nèi)存。Redis采用的是包裝的mallc/free,相較于Memcached的內(nèi)存管理方法來說,要簡(jiǎn)單很多。

三、 Redis和Memcached的集群實(shí)現(xiàn)機(jī)制對(duì)比

1. Memcached的分布式存儲(chǔ)

Memcached本身并不支持分布式,因此只能在客戶端通過像一致性哈希這樣的分布式算法來實(shí)現(xiàn)Memcached的分布式存儲(chǔ)。

當(dāng)客戶端向Memcached集群發(fā)送數(shù)據(jù)之前,首先會(huì)通過內(nèi)置的分布式算法計(jì)算出該條數(shù)據(jù)的目標(biāo)節(jié)點(diǎn),然后數(shù)據(jù)會(huì)直接發(fā)送到該節(jié)點(diǎn)上存儲(chǔ)。但客戶端查詢數(shù)據(jù)時(shí),同樣要計(jì)算出查詢數(shù)據(jù)所在的節(jié)點(diǎn),然后直接向該節(jié)點(diǎn)發(fā)送查詢請(qǐng)求以獲取數(shù)據(jù)。

2. Redis的分布式存儲(chǔ)

Redis在服務(wù)器端構(gòu)建分布式存儲(chǔ)。Redis Cluster是一個(gè)實(shí)現(xiàn)了分布式且允許單點(diǎn)故障的Redis高級(jí)版本,它沒有中心節(jié)點(diǎn),具有線性可伸縮的功能。其中節(jié)點(diǎn)與節(jié)點(diǎn)之間通過二進(jìn)制協(xié)議進(jìn)行通信,節(jié)點(diǎn)與客戶端之間通過ascii協(xié)議進(jìn)行通信。在數(shù)據(jù)的放置策略上,Redis Cluster將整個(gè)key的數(shù)值域分成4096個(gè)哈希槽,每個(gè)節(jié)點(diǎn)上可以存儲(chǔ)一個(gè)或多個(gè)哈希槽,Redis Cluster支持的最大節(jié)點(diǎn)數(shù)就是4096。Redis Cluster使用的分布式算法:crc16( key ) % HASH_SLOTS_NUMBER。

為了保證單點(diǎn)故障下的數(shù)據(jù)可用性,Redis Cluster引入了Master節(jié)點(diǎn)和Slave節(jié)點(diǎn)。在Redis Cluster中,每個(gè)Master節(jié)點(diǎn)都會(huì)有對(duì)應(yīng)的兩個(gè)用于冗余的Slave節(jié)點(diǎn)。這樣在整個(gè)集群中,任意兩個(gè)節(jié)點(diǎn)的宕機(jī)都不會(huì)導(dǎo)致數(shù)據(jù)的不可用。當(dāng)Master節(jié)點(diǎn)退出后,集群會(huì)自動(dòng)選擇一個(gè)Slave節(jié)點(diǎn)成為新的Master節(jié)點(diǎn)。

一:redis的安裝

1:安裝

[root@localhost ~]# systemctl stop firewalld

[root@localhost ~]# setenforce 0

[root@localhost ~]# yum -y install gcc* zlib-devel

[root@localhost ~]#?tar xvzf redis-4.0.9.tar.gz

[root@localhost ~]#?cd redis-4.0.9/

[root@localhost redis-4.0.9]# make

注意:

在make的時(shí)候,可能會(huì)出現(xiàn)如下錯(cuò)誤提示:

解決方法1:用make MALLOC=libc指定內(nèi)存分配器為 libc進(jìn)行編譯

解決方法2:make clean && make?distclean

[root@localhost redis-4.0.9]# make PREFIX=/usr/local/redis install

[root@localhost ~]# ln -s /usr/local/redis/bin/* /usr/local/bin/

[root@localhost redis-4.0.9]# cd /root/redis-4.0.9/utils/

[root@localhost utils]# ./install_server.sh

備注:

Config file : /etc/redis/6379.conf ???//配置文件路徑

Log file : /var/log/redis_6379.log ???//日志文件路徑

Data dir : /var/lib/redis/6379 ???//數(shù)據(jù)文件路徑

Executable : /usr/local/redis/bin/redis-server ???//可執(zhí)行文件路徑

Cli Executable : /usr/local/redis/bin/redis-cli ???//客戶端命令行工具

2:查看進(jìn)程

[root@localhost utils]# netstat -anpt | grep redis

3:服務(wù)控制

[root@localhost ~]#/etc/init.d/redis_6379 stop

[root@localhost ~]#/etc/init.d/redis_6379 start

[root@localhost ~]#/etc/init.d/redis_6379 restart

[root@localhost ~]#/etc/init.d/redis_6379 status

4:配置參數(shù)的修改

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

bind 127.0.0.1?192.168.10.101 ?? //監(jiān)聽的主機(jī)地址

port 6379 //端口

daemonize yes //啟用守護(hù)進(jìn)程

pidfile /var/run/redis_6379.pid //指定 PID 文件

loglevel notice //日志級(jí)別

logfile /var/log/redis_6379.log //指定日志文件

[root@localhost~]#/etc/init.d/redis_6379 restart

[root@localhost utils]# netstat -anpt | grep redis

二:Redis 命令工具

? redis-server:用于啟動(dòng) Redis 的工具;

? redis-benchmark:用于檢測(cè) Redis 在本機(jī)的運(yùn)行效率;

? redis-check-aof:修復(fù) AOF 持久化文件;

? redis-check-rdb:修復(fù) RDB 持久化文件;

? redis-cli:Redis 命令行工具。

1:redis-cli 命令行工具

(1)連接本機(jī)redis

[root@localhost ~]# redis-cli

127.0.0.1:6379>

(2)測(cè)試redis服務(wù)是否啟動(dòng)

127.0.0.1:6379> ping

PONG

(3)遠(yuǎn)程連接

[root@localhost ~]#redis-cli -h 192.168.10.101 -p 6379

2:獲取幫助

? help @<group>:獲取<group>中的命令列表;

? help <command>:獲取某個(gè)命令的幫助;

? help <tab>:獲取可能幫助的主題列表。

備注:

? help <tab>:獲取可能幫助的主題列表。

輸入help后,按下tab鍵

(1)查看所有與 List 數(shù)據(jù)類型的相關(guān)命令

127.0.0.1:6379>help @list

(2)查看 set 命令的命令幫助

127.0.0.1:6379>help set

3:redis-benchmark 測(cè)試工具

redis-benchmark 是官方自帶的 Redis 性能測(cè)試工具,可以有效的測(cè)試 Redis 服務(wù)的性能。

? -h:指定服務(wù)器主機(jī)名;

? -p:指定服務(wù)器端口;

? -s:指定服務(wù)器 socket;

? -c:指定并發(fā)連接數(shù);

? -n:指定請(qǐng)求數(shù);

? -d:以字節(jié)的形式指定 SET/GET 值的數(shù)據(jù)大小;

? -k:1=keep alive 0=reconnect;

? -r:SET/GET/INCR 使用隨機(jī) key, SADD 使用隨機(jī)值;

? -P:通過管道傳輸<numreq>請(qǐng)求;

? -q:強(qiáng)制退出 redis。僅顯示 query/sec 值;

? --csv:以 CSV 格式輸出;

? -l:生成循環(huán),永久執(zhí)行測(cè)試;

? -t:僅運(yùn)行以逗號(hào)分隔的測(cè)試命令列表;

? -I:Idle 模式。僅打開 N 個(gè) idle 連接并等待。

(1)測(cè)試請(qǐng)求性能

[root@localhost ~]#redis-benchmark -h 192.168.10.101 -p 6379 -c 100 -n 100000

備注:

? -h:指定服務(wù)器主機(jī)名;

? -p:指定服務(wù)器端口;

? -c:指定并發(fā)連接數(shù);

? -n:指定請(qǐng)求數(shù);

====== MSET (10 keys) ======

??100000 requests completed in 1.02 seconds

??100 parallel clients ##100個(gè)并發(fā)連接

??3 bytes payload

??keep alive: 1

87.25% <= 1 milliseconds ##87.25%的命令執(zhí)行時(shí)間小于等于1毫秒

99.90% <= 2 milliseconds

100.00% <= 2 milliseconds

97943.19 requests per second #每秒的請(qǐng)求數(shù)

備注:

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

(2)測(cè)試存取性能

[root@localhost ~]#redis-benchmark -h 192.168.10.101 -p 6379 -q -d 100

備注:

? -h:指定服務(wù)器主機(jī)名;

? -p:指定服務(wù)器端口;

? -d:以字節(jié)的形式指定 SET/GET 值的數(shù)據(jù)大小;

? -q:強(qiáng)制退出 redis。僅顯示 query/sec 值;

PING_INLINE: 121506.68 requests per second

PING_BULK: 124378.11 requests per second

SET: 121654.50 requests per second

GET: 122100.12 requests per second

INCR: 118764.84 requests per second

LPUSH: 112612.61 requests per second

RPUSH: 118623.96 requests per second

LPOP: 107874.87 requests per second

RPOP: 114416.48 requests per second

SADD: 123304.56 requests per second

HSET: 122249.38 requests per second

SPOP: 128040.97 requests per second

LPUSH (needed to benchmark LRANGE): 116686.12 requests per second

LRANGE_100 (first 100 elements): 40016.00 requests per second

LRANGE_300 (first 300 elements): 11991.85 requests per second

LRANGE_500 (first 450 elements): 7381.71 requests per second

LRANGE_600 (first 600 elements): 5230.67 requests per second

MSET (10 keys): 92421.44 requests per second

備注:

測(cè)試存取大小為 100 字節(jié)的數(shù)據(jù)包的性能

(1)PING_INLINE:每秒完成多少次PING操作

(2)GET:每秒完成多少次GET key vlaue

(3)SET:每秒完成多少次SET key vlaue

(4)INCR:每秒完成多少次原子計(jì)數(shù)

(5)MSET:每秒多個(gè)key vlaue請(qǐng)求次數(shù)

(3)set 與 lpush 操作性能

[root@localhost ~]# redis-benchmark -t set,lpush -n 100000 -q

備注:

? -n:指定請(qǐng)求數(shù);

? -q:強(qiáng)制退出 redis。僅顯示 query/sec 值;

? -t:僅運(yùn)行以逗號(hào)分隔的測(cè)試命令列表;

SET: 121951.22 requests per second

LPUSH: 127226.46 requests per second

備注:

測(cè)試本機(jī)上 Redis 服務(wù)在進(jìn)行 set 與 lpush 操作時(shí)的性能。

Lpush 命令將一個(gè)或多個(gè)值插入到列表頭部

三:Redis 數(shù)據(jù)庫常用命令

? set:存放數(shù)據(jù),基本的命令格式為 set key value。

? get:獲取數(shù)據(jù),基本的命令格式為 get key。

127.0.0.1:6379>set teacher zhanglong

127.0.0.1:6379>get teacher

1key 相關(guān)命令

Redis 數(shù)據(jù)庫中,與 key 相關(guān)的命令主要包含以下幾種。

1)添加鍵值對(duì)

使用 keys 命令可以取符合規(guī)則的鍵值列表,通常情況可以結(jié)合*、?等選項(xiàng)來使用。

127.0.0.1:6379>set k1 1

OK

127.0.0.1:6379>set k2 2

OK

127.0.0.1:6379>set k3 3

OK

127.0.0.1:6379>set v1 4

OK

127.0.0.1:6379>set v5 5

OK

(2)查看當(dāng)前數(shù)據(jù)庫中所有鍵

127.0.0.1:6379>KEYS??* ?

1) "teacher"

2) "k1"

3) "k2"

4) "k3"

5) "v1"

6) "v5"

127.0.0.1:6379>set v22 5

OK

(3)查看當(dāng)前數(shù)據(jù)庫中以 v 開頭的數(shù)據(jù)

127.0.0.1:6379>KEYS v* ???

1) "v1"

2) "v5"

3) "v22"

(4)查看當(dāng)前數(shù)據(jù)庫中以 v 開頭后面包含任意一位的數(shù)據(jù)

127.0.0.1:6379>KEYS v? ??

1) "v1"

2) "v5"

(5)查看當(dāng)前數(shù)據(jù)庫中以 v 開頭 v 開頭后面包含任意兩位的數(shù)據(jù)

127.0.0.1:6379>KEYS v?? ??

1) "v22"

2:exists

exists 命令可以判斷鍵值是否存在

127.0.0.1:6379>exists teacher

(integer) 1

結(jié)果為1,表示 teacher 鍵是存在

127.0.0.1:6379>exists tea

(integer) 0

結(jié)果為0,表示 tea 鍵不存在

3:del

del 命令可以刪除當(dāng)前數(shù)據(jù)庫的指定 key

127.0.0.1:6379>keys *

1) "teacher"

2) "v1"

3) "v22"

4) "k3"

5) "k1"

6) "k2"

7) "v5"

127.0.0.1:6379> del v5

(integer) 1

127.0.0.1:6379>get v5

(nil)

4:type

使用 type 命令可以獲取 key 對(duì)應(yīng)的 value 值類型

127.0.0.1:6379>type k1

string

備注:

redis支持的數(shù)據(jù)類型

  • String:最簡(jiǎn)單的類型,就是普通的set和get,作key value緩存。?
  • Hash:類似map的一種結(jié)構(gòu),一般就是可以將結(jié)構(gòu)化的數(shù)據(jù),比如一個(gè)對(duì)象給緩存在redis里
  • List:List是有序列表,可以通過list存儲(chǔ)一些列表型的數(shù)據(jù)結(jié)構(gòu),類似粉絲列表、文章的評(píng)論列表之類的東西
  • Set:Set是無序集合,自動(dòng)去重。
  • Sorted Set:Sorted Set是排序的set,去重但可以排序,寫進(jìn)去的時(shí)候給一個(gè)分?jǐn)?shù),自動(dòng)根據(jù)分?jǐn)?shù)排序。

5:rename

rename 命令是對(duì)已有 key 進(jìn)行重命名

在實(shí)際使用過程中,建議先用 exists 命令查看目標(biāo) key 是否存在,然后再?zèng)Q定是否執(zhí)行 rename 命令,以避免覆蓋重要數(shù)據(jù)

127.0.0.1:6379>keys v*

1) "v1"

2) "v22"

127.0.0.1:6379>rename v22 v2

OK

127.0.0.1:6379>keys v*

1) "v1"

2) "v2"

127.0.0.1:6379>get v1

"4"

127.0.0.1:6379>get v2

"5"

127.0.0.1:6379>rename v1 v2

OK

127.0.0.1:6379>get v1

(nil)

127.0.0.1:6379>get v2

"4"

6:renamenx

renamenx 命令的作用是對(duì)已有 key 進(jìn)行重命名,并檢測(cè)新名是否存在。

使用renamenx 命令進(jìn)行重命名時(shí),如果目標(biāo) key 存在則不進(jìn)行重命名。

127.0.0.1:6379>keys *

1) "teacher"

2) "k3"

3) "k1"

4) "k2"

5) "v2"

127.0.0.1:6379>get teacher

"zhanglong"

127.0.0.1:6379>get v2

"4"

127.0.0.1:6379>renamenx v2 teacher

(integer) 0

127.0.0.1:6379>keys *

1) "teacher"

2) "k3"

3) "k1"

4) "k2"

5) "v2"

127.0.0.1:6379>get teacher

"zhanglong"

127.0.0.1:6379>get v2

"4

7:dbsize

dbsize 命令的作用是查看當(dāng)前數(shù)據(jù)庫中 key 的數(shù)目。

127.0.0.1:6379> dbsize

(integer) 5

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

1:多數(shù)據(jù)庫間切換

Redis 在沒有任何改動(dòng)的情況下默認(rèn)包含 16 個(gè)數(shù)據(jù)庫,數(shù)據(jù)庫名稱是用數(shù)字 0-15 來依次命名的

(1)切換至序號(hào)為 10 的數(shù)據(jù)庫

127.0.0.1:6379>select 10

OK

(2)切換至序號(hào)為 15 的數(shù)據(jù)庫

127.0.0.1:6379[10]>select 15

OK

(3)切換至序號(hào)為 0 的數(shù)據(jù)庫

127.0.0.1:6379[15]>select 0

2:多數(shù)據(jù)庫間移動(dòng)數(shù)據(jù)

Redis 的多數(shù)據(jù)庫在一定程度上是相對(duì)獨(dú)立的,例如在數(shù)據(jù)庫 0 上面存放 k1 的數(shù)據(jù),在其它 1-15 的數(shù)據(jù)庫上是無法查看到的。

127.0.0.1:6379>set k1 100

OK

127.0.0.1:6379>get k1

"100"

127.0.0.1:6379>select 1

OK

127.0.0.1:6379[1]>get k1

(nil)

127.0.0.1:6379[1]>select 0 //切換至目標(biāo)數(shù)據(jù)庫 0

OK

127.0.0.1:6379>get k1 //查看目標(biāo)數(shù)據(jù)是否存在

"100"

127.0.0.1:6379>move k1 1 //將數(shù)據(jù)庫 0 k1 移動(dòng)到數(shù)據(jù)庫 1

(integer) 1

127.0.0.1:6379>select 1 //切換至目標(biāo)數(shù)據(jù)庫 1

OK

127.0.0.1:6379[1]>get k1 //查看被移動(dòng)數(shù)據(jù)

"100"

127.0.0.1:6379[1]> select 0

OK

127.0.0.1:6379> get k1 //在數(shù)據(jù)庫 0 中無法查看到 k1 的值

(nil)

3:清除數(shù)據(jù)庫內(nèi)數(shù)據(jù)

清空當(dāng)前數(shù)據(jù)庫數(shù)據(jù),使用 FLUSHDB

命令實(shí)現(xiàn);清空所有數(shù)據(jù)庫的數(shù)據(jù),使用 FLUSHALL 命令實(shí)現(xiàn)

五:Redis 持久化

Redis 的所有數(shù)據(jù)都是保存在內(nèi)存中,然后不定期的通過異步方式保存到磁盤上(這稱為半持久化模式”);也可以把每一次數(shù)據(jù)變化都寫入到一個(gè) append only file(aof)里面(這稱為全持久化模式”)。

由于 Redis 的數(shù)據(jù)都存放在內(nèi)存中,如果沒有配置持久化,Redis 重啟后數(shù)據(jù)就全丟失了。所以,需要開啟 Redis 的持久化功能,將數(shù)據(jù)保存到磁盤上,當(dāng) Redis 重啟后,可以從磁盤中恢復(fù)數(shù)據(jù)。Redis 提供兩種方式進(jìn)行持久化,一種是 RDBRedis DataBase?持久化(原理是將 Reids在內(nèi)存中的數(shù)據(jù)庫記錄定時(shí) dump 到磁盤上的 RDB 持久化),另外一種是 AOFappend only?file持久化(原理是將 Reids 的操作日志以追加的方式寫入文件)。

1:RDB AOF 的區(qū)別

(1)RDB是什么?

默認(rèn)采用的方法

RDB持久化是把當(dāng)前進(jìn)程數(shù)據(jù)生成快照保存到硬盤的過程,觸發(fā)RDB持久化過程分為手動(dòng)觸發(fā)和自動(dòng)觸發(fā)。

觸發(fā)機(jī)制:手動(dòng)觸發(fā)分別對(duì)應(yīng)為save和bgsave命令

save命令:阻塞當(dāng)前Redis服務(wù)器,直到RDB過程完成為止,對(duì)于內(nèi)存比較多的實(shí)例會(huì)造成時(shí)間阻塞。線上環(huán)境不建議使用。

bgsave命令:Redis進(jìn)程執(zhí)行fork(用于創(chuàng)建進(jìn)程的函數(shù))操作創(chuàng)建子進(jìn)程,RDB持久化過程由子進(jìn)程負(fù)責(zé),完成后自動(dòng)結(jié)束。阻塞只發(fā)生在fork階段。

(2)RDB的優(yōu)缺點(diǎn):

RDB的優(yōu)點(diǎn):

RDB是一個(gè)緊湊壓縮的二進(jìn)制文件,代表Redis在某一個(gè)時(shí)間點(diǎn)上的數(shù)據(jù)快照。非常適用于備份,全量復(fù)制等場(chǎng)景。比如每6小時(shí)執(zhí)行bgsave備份,并把RDB文件拷貝到遠(yuǎn)程機(jī)器或者文件系統(tǒng)中,用于災(zāi)難恢復(fù)。

Redis加載RDB恢復(fù)數(shù)據(jù)遠(yuǎn)遠(yuǎn)快于AOF方式。

RDB的缺點(diǎn):

RDB方式數(shù)據(jù)沒辦法做到實(shí)時(shí)持久化/秒級(jí)持久化。因?yàn)閎gsave每次運(yùn)行都有執(zhí)行fork操作創(chuàng)建子進(jìn)程,屬于重量級(jí)操作,頻繁執(zhí)行成本過高。

RDB文件使用特定二進(jìn)制格式保存,Redis版本演進(jìn)過程中有多個(gè)格式的RDB版本,存在老版本Redis服務(wù)無法兼容新版RDB格式的問題。

二、AOF是什么

AOF(append only file)持久化:以獨(dú)立日志的方式記錄每次寫命令,重啟時(shí)再重新執(zhí)行AOF文件中命令達(dá)到恢復(fù)數(shù)據(jù)的目的。AOF的主要作用是解決了數(shù)據(jù)持久化的實(shí)時(shí)性,目前已經(jīng)是Redis持久化的主流

二者選擇的標(biāo)準(zhǔn):

犧牲一些性能,換取更高的緩存一致性(AOF),

寫操作頻繁的時(shí)候,不啟用備份來換取更高的性能,待手動(dòng)運(yùn)行 save 的時(shí)候,再做備份(RDB

備注:

如果redies重啟之后,需要加載一個(gè)持久化文件,有限會(huì)選擇AOF文件。

如果先開啟了RDB,再開啟AOF,RDB先執(zhí)行了持久化,那么RDB文件中的內(nèi)容會(huì)被AOF覆蓋掉。

3:Redis 持久化配置

(1)RDB 持久化配置

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

打開 6379.conf 文件之后,搜索 save,可以看到如下所示配置信息。

  • ? save 900 1:在 900 秒(15 分鐘)之后,如果至少有 1 個(gè) key 發(fā)生變化,則 dump內(nèi)存快照。
  • ? save 300 10:在 300 秒(5 分鐘)之后,如果至少有 10 個(gè) key 發(fā)生變化,則 dump內(nèi)存快照。
  • ? save 60 10000:在 60 秒(1 分鐘)之后,如果至少有 10000 個(gè) key 發(fā)生變化,則dump 內(nèi)存快照。
  • dbfilename dump.rdb?:RDB文件名稱 ##254行
  • dir /var/lib/redis/6379?:RDB文件路徑 ##264行
  • rdbcompression yes?:是否進(jìn)行壓縮 ##242行

(2)AOF 持久化配置

Redis 的配置文件中存在三種同步方式,它們分別是:

  • appendonly yes??:開啟AOF持久化(默認(rèn)為no) ##673行
  • appendfilename "appendonly.aof "??:AOF文件名稱 ##677行
  • # appendfsync always
  • appendfsync everysec
  • # appendfsync no

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

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

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

  • aof-load-truncated yes?? ##769行

忽略最后一條可能存在問題的指令

[root@localhost ~]#/etc/init.d/redis_6379 restart

(2)AOF重寫

為了解決 AOF 文件體積不斷增大的問題,用戶可以向 Redis 發(fā)送 BGREWRITEAOF命令。BGREWRITEAOF 命令會(huì)通過移除 AOF 文件中的冗余命令來重寫(rewriteAOF文件,使 AOF 文件的體積盡可能地變小。

127.0.0.1:6379> bgrewriteaof

Background append only file rewriting started

# 在日志進(jìn)行BGREWRITEAOF時(shí),如果no-appendfsync-on-rewrite設(shè)置為yes表示新寫操作不進(jìn)行同步fsync,只是暫存在緩沖區(qū)里,避免造成磁盤IO操作沖突,等重寫完成后再寫入。Redis中默認(rèn)為no

no-appendfsync-on-rewrite no ?

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

auto-aof-rewrite-percentage 100 ?

備注:

100指的是aof文件增長(zhǎng)比例,指當(dāng)前aof文件比上次重寫的增長(zhǎng)比例大小100為兩倍

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

auto-aof-rewrite-min-size 64mb

六:性能管理

1:查看內(nèi)存信息

192.168.9.236:7001> info memory

used_memory:1210776 #已經(jīng)內(nèi)存使用的大小,以字節(jié)為單位
used_memory_human:1.15M # 帶單位展示,以M為單位
used_memory_rss:7802880 # 從操作系統(tǒng)角度看redis內(nèi)存占用多少
used_memory_rss_human:7.44M # 帶單位展示
maxmemory:1073741824 # 最大內(nèi)存大小
maxmemory_human:1.00G # 帶單位展示

2:回收策略

maxmemory-policy:回收策略

? volatile-lru:它允許 Redis 從整個(gè)數(shù)據(jù)集中挑選最近最少使用的 key 進(jìn)行刪除

? volatile-ttl按照key的過期時(shí)間進(jìn)行淘汰?

? volatile-random:從已設(shè)置過期時(shí)間的數(shù)據(jù)集合中隨機(jī)挑選數(shù)據(jù)淘汰;

? allkeys-lru:使用 LRU 算法從所有數(shù)據(jù)集合中淘汰數(shù)據(jù);

? allkeys-random:從數(shù)據(jù)集合中任意選擇數(shù)據(jù)淘汰;

? noeviction:禁止淘汰數(shù)據(jù)(默認(rèn)值)

備注:

設(shè)置key的過期時(shí)間

expire v1 10

v1的過期時(shí)間為10秒

備注:

當(dāng) Redis 由于內(nèi)存壓力需要回收一個(gè) key 時(shí),Redis 首先考慮的不是回收最舊的數(shù)據(jù),而是在最近最少使用的 key 或即將過期的 key 中隨機(jī)選擇一個(gè) key,從數(shù)據(jù)集中刪除

redis設(shè)置密碼

  一、設(shè)置方法

  方法一:通過配置文件redis.conf設(shè)置密碼

  找到requirepass關(guān)鍵字,后面就是跟的密碼,默認(rèn)情況下是注釋掉的,即默認(rèn)不需要密碼,如下:

?  打開注釋,設(shè)置為自己的密碼,重啟即可

  方法二:通過命名設(shè)置密碼

  使用redis-cli連接上redis,執(zhí)行如下命令

config set requirepass 123456

  執(zhí)行完畢,無需重啟,退出客戶端,重新登錄就需要輸入密碼了

  二、連接方法

1、連接時(shí)輸入密碼

[root@localhost bin]# ./redis-cli -a 123456

2、先連接再輸入密碼

[root@localhost bin]# ./redis-cli127.0.0.1:6379> auth 123456

  三、關(guān)閉方法

[root@localhost bin]# ./redis-cli -a 123456 shutdown

  四、區(qū)別

1)修改配置文件設(shè)置的密碼永久生效;使用命令設(shè)置的密碼臨時(shí)生效,重啟后失效

2)修改配置文件設(shè)置的密碼,需要重啟生效;使用命令設(shè)置的密碼,退出后再登錄生效,重啟后失效

3)命令的優(yōu)先級(jí)高于配置文件的優(yōu)先級(jí)

http://aloenet.com.cn/news/44028.html

相關(guān)文章:

  • 怎么成立網(wǎng)站企業(yè)網(wǎng)站推廣的形式有
  • 德陽網(wǎng)站建設(shè)平臺(tái)永久免費(fèi)不收費(fèi)的污染app
  • 網(wǎng)站開發(fā)個(gè)人簡(jiǎn)歷網(wǎng)絡(luò)營(yíng)銷服務(wù)平臺(tái)
  • 網(wǎng)站丟失了怎么辦啊西安seo培訓(xùn)機(jī)構(gòu)
  • 阿壩州城鄉(xiāng)建設(shè)網(wǎng)站百度競(jìng)價(jià)廣告
  • 寧波網(wǎng)站推廣平臺(tái)推薦深圳排名seo公司
  • 免費(fèi)一級(jí)域名網(wǎng)站網(wǎng)站一般需要怎么推廣
  • 360的網(wǎng)站排名怎么做seo排名優(yōu)化app
  • 企業(yè)網(wǎng)站的主要功能愛站網(wǎng)ip反查域名
  • 做國(guó)外網(wǎng)站獨(dú)特密碼有什么平臺(tái)可以推廣信息
  • 徐州網(wǎng)站建設(shè)公司百度推廣開戶費(fèi)用標(biāo)準(zhǔn)
  • 大旺建設(shè)局網(wǎng)站自己做網(wǎng)站的流程
  • 滕州網(wǎng)站建設(shè)制作b2b商務(wù)平臺(tái)
  • 政府類門戶網(wǎng)站cms抖音推廣引流
  • 青島網(wǎng)站建設(shè)全包谷歌seo是做什么的
  • 網(wǎng)站怎么推廣網(wǎng)絡(luò)營(yíng)銷是以什么為基礎(chǔ)
  • 高創(chuàng)園網(wǎng)站建設(shè)方案怎樣制作網(wǎng)站
  • 宿遷裝飾網(wǎng)站建設(shè)公司排名seo是什么工作內(nèi)容
  • 網(wǎng)站建設(shè)服務(wù)費(fèi)屬于站長(zhǎng)工具是什么
  • 成都 企業(yè)網(wǎng)站建設(shè)公司價(jià)格百度站長(zhǎng)管理平臺(tái)
  • 臺(tái)州做網(wǎng)站的公司seo優(yōu)化實(shí)訓(xùn)總結(jié)
  • github做網(wǎng)站空間地推掃碼平臺(tái)
  • wordpress 焦點(diǎn)圖seo搜索引擎優(yōu)化課程
  • 優(yōu)秀網(wǎng)站設(shè)計(jì)書籍微信公眾號(hào)平臺(tái)官網(wǎng)
  • 返利網(wǎng)網(wǎng)站怎么做北京seo推廣服務(wù)
  • 深圳龍華大浪做網(wǎng)站公司知乎營(yíng)銷平臺(tái)
  • 做搜狗手機(jī)網(wǎng)站快速排十大中文網(wǎng)站排名
  • 做網(wǎng)站首頁需要什么資料推廣app用什么平臺(tái)比較好
  • 太原自助建站軟件快速排名教程
  • 石家莊做網(wǎng)站的公司有哪些足球世界排名一覽表