




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Redis IntroductionAlex Zhu REmote DIctionary ServerLatest Stable Release 2.6.16www.redis.ioTCP:6379 Alessia MerzTape is Dead,Disk is Tape,Flash is Disk,RAM Locality is King - Jim Gray1944 2007?Whats Redis? Redis是一款開源的、高性能的鍵-值存儲(key-value store)。它常被稱作是一款數據結構服務器(data structure server)。Redis的鍵值可以包括字符串(
2、strings)類型,同時它還包括哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等數據類型。 對于這些數據類型,你可以執行原子操作。例如:對字符串進行附加操作(append);遞增哈希中的值;向列表中增加元素;計算集合的交集、并集與差集等。Whats Redis? 為了獲得優異的性能,Redis采用了內存中(in-memory)數據集(dataset)的方式。同時,Redis支持數據的持久化,你可以每隔一段時間將數據集轉存到磁盤上(snapshot),或者在日志尾部追加每一條操作命令(append only file,aof)。 Whats R
3、edis? Redis同樣支持主從復制(master-slave replication),并且具有非常快速的非阻塞首次同步( non-blocking first synchronization)、網絡斷開自動重連等功能。同時Redis還具有其它一些特性,其中包括簡單的事物支持、發布訂閱 ( pub/sub)、管道(pipeline)和虛擬內存(vm)等 。 Redis具有豐富的客戶端,支持現階段流行的大多數編程語言。php常用的是phpredis( http:/redis.io/clients )Redis & Memcache 都是Key-Value存儲 Redis可以存儲到磁盤 Red
4、is的存儲類型更豐富 同樣支持主從復制 Memcache支持二進制數據存儲(圖像,聲音) 重啟系統后Memcache不會恢復 Redis更像數據庫Installation make & make installFrameworkRedis PerformanceString string是redis最基本的類型,而且string類型是二進制安全的。 redis的string可以包含任何數據。包括jpg圖片或者序列化的對象。 最大上限是1G字節。 如果只用string類型,redis就可以被看作加上持久化特性的memcached String 相關命令相關命令set key value 設置ke
5、y對應的值為string類型的value,返回1表示成功,0失敗setnx key value 同上,如果key已經存在,返回0 。nx 是not exist的意思get key 獲取key對應的string值,如果key不存在返回nilgetset key value 設置key的值,并返回key的舊值。如果key不存在返回nilmget key1 key2 . keyN 一次獲取多個key的值,如果對應key不存在,則對應返回nil。下面是個實驗, nonexisting不存在,對應返回nilString 相關命令相關命令mset key1 value1 . keyN valueN 一次設
6、置多個key的值,成功返回1表示所有的值都設置了,失敗返回0表示沒有任何值被設置msetnx key1 value1 . keyN valueN 同上,但是不會覆蓋已經存在的keyincr key 對key的值做加加操作,并返回新的值。注意incr一個不是int的value會返回錯誤,incr一個不存在的key,則設置key為1decr key 同上,但是做的是減減操作,decr一個不存在key,則設置key為-1incrby key integer 同incr,加指定值 ,key不存在時候會設置key,并認為原來的value是 0decrby key integer 同decr,減指定值。d
7、ecrby完全是為了可讀性,我們完全可以通過incrby一個負值來實現同樣效果,反之一樣。String 相關命令相關命令append key value 給指定key的字符串值追加value,返回新字符串值的長度。下面給個例子substr key start end 返回截取過的key的字符串值,注意并不修改key的值。下標是從0開始的。Listredis的list類型其實就是一個每個子元素都是string類型的雙向鏈表。我們可以通過push,pop操作從鏈表的頭部或者尾部添加刪除元素。這使得list既可以用作棧,也可以用作隊列。list的pop操作還有阻塞版本的。當我們lrpop一個list
8、對象是,如果list是空,或者不存在,會立即返回nil。但是阻塞版本的blrpop可以則可以阻塞,當然可以加超時時間,超時后也會返回nil。為什么要阻塞版本的pop呢,主要是為了避免輪詢。舉個簡單的例子如果我們用list來實現一個工作隊列。執行任務的thread可以調用阻塞版本的pop去獲取任務這樣就可以避免輪詢去檢查是否有任務存在。當任務來時候工作線程可以立即返回,也可以避免輪詢帶來的延遲。 List相關命令相關命令lpush key string 在key對應list的頭部添加字符串元素,返回1表示成功,0表示key存在且不是list類型rpush key string 同上,在尾部添加l
9、len key 返回key對應list的長度,key不存在返回0,如果key對應類型不是list返回錯誤lrange key start end 返回指定區間內的元素,下標從0開始,負值表示從后面計算,-1表示倒數第一個元素 ,key不存在返回空列表ltrim key start end 截取list,保留指定區間內元素,成功返回1,key不存在返回錯誤lset key index value 設置list中指定下標的元素值,成功返回1,key或者下標不存在返回錯誤lrem key count value 從key對應list中刪除count個和value相同的元素。count為0時候刪除全部
10、lpop key 從list的頭部刪除元素,并返回刪除元素。如果key對應list不存在或者是空返回nil,如果key對應值不是list返回錯誤List相關命令相關命令rpop 同上,但是從尾部刪除blpop key1.keyN timeout 從左到右掃描返回對第一個非空list進行lpop操作并返回,比如blpop list1 list2 list3 0 ,如果list1不存在,list2,list3都是非空則對list2做lpop并返回從list2中刪除的元素。如果所有的list都是空或不存在,則會阻塞timeout秒,timeout為0表示一直阻塞。當阻塞時,如果有client對key
11、1.keyN中的任意key進行push操作,則第一在這個key上被阻塞的client會立即返回。如果超時發生,則返回nil。brpop 同blpop,一個是從頭部刪除一個是從尾部刪除rpoplpush srckey destkey 從srckey對應list的尾部移除元素并添加到destkey對應list的頭部,最后返回被移除的元素值,整個操作是原子的.如果srckey是空或者不存在返回nilSetredis的set是string類型的無序集合。set元素最大可以包含(2的32次方-1)個元素。set的是通過hash table實現的,hash table會隨著添加或者刪除自動的調整大小關于s
12、et集合類型除了基本的添加刪除操作,其他有用的操作還包含集合的取并集(union),交集(intersection),差集(difference)。通過這些操作可以很容易的實現sns中的好友推薦和blog的tag功能。Set相關命令相關命令sadd key member 添加一個string元素到,key對應的set集合中,成功返回1,如果元素以及在集合中返回0,key對應的set不存在返回錯誤srem key member 從key對應set中移除給定元素,成功返回1,如果member在集合中不存在或者key不存在返回0,如果key對應的不是set類型的值返回錯誤spop key 刪除并返回
13、key對應set中隨機的一個元素,如果set是空或者key不存在返回nilsrandmember key 同spop,隨機取set中的一個元素,但是不刪除元素smove srckey dstkey member 從srckey對應set中移除member并添加到dstkey對應set中,整個操作是原子的。成功返回1,如果member在srckey中不存在返回0,如果key不是set類型返回錯誤scard key 返回set的元素個數,如果set是空或者key不存在返回0sismember key member 判斷member是否在set中,存在返回1,0表示不存在或者key不存在sinter
14、 key1 key2.keyN 返回所有給定key的交集sinterstore dstkey key1.keyN 同sinter,但是會同時將交集存到dstkey下Set相關命令相關命令sunion key1 key2.keyN 返回所有給定key的并集sunionstore dstkey key1.keyN 同sunion,并同時保存并集到dstkey下sdiff key1 key2.keyN 返回所有給定key的差集sdiffstore dstkey key1.keyN 同sdiff,并同時保存差集到dstkey下smembers key 返回key對應set的所有元素,結果是無序的Sor
15、ted set和set一樣sorted set也是string類型元素的集合,不同的是每個元素都會關聯一個double類型的score。sorted set的實現是skip list和hash table的混合體。當元素被添加到集合中時,一個元素到score的映射被添加到hash table中,另一個score到元素的映射被添加到skip list并按照score排序,所以就可以有序的獲取集合中的元素。 Sorted set 相關命令相關命令zadd key score member 添加元素到集合,元素在集合中存在則更新對應scorezrem key member 刪除指定元素,1表示成功,
16、如果元素不存在返回0zincrby key incr member 增加對應member的score值,然后移動元素并保持skip list有序。返回更新后的score值zrank key member 返回指定元素在集合中的排名(下標,非score),集合中元素是按score從小到大排序的zrevrank key member 同上,但是集合中元素是按score從大到小排序zrange key start end 類似lrange操作從集合中取指定區間的元素。返回的是有序結果zrevrange key start end 同上,返回結果是按score逆序的zrangebyscore key
17、min max 返回集合中score在給定區間的元素zcount key min max 返回集合中score在給定區間的數量zcard key 返回集合中元素個數zscore key element 返回給定元素對應的scorezremrangebyrank key min max 刪除集合中排名在給定區間的元素zremrangebyscore key min max 刪除集合中score在給定區間的元素HashHashredis hash是一個string類型的field和value的映射表。hash特別適合用于存儲對象。相較于將對象的每個字段存成單個string類型。將一個對象存儲在ha
18、sh類型中會占用更少的內存,并且可以更方便的存取整個對象。Hash相關命令相關命令hset key field value 設置hash field為指定值,如果key不存在,則先創建hget key field 獲取指定的hash fieldhmget key filed1.fieldN 獲取全部指定的hash filedhmset key filed1 value1 . filedN valueN 同時設置hash的多個fieldhincrby key field integer 將指定的hash filed 加上給定值hexists key field 測試指定field是否存在hdel
19、 key field 刪除指定的hash fieldhlen key 返回指定hash的field數量hkeys key 返回hash的所有fieldhvals key 返回hash的所有valuehgetall 返回hash的所有filed和value主從復制主從復制主從復制允許多個slave server擁有和master server相同的數據庫副本。下面是關于redis主從復制的一些特點 1.master可以有多個slave 2.除了多個slave連到相同的master外,slave也可以連接其他slave形成圖狀結構 3.主從復制不會阻塞master。也就是說當一個或多個slave與
20、master進行初次同步數據時,master可以繼續處理client發來的請求。相反slave在初次同步數據時則會阻塞,不能處理client的請求。 4.主從復制可以用來提高系統的可伸縮性(我們可以用多個slave 專門用于client的讀請求,比如sort操作可以使用slave來處理),也可以用來做簡單的數據冗余。 5.可以在master禁用數據持久化,只需要注釋掉master 配置文件中的所有save配置,然后只在slave上配置數據持久化。事務事務redis對事務的支持目前還比較簡單。redis只能保證一個client發起的事務中的命令可以連續的執行,而中間不會插入其他client的命令
21、。 Multi 事務開始 Exec 執行事務 Discard 放棄事務 Watch 監聽key Unwatch 放棄所有key的監聽watch 命令會監視給定的key,當exec時候如果監視的key從調用watch后發生過變化,則整個事務會失敗。注意watch的key是對整個連接有效的,和事務一樣,如果連接斷開,監視和事務都會被自動清除。 發布訂閱(發布訂閱(pub/sub )發布訂閱(pub/sub)是一種消息通信模式。訂閱者可以通過subscribe和psubscribe命令向redis server訂閱自己感興趣的消息類型,redis將消息類型稱為通道(channel)。當發布者通過pu
22、blish命令向redis server發送特定類型的消息時。訂閱該消息類型的全部client都會收到此消息。這里消息的傳遞是多對多的。一個client可以訂閱多個 channel,也可以向多個channel發送消息。 Subscribe Unsubscribe Psubscribe Punsubscribe Publish管道(管道(pipeline)redis是一個cs模式的tcp server,使用和http類似的請求響應協議。一個client可以通過一個socket連接發起多個請求命令。每個請求命令發出后client通常 會阻塞并等待redis服務處理,redis處理完后請求命令后會將
23、結果通過響應報文返回給client。基本的通信過程如下Client: INCR XServer: 1Client: INCR XServer: 2Client: INCR XServer: 3Client: INCR XServer: 4基本上四個命令需要8個tcp報文才能完成。由于通信會有網絡延遲,假如從client和server之間的包傳輸時間需要0.125秒。那么上面的四個命令8個報文至少會需要1秒才能完成。 管道(管道(pipeline)利用pipeline的方式從client打包多條命令一起發出,不需要等待單條命令的響應返回,而redis服務端會處理完多條命令后會將多條命令的處理結果
24、打包到一起返回給客戶端。通信過程如下Client: INCR XClient: INCR XClient: INCR XClient: INCR XServer: 1Server: 2Server: 3Server: 4Redis 命令參考 /en/latest/index.htmlRedis應用場景應用場景1.取最新取最新N個數據的操作個數據的操作比如典型的取你網站的最新文章,通過下面方式,我們可以將最新的5000條評論的ID放在Redis的List集合中,并將超出集合部分從數據庫獲取使用LPUSH ments命令,向list集合中插入數
25、據 插入完成后再用LTRIM ments 0 5000命令使其永遠只保存最近5000個ID 然后我們在客戶端獲取某一頁評論時可以用下面的邏輯(偽代碼) FUNCTION get_latest_comments(start,num_items): id_list = redis.lrange(ments,start,start+num_items-1) IF id_list.length num_items id_list = SQL_DB(SELECT . ORDER BY time LIMIT .) END RETURN id_list END 如果你還有不同的篩選維度,比如某個分類的最新N條,那么你可以再建一個按此分類的List,只存ID的話,Redis是非常高效的。Redis應用場景應用場景2.排行榜應用,取排行榜應用,取TOP N操作操作 這個需求與上面需求的不同之處在于,前面操作以時間為權重,這個是以某個條件為權重,比如按頂的次數排序,這時候就需要我們的sorted set出馬了,將你要排序的值設置成sorted set的score,將具體的數據設
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 玻璃鋼管材的制造工藝與性能研究考核試卷
- 童車制造企業質量控制與品質提升策略考核試卷
- 會展智能多媒體信息發布考核試卷
- 畜牧業市場渠道拓展考核試卷
- 禮儀用品企業人力資源開發考核試卷
- 電池材料合成與性能調控考核試卷
- 電機在電力安全監控的應用考核試卷
- 篷布企業團隊建設考核試卷
- 四川職業技術學院《企業價值創造實戰》2023-2024學年第二學期期末試卷
- 四川省成都市都江堰市2025屆初三下學期尖子生化學試題含解析
- 扶濟復新獲獎課件
- 外協救援服務協議
- 工業機器人的發展歷史
- DL∕T 2547-2022 交流斷面失電監測裝置技術規范
- 2024年(中級)嵌入式系統設計師軟考試題庫(含答案)
- 高齡患者的麻醉管理策略
- 小小科學家《物理》模擬試卷A(附答案)
- 2024年安徽蚌埠市國有資本運營控股集團有限公司招聘筆試參考題庫含答案解析
- 江蘇省無錫市2023-2024學年五年級下學期期中綜合測試數學試卷(蘇教版)
- 心內科入科教育培訓
- 題眾籌筑屋規劃方案設計樣本
評論
0/150
提交評論