




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、RedisRedis開源開源key-valuekey-value存儲系統(tǒng)存儲系統(tǒng)曲延從曲延從目錄索引目錄索引 RedisRedis簡介簡介 RedisRedis安裝安裝 RedisRedis配置配置 RedisRedis支持的數(shù)據(jù)類型支持的數(shù)據(jù)類型 RedisRedis的功能的功能 持久化持久化 ( persistence ) 主從復(fù)制主從復(fù)制( master-slave replication ) 事物支持事物支持( transaction ) 發(fā)布訂閱發(fā)布訂閱( pub/sub ) 管道管道 ( pipeline ) 虛擬內(nèi)存虛擬內(nèi)存( vm ) RedisRedis性能性能 RedisR
2、edis部署部署 RedisRedis應(yīng)用場景應(yīng)用場景 RedisRedis總結(jié)總結(jié)RedisRedis簡介簡介 Redis是一款開源的、高性能的鍵-值存儲(key-value store)。它常被稱作是一款數(shù)據(jù)結(jié)構(gòu)服務(wù)器(data structure server)。Redis的鍵值可以包括字符串(strings)類型,同時它還包括哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等數(shù)據(jù)類型。 對于這些數(shù)據(jù)類型,你可以執(zhí)行原子操作。例如:對字符串進行附加操作(append);遞增哈希中的值;向列表中增加元素;計算集合的交集、并集與差集等。 為了獲
3、得優(yōu)異的性能,Redis采用了內(nèi)存中(in-memory)數(shù)據(jù)集(dataset)的方式。同時,Redis支持?jǐn)?shù)據(jù)的持久化,你可以每隔一段時間將數(shù)據(jù)集轉(zhuǎn)存到磁盤上(snapshot),或者在日志尾部追加每一條操作命令(append only file,aof)。 RedisRedis簡介簡介 Redis同樣支持主從復(fù)制(master-slave replication),并且具有非??焖俚姆亲枞状瓮剑?non-blocking first synchronization)、網(wǎng)絡(luò)斷開自動重連等功能。同時Redis還具有其它一些特性,其中包括簡單的事物支持、發(fā)布訂閱 ( pub/sub)、管道
4、(pipeline)和虛擬內(nèi)存(vm)等 。 Redis具有豐富的客戶端,支持現(xiàn)階段流行的大多數(shù)編程語言。php常用的是phpredis( http:/redis.io/clients )RedisRedis安裝安裝 下載最新穩(wěn)定版 redis-2.2.11 ( http:/redis.io/download ) tar zxvf redis-2.2.11 解壓縮 cd src 進入src目錄 make 編譯Redis make test 可以測試一下(本步可省略) make install 安裝,默認(rèn)安裝目錄是 /usr/local/bin,生成如圖5個二進制文件,可以將其拷到新建目錄下,例
5、如: /usr/local/redis/binRedisRedis安裝安裝 cp 源碼/src/redis.conf /usr/local/redis/etc 配置文件復(fù)制 cd /usr/local/redis ./bin/redis-server ./etc/redis.conf 啟動Redis服務(wù) 此時redis已經(jīng)運行,但要獲得好的性能,還需要對配置文件進行合理的配置RedisRedis配置配置1. Redis默認(rèn)不是以守護進程的方式運行,可以通過該配置項修改,使用yes啟用守護進程 daemonizedaemonize no no2. 當(dāng)Redis以守護進程方式運行時,Redis默認(rèn)
6、會把pid寫入/var/run/redis.pid文件,可以通過pidfile指定 pidfilepidfile / /var/run/redis.pidvar/run/redis.pid3. 指定Redis監(jiān)聽端口,默認(rèn)端口為6379,作者在自己的一篇博文中解釋了為什么選用6379作為默認(rèn)端口,因為6379在手機按鍵上MERZ對應(yīng)的號碼,而MERZ取自意大利歌女Alessia Merz的名字 port 6379port 63794. 綁定的主機地址 bind bind 5.當(dāng) 客戶端閑置多長時間后關(guān)閉連接,如果指定為0,表示關(guān)閉該功能 timeout 30
7、0timeout 3006. 指定日志記錄級別,Redis總共支持四個級別:debug、verbose、notice、warning,默認(rèn)為verbose loglevelloglevel verbose verboseRedisRedis配置配置7. 日志記錄方式,默認(rèn)為標(biāo)準(zhǔn)輸出,如果配置Redis為守護進程方式運行,而這里又配置為日志記錄方式為標(biāo)準(zhǔn)輸出,則日志將會發(fā)送給/dev/null logfilelogfile stdoutstdout8. 設(shè)置數(shù)據(jù)庫的數(shù)量,默認(rèn)數(shù)據(jù)庫為0,可以使用SELECT 命令在連接上指定數(shù)據(jù)庫id databases 16databases 169. 指定在
8、多長時間內(nèi),有多少次更新操作,就將數(shù)據(jù)同步到數(shù)據(jù)文件,可以多個條件配合 save save Redis默認(rèn)配置文件中提供了三個條件: save 900 1save 900 1 save 300 10save 300 10 save 60 10000save 60 10000 分別表示900秒(15分鐘)內(nèi)有1個更改,300秒(5分鐘)內(nèi)有10個更改以及60秒內(nèi)有10000個更改。10. 指定存儲至本地數(shù)據(jù)庫時是否壓縮數(shù)據(jù),默認(rèn)為yes,Redis采用LZF壓縮,如果為了節(jié)省CPU時間,可以關(guān)閉該選項,但會導(dǎo)致數(shù)據(jù)庫文件變的巨大 rdbcompressionrdbcompression yes
9、yesRedisRedis配置配置11. 指定本地數(shù)據(jù)庫文件名,默認(rèn)值為dump.rdb dbfilenamedbfilename dump.rdbdump.rdb12. 指定本地數(shù)據(jù)庫存放目錄 dir ./dir ./13. 設(shè)置當(dāng)本機為slav服務(wù)時,設(shè)置master服務(wù)的IP地址及端口,在Redis啟動時,它會自動從master進行數(shù)據(jù)同步 slaveofslaveof 14. 當(dāng)master服務(wù)設(shè)置了密碼保護時,slav服務(wù)連接master的密碼 masterauthmasterauth 15. 設(shè)置Redis連接密碼,如果配置了連接密碼,客戶端在連接Redis時需要通過AUTH 命令
10、提供密碼,默認(rèn)關(guān)閉 requirepassrequirepass foobaredfoobared16. 設(shè)置同一時間最大客戶端連接數(shù),默認(rèn)無限制,Redis可以同時打開的客戶端連接數(shù)為Redis進程可以打開的最大文件描述符數(shù),如果設(shè)置 maxclients 0,表示不作限制。當(dāng)客戶端連接數(shù)到達限制時,Redis會關(guān)閉新的連接并向客戶端返回max number of clients reached錯誤信息 maxclientsmaxclients 128 128RedisRedis配置配置17. 指定Redis最大內(nèi)存限制,Redis在啟動時會把數(shù)據(jù)加載到內(nèi)存中,達到最大內(nèi)存后,Redis會先
11、嘗試清除已到期或即將到期的Key,當(dāng)此方法處理 后,仍然到達最大內(nèi)存設(shè)置,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis新的vm機制,會把Key存放內(nèi)存,Value會存放在swap區(qū) maxmemorymaxmemory 18. 指定是否在每次更新操作后進行日志記錄,Redis在默認(rèn)情況下是異步的把數(shù)據(jù)寫入磁盤,如果不開啟,可能會在斷電時導(dǎo)致一段時間內(nèi)的數(shù)據(jù)丟失。因為 redis本身同步數(shù)據(jù)文件是按上面save條件來同步的,所以有的數(shù)據(jù)會在一段時間內(nèi)只存在于內(nèi)存中。默認(rèn)為no appendonlyappendonly no no19. 指定更新日志文件名,默認(rèn)為appendonly.
12、aof appendfilenameappendfilename appendonly.aofappendonly.aof20. 指定更新日志條件,共有3個可選值: nono:表示等操作系統(tǒng)進行數(shù)據(jù)緩存同步到磁盤(快) alwaysalways:表示每次更新操作后手動調(diào)用fsync()將數(shù)據(jù)寫到磁盤(慢,安全) everyseceverysec:表示每秒同步一次(折衷,默認(rèn)值) appendfsyncappendfsync everyseceverysecRedisRedis配置配置21. 指定是否啟用虛擬內(nèi)存機制,默認(rèn)值為no,簡單的介紹一下,VM機制將數(shù)據(jù)分頁存放,由Redis將訪問量較少
13、的頁即冷數(shù)據(jù)swap到磁盤上,訪問多的頁面由磁盤自動換出到內(nèi)存中(在后面的文章我會仔細分析Redis的VM機制) vmvm-enabled no-enabled no22. 虛擬內(nèi)存文件路徑,默認(rèn)值為/tmp/redis.swap,不可多個Redis實例共享 vmvm-swap-file /-swap-file /tmp/redis.swaptmp/redis.swap23. 將所有大于vm-max-memory的數(shù)據(jù)存入虛擬內(nèi)存,無論vm-max-memory設(shè)置多小,所有索引數(shù)據(jù)都是內(nèi)存存儲的(Redis的索引數(shù)據(jù) 就是keys),也就是說,當(dāng)vm-max-memory設(shè)置為0的時候,其實
14、是所有value都存在于磁盤。默認(rèn)值為0 vmvm-max-memory 0-max-memory 024. Redis swap文件分成了很多的page,一個對象可以保存在多個page上面,但一個page上不能被多個對象共享,vm-page-size是要根據(jù)存儲的 數(shù)據(jù)大小來設(shè)定的,作者建議如果存儲很多小對象,page大小最好設(shè)置為32或者64bytes;如果存儲很大大對象,則可以使用更大的page,如果不 確定,就使用默認(rèn)值 vmvm-page-size 32-page-size 3225. 設(shè)置swap文件中的page數(shù)量,由于頁表(一種表示頁面空閑或使用的bitmap)是在放在內(nèi)存中的
15、,在磁盤上每8個pages將消耗1byte的內(nèi)存。 vmvm-pages 134217728-pages 134217728RedisRedis配置配置26. 設(shè)置訪問swap文件的線程數(shù),最好不要超過機器的核數(shù),如果設(shè)置為0,那么所有對swap文件的操作都是串行的,可能會造成比較長時間的延遲。默認(rèn)值為4 vmvm-max-threads 4-max-threads 427. 設(shè)置在向客戶端應(yīng)答時,是否把較小的包合并為一個包發(fā)送,默認(rèn)為開啟 glueoutputbufglueoutputbuf yes yes28. 指定在超過一定的數(shù)量或者最大的元素超過某一臨界值時,采用一種特殊的哈希算法 h
16、ash-max-hash-max-zipmapzipmap-entries 64-entries 64 hash-max-hash-max-zipmapzipmap-value 512-value 51229. 指定是否激活重置哈希,默認(rèn)為開啟 activerehashingactiverehashing yes yes30. 指定包含其它的配置文件,可以在同一主機上多個Redis實例之間使用同一份配置文件,而同時各個實例又擁有自己的特定配置文件 include /path/to/include /path/to/local.conflocal.confRedisRedis支持的數(shù)據(jù)類型支持的
17、數(shù)據(jù)類型 Keys 非二進制安全的字符類型( not binary-safe strings ) ValuesStrings (Binary-safe strings )Lists (Lists of binary-safe strings )Sets (Sets of binary-safe strings)Sorted sets (Sorted sets of binary-safe strings )HashKeyKeyredis本質(zhì)上一個key-value 數(shù)據(jù)庫,所以我們首先來看看他的key.首先key也是字符串類型,由于key不是binary safe的字符串,所以像“my key
18、”和“mykeyn”這樣包含空格和換行的key是不允許的。我們在使用的時候可以自己定義一個Key的格式。例如 object-type:id:field Key不要太長。占內(nèi)存,查詢慢。Key不要太短。u:1000:pwd 不如 user:1000:password 可讀性好KeyKey相關(guān)命令相關(guān)命令exits key 測試指定key是否存在,返回1表示存在,0不存在del key1 key2 .keyN 刪除給定key,返回刪除key的數(shù)目,0表示給定key都不存在type key 返回給定key的value類型。返回 none 表示不存在,key有string字符類型,list 鏈表類型
19、set 無序集合類型等.keys pattern 返回匹配指定模式的所有key(支持*,?,abc 的方式),下面給個例子KeyKey相關(guān)命令相關(guān)命令randomkey 返回從當(dāng)前數(shù)據(jù)庫中隨機選擇的一個key,如果當(dāng)前數(shù)據(jù)庫是空的,返回空串 rename oldkey newkey 原子的重命名一個key,如果newkey存在,將會被覆蓋,返回1表示成功,0失敗。失敗可能是oldkey不存在或者和newkey相同renamenx oldkey newkey 同上,但是如果newkey存在返回失敗dbsize 返回當(dāng)前數(shù)據(jù)庫的key數(shù)量expire key seconds 為key指定過期時間,
20、單位是秒。返回1成功,0表示key已經(jīng)設(shè)置過過期時間或者不存在ttl key 返回設(shè)置了過期時間的key的剩余過期秒數(shù), -1表示key不存在或者沒有設(shè)置過過期時間select db-index 通過索引選擇數(shù)據(jù)庫,默認(rèn)連接的數(shù)據(jù)庫所有是0,默認(rèn)數(shù)據(jù)庫數(shù)是16個。返回1表示成功,0失敗move key db-index 將key從當(dāng)前數(shù)據(jù)庫移動到指定數(shù)據(jù)庫。返回1成功。0 如果key不存在,或者已經(jīng)在指定數(shù)據(jù)庫中flushdb 刪除當(dāng)前數(shù)據(jù)庫中所有key,此方法不會失敗。慎用flushall 刪除所有數(shù)據(jù)庫中的所有key,此方法不會失敗。更加慎用StringStringstring是redis
21、最基本的類型,而且string類型是二進制安全的。redis的string可以包含任何數(shù)據(jù)。包括jpg圖片或者序列化的對象。最大上限是1G字節(jié)。 如果只用string類型,redis就可以被看作加上持久化特性的memcached String String 相關(guān)命令相關(guān)命令set key value 設(shè)置key對應(yīng)的值為string類型的value,返回1表示成功,0失敗setnx key value 同上,如果key已經(jīng)存在,返回0 。nx 是not exist的意思get key 獲取key對應(yīng)的string值,如果key不存在返回nilgetset key value 設(shè)置key的值,并
22、返回key的舊值。如果key不存在返回nilmget key1 key2 . keyN 一次獲取多個key的值,如果對應(yīng)key不存在,則對應(yīng)返回nil。下面是個實驗, nonexisting不存在,對應(yīng)返回nilString String 相關(guān)命令相關(guān)命令mset key1 value1 . keyN valueN 一次設(shè)置多個key的值,成功返回1表示所有的值都設(shè)置了,失敗返回0表示沒有任何值被設(shè)置msetnx key1 value1 . keyN valueN 同上,但是不會覆蓋已經(jīng)存在的keyincr key 對key的值做加加操作,并返回新的值。注意incr一個不是int的value會
23、返回錯誤,incr一個不存在的key,則設(shè)置key為1decr key 同上,但是做的是減減操作,decr一個不存在key,則設(shè)置key為-1incrby key integer 同incr,加指定值 ,key不存在時候會設(shè)置key,并認(rèn)為原來的value是 0decrby key integer 同decr,減指定值。decrby完全是為了可讀性,我們完全可以通過incrby一個負(fù)值來實現(xiàn)同樣效果,反之一樣。String String 相關(guān)命令相關(guān)命令append key value 給指定key的字符串值追加value,返回新字符串值的長度。下面給個例子substr key start e
24、nd 返回截取過的key的字符串值,注意并不修改key的值。下標(biāo)是從0開始的。ListListredis的list類型其實就是一個每個子元素都是string類型的雙向鏈表。我們可以通過push,pop操作從鏈表的頭部或者尾部添加刪除元素。這使得list既可以用作棧,也可以用作隊列。list的pop操作還有阻塞版本的。當(dāng)我們lrpop一個list對象是,如果list是空,或者不存在,會立即返回nil。但是阻塞版本的blrpop可以則可以阻塞,當(dāng)然可以加超時時間,超時后也會返回nil。為什么要阻塞版本的pop呢,主要是為了避免輪詢。舉個簡單的例子如果我們用list來實現(xiàn)一個工作隊列。執(zhí)行任務(wù)的th
25、read可以調(diào)用阻塞版本的pop去獲取任務(wù)這樣就可以避免輪詢?nèi)z查是否有任務(wù)存在。當(dāng)任務(wù)來時候工作線程可以立即返回,也可以避免輪詢帶來的延遲。 ListList相關(guān)命令相關(guān)命令lpush key string 在key對應(yīng)list的頭部添加字符串元素,返回1表示成功,0表示key存在且不是list類型rpush key string 同上,在尾部添加llen key 返回key對應(yīng)list的長度,key不存在返回0,如果key對應(yīng)類型不是list返回錯誤lrange key start end 返回指定區(qū)間內(nèi)的元素,下標(biāo)從0開始,負(fù)值表示從后面計算,-1表示倒數(shù)第一個元素 ,key不存在返回空
26、列表ltrim key start end 截取list,保留指定區(qū)間內(nèi)元素,成功返回1,key不存在返回錯誤lset key index value 設(shè)置list中指定下標(biāo)的元素值,成功返回1,key或者下標(biāo)不存在返回錯誤lrem key count value 從key對應(yīng)list中刪除count個和value相同的元素。count為0時候刪除全部lpop key 從list的頭部刪除元素,并返回刪除元素。如果key對應(yīng)list不存在或者是空返回nil,如果key對應(yīng)值不是list返回錯誤ListList相關(guān)命令相關(guān)命令rpop 同上,但是從尾部刪除blpop key1.keyN time
27、out 從左到右掃描返回對第一個非空list進行l(wèi)pop操作并返回,比如blpop list1 list2 list3 0 ,如果list不存在,list2,list3都是非空則對list2做lpop并返回從list2中刪除的元素。如果所有的list都是空或不存在,則會阻塞timeout秒,timeout為0表示一直阻塞。當(dāng)阻塞時,如果有client對key1.keyN中的任意key進行push操作,則第一在這個key上被阻塞的client會立即返回。如果超時發(fā)生,則返回nil。brpop 同blpop,一個是從頭部刪除一個是從尾部刪除rpoplpush srckey destkey 從src
28、key對應(yīng)list的尾部移除元素并添加到destkey對應(yīng)list的頭部,最后返回被移除的元素值,整個操作是原子的.如果srckey是空或者不存在返回nilSetSetredis的set是string類型的無序集合。set元素最大可以包含(2的32次方-1)個元素。set的是通過hash table實現(xiàn)的,hash table會隨著添加或者刪除自動的調(diào)整大小關(guān)于set集合類型除了基本的添加刪除操作,其他有用的操作還包含集合的取并集(union),交集(intersection),差集(difference)。通過這些操作可以很容易的實現(xiàn)sns中的好友推薦和blog的tag功能。SetSet相關(guān)
29、命令相關(guān)命令sadd key member 添加一個string元素到,key對應(yīng)的set集合中,成功返回1,如果元素以及在集合中返回0,key對應(yīng)的set不存在返回錯誤srem key member 從key對應(yīng)set中移除給定元素,成功返回1,如果member在集合中不存在或者key不存在返回0,如果key對應(yīng)的不是set類型的值返回錯誤spop key 刪除并返回key對應(yīng)set中隨機的一個元素,如果set是空或者key不存在返回nilsrandmember key 同spop,隨機取set中的一個元素,但是不刪除元素smove srckey dstkey member 從srckey對
30、應(yīng)set中移除member并添加到dstkey對應(yīng)set中,整個操作是原子的。成功返回1,如果member在srckey中不存在返回0,如果key不是set類型返回錯誤scard key 返回set的元素個數(shù),如果set是空或者key不存在返回0sismember key member 判斷member是否在set中,存在返回1,0表示不存在或者key不存在sinter key1 key2.keyN 返回所有給定key的交集sinterstore dstkey key1.keyN 同sinter,但是會同時將交集存到dstkey下SetSet相關(guān)命令相關(guān)命令sunion key1 key2.k
31、eyN 返回所有給定key的并集sunionstore dstkey key1.keyN 同sunion,并同時保存并集到dstkey下sdiff key1 key2.keyN 返回所有給定key的差集sdiffstore dstkey key1.keyN 同sdiff,并同時保存差集到dstkey下smembers key 返回key對應(yīng)set的所有元素,結(jié)果是無序的Sorted setSorted set和set一樣sorted set也是string類型元素的集合,不同的是每個元素都會關(guān)聯(lián)一個double類型的score。sorted set的實現(xiàn)是skip list和hash tabl
32、e的混合體。當(dāng)元素被添加到集合中時,一個元素到score的映射被添加到hash table中,另一個score到元素的映射被添加到skip list并按照score排序,所以就可以有序的獲取集合中的元素。 Sorted set Sorted set 相關(guān)命令相關(guān)命令zadd key score member 添加元素到集合,元素在集合中存在則更新對應(yīng)scorezrem key member 刪除指定元素,1表示成功,如果元素不存在返回0zincrby key incr member 增加對應(yīng)member的score值,然后移動元素并保持skip list有序。返回更新后的score值zrank
33、 key member 返回指定元素在集合中的排名(下標(biāo),非score),集合中元素是按score從小到大排序的zrevrank key member 同上,但是集合中元素是按score從大到小排序zrange key start end 類似lrange操作從集合中取指定區(qū)間的元素。返回的是有序結(jié)果zrevrange key start end 同上,返回結(jié)果是按score逆序的zrangebyscore key min max 返回集合中score在給定區(qū)間的元素zcount key min max 返回集合中score在給定區(qū)間的數(shù)量zcard key 返回集合中元素個數(shù)zscore k
34、ey element 返回給定元素對應(yīng)的scorezremrangebyrank key min max 刪除集合中排名在給定區(qū)間的元素zremrangebyscore key min max 刪除集合中score在給定區(qū)間的元素HashHashredis hash是一個string類型的field和value的映射表。hash特別適合用于存儲對象。相較于將對象的每個字段存成單個string類型。將一個對象存儲在hash類型中會占用更少的內(nèi)存,并且可以更方便的存取整個對象。HashHash相關(guān)命令相關(guān)命令hset key field value 設(shè)置hash field為指定值,如果key不存
35、在,則先創(chuàng)建hget key field 獲取指定的hash fieldhmget key filed1.fieldN 獲取全部指定的hash filedhmset key filed1 value1 . filedN valueN 同時設(shè)置hash的多個fieldhincrby key field integer 將指定的hash filed 加上給定值hexists key field 測試指定field是否存在hdel key field 刪除指定的hash fieldhlen key 返回指定hash的field數(shù)量hkeys key 返回hash的所有fieldhvals key 返
36、回hash的所有valuehgetall 返回hash的所有filed和value持久化持久化redis是一個支持持久化的內(nèi)存數(shù)據(jù)庫,也就是說redis需要經(jīng)常將內(nèi)存中的數(shù)據(jù)同步到磁盤來保證持久化,這是相對memcache來說的一個大的優(yōu)勢。redis支持兩種持久化方式,一種是 Snapshotting(快照)也是默認(rèn)方式,另一種是Append-only file(縮寫aof)的方式。 SnapshottingSnapshotting 快照是默認(rèn)的持久化方式。這種方式將內(nèi)存中數(shù)據(jù)以快照的方式寫入到二進制文件中,默認(rèn)的文件名為dump.rdb。可以配置自動做快照持久 化的方式。我們可以配置red
37、is在n秒內(nèi)如果超過m個key被修改就自動做快照,下面是默認(rèn)的快照保存配置save 900 1 #900秒內(nèi)如果超過1個key被修改,則發(fā)起快照保存save 300 10 #300秒內(nèi)容如超過10個key被修改,則發(fā)起快照保存save 60 10000持久化持久化Append-only fileAppend-only file aof 比快照方式有更好的持久化性,是由于在使用aof持久化方式時,redis會將每一個收到的寫命令都通過write函數(shù)追加到文件中(默認(rèn)是 appendonly.aof)。當(dāng)redis重啟時會通過重新執(zhí)行文件中保存的寫命令來在內(nèi)存中重建整個數(shù)據(jù)庫的內(nèi)容。當(dāng)然由于os會
38、在內(nèi)核中緩存 write做的修改,所以可能不是立即寫到磁盤上。這樣aof方式的持久化也還是有可能會丟失部分修改。不過我們可以通過配置文件告訴redis我們想要 通過fsync函數(shù)強制os寫入到磁盤的時機。有三種方式如下(默認(rèn)是:每秒fsync一次)appendonly yes /啟用aof持久化方式# appendfsync always /每次收到寫命令就立即強制寫入磁盤,最慢的,但是保證完全的持久化,不推薦使用appendfsync everysec /每秒鐘強制寫入磁盤一次,在性能和持久化方面做了很好的折中,推薦# appendfsync no /完全依賴os,性能最好,持久化沒保證主從
39、復(fù)制主從復(fù)制主從復(fù)制允許多個slave server擁有和master server相同的數(shù)據(jù)庫副本。下面是關(guān)于redis主從復(fù)制的一些特點 1.master可以有多個slave 2.除了多個slave連到相同的master外,slave也可以連接其他slave形成圖狀結(jié)構(gòu) 3.主從復(fù)制不會阻塞master。也就是說當(dāng)一個或多個slave與master進行初次同步數(shù)據(jù)時,master可以繼續(xù)處理client發(fā)來的請求。相反slave在初次同步數(shù)據(jù)時則會阻塞,不能處理client的請求。 4.主從復(fù)制可以用來提高系統(tǒng)的可伸縮性(我們可以用多個slave 專門用于client的讀請求,比如sort
40、操作可以使用slave來處理),也可以用來做簡單的數(shù)據(jù)冗余。 5.可以在master禁用數(shù)據(jù)持久化,只需要注釋掉master 配置文件中的所有save配置,然后只在slave上配置數(shù)據(jù)持久化。事物事物事物演示事物演示發(fā)布訂閱(發(fā)布訂閱(pub/sub pub/sub )發(fā)布訂閱(pub/sub)是一種消息通信模式。訂閱者可以通過subscribe和psubscribe命令向redis server訂閱自己感興趣的消息類型,redis將消息類型稱為通道(channel)。當(dāng)發(fā)布者通過publish命令向redis server發(fā)送特定類型的消息時。訂閱該消息類型的全部client都會收到此消息。
41、這里消息的傳遞是多對多的。一個client可以訂閱多個 channel,也可以向多個channel發(fā)送消息。 Subscribe Unsubscribe Psubscribe Punsubscribe Publish發(fā)布訂閱(發(fā)布訂閱(pub/sub pub/sub )演示)演示客戶端1客戶端2客戶端3發(fā)布訂閱(發(fā)布訂閱(pub/sub pub/sub )演示)演示客戶端1客戶端2客戶端3管道(管道(pipelinepipeline)redis是一個cs模式的tcp server,使用和http類似的請求響應(yīng)協(xié)議。一個client可以通過一個socket連接發(fā)起多個請求命令。每個請求命令發(fā)出后
42、client通常 會阻塞并等待redis服務(wù)處理,redis處理完后請求命令后會將結(jié)果通過響應(yīng)報文返回給client。基本的通信過程如下Client: INCR XServer: 1Client: INCR XServer: 2Client: INCR XServer: 3Client: INCR XServer: 4基本上四個命令需要8個tcp報文才能完成。由于通信會有網(wǎng)絡(luò)延遲,假如從client和server之間的包傳輸時間需要0.125秒。那么上面的四個命令8個報文至少會需要1秒才能完成。 管道(管道(pipelinepipeline)利用pipeline的方式從client打包多條命令
43、一起發(fā)出,不需要等待單條命令的響應(yīng)返回,而redis服務(wù)端會處理完多條命令后會將多條命令的處理結(jié)果打包到一起返回給客戶端。通信過程如下Client: INCR XClient: INCR XClient: INCR XClient: INCR XServer: 1Server: 2Server: 3Server: 4虛擬內(nèi)存(虛擬內(nèi)存(vmvm)(作者已放棄)(作者已放棄)redis沒有使用os提供的虛擬內(nèi)存機制而是自己實現(xiàn)了自己的虛擬內(nèi)存機制 ,但是思路和目的都是相同的。就是暫時把不經(jīng)常訪問的數(shù)據(jù)從內(nèi)存交換到磁盤中,從而騰出內(nèi)存空間用于其他需要訪問的數(shù)據(jù)。尤其是對于redis這樣的內(nèi)存數(shù)據(jù)庫
44、,內(nèi)存總是不夠用的。除了可以將數(shù)據(jù)分割到多個redis server外。另外的能夠提高數(shù)據(jù)庫容量的辦法就是使用vm把那些不經(jīng)常訪問的數(shù)據(jù)交換的磁盤上。如果我們的存儲的數(shù)據(jù)總是有少部分?jǐn)?shù)據(jù)被經(jīng)常訪問,大 部分?jǐn)?shù)據(jù)很少被訪問,對于網(wǎng)站來說確實總是只有少量用戶經(jīng)常活躍。當(dāng)少量數(shù)據(jù)被經(jīng)常訪問時,使用vm不但能提高單臺redis server數(shù)據(jù)庫的容量,而且也不會對性能造成太多影響。 vm-enabled yes #開啟vm功能 vm-swap-file /tmp/redis.swap #交換的value保存的文件路徑/tmp/redis.swap vm-max-memory 1000000 #最大內(nèi)存上限,超過后開始交換value到磁盤文件 vm-page-size 32 #每個頁面的大小32個字節(jié) vm-pages 134217728 #最多使用在文件中使用多少頁面 vm-max-threads 4 #用于執(zhí)行value對象換入換出的工作線程數(shù)量,0表示不使用工作線程redisredis性能性能RedisRedis部署部署Redis(Slave)Redis(Master)Applicationsmysqlwritereplication readr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 彩鋼板墻施工方案
- 膝部護理知識培訓(xùn)課件
- 關(guān)于按揭車合同范例
- 半包個人采購合同范例
- 廠房電力改造合同范例
- 公司財務(wù)部門的組織架構(gòu)協(xié)同調(diào)整計劃
- 隔離區(qū)的安全管理實踐計劃
- 與同事建立良好關(guān)系的練習(xí)計劃
- 財務(wù)預(yù)測的誤差分析與調(diào)整計劃
- 倉庫信息化建設(shè)計劃
- 第8課 隋唐政治演變與民族交融(課件)-【中職專用】《中國歷史》魅力課堂教學(xué)三件套(高教版2023?基礎(chǔ)模塊)
- 2024-2025學(xué)年小學(xué)信息技術(shù)(信息科技)第六冊電子工業(yè)版(2022)教學(xué)設(shè)計合集
- 《心理健康教育主題班會》主題
- 干部考察談話記錄范文
- (2023版)機動車駕駛培訓(xùn)教學(xué)與考試大綱
- 面館合作伙伴合同協(xié)議書
- GB 30254-2024高壓三相籠型異步電動機能效限定值及能效等級
- 醫(yī)學(xué)課件胸腔穿刺術(shù)3
- 重大事故隱患判定標(biāo)準(zhǔn)與相關(guān)事故案例培訓(xùn)課件
- 車間現(xiàn)場管理培訓(xùn)
- 部編版《道德與法治》六年級下冊第6課《探訪古代文明》精美課件(第1課時)
評論
0/150
提交評論