多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > 初學Redis(1)――認識Redis

初學Redis(1)――認識Redis

來源:程序員人生   發布時間:2014-10-02 08:00:01 閱讀次數:2100次

        Redis官網對Redis的定義是:“Redis is an open source, BSD licensed, advanced key-value cache and store”,可以看出,Redis是一種鍵值系統,可以用來緩存或存儲數據。Redis是“Remote Dictionary Server”(遠程字典服務)的縮寫,提供了字符串(string),列表(list),哈希(hash),集合(set)和有序集合(sorted set)等5種數據結構,這些數據結構使它成為一種便于使用的鍵值系統。

        作為Redis提供的最簡單的數據結構,字符串示意圖及其常用命令如下圖所示:


圖1

        可見,Redis字符串類型實際上類似于C++中的map,一個鍵對應一個值。列表類型則是一種相對高級的數據結構,其示意圖和常用命令如下圖所示:

       

圖2

        列表實際上由一個雙向鏈表實現,所以在列表兩端插入或刪除數據效率極高,可以用于實現類似于微博、人人網上的“新鮮事”功能。 Redis提供的一個更有趣的結構稱為哈希,其示意圖和常用命令如下圖所示:


圖3

        一個哈希實際上是一組鍵值對的集合,哈希本身的鍵是“父鍵”,哈希中包含的若干字段是“子鍵”,每個“子鍵”都有相應的值。“子鍵”之間并沒有一定的聯系,但是它們共同組成了一個完整的哈希結構。我們可以把一個哈希看做關系數據庫中的一行,哈希的每個子鍵對應行的一個字段。因此,當把關系數據庫中的數據緩存至Redis時,使用哈希結構可能會帶來方便。需要注意的是,哈希結構內部的子鍵之間是沒有順序關系的。Redis提供的另一個無順序關系的結構是集合,其示意圖和常用命令如下圖所示:


圖4

        集合中的數據滿足唯一性和無序性。集合在Redis內部是用哈希表實現的,所以插入和刪除操作的時間復雜度均為O(1)。Redis為集合提供了求交并差等運算命令,使用起來非常方便。與集合密切相關的另一個數據結構是有序集合,其示意圖和常用命令如下圖所示:


圖5

        有序集合與集合的最大差異在于有序集合中的每個數據都有一個對應的分數,集合中的元素就是按照這些分數進行排序的。從結構功能和使用方法上來看,有序集合可能是Redis提供的5種數據結構中最高級的一種。

        Redis是一種內存數據庫,這使其在數據存取效率方面表現突出。由于內存中的數據時刻面臨丟失的危險,Redis提供了兩種持久化機制,及時將內存中的數據寫入硬盤。第一種機制為RDB,利用存儲快照的方式把內存數據定期寫入硬盤;第二種機制為AOF,利用寫日志的方式,每執行一條更改Redis數據的命令,就在日志里附加上該命令并保存在硬盤上。Redis默認開啟RDB模式,關閉AOF模式,這是因為AOF更加耗時。但是,如果對數據安全要求極高,無法承擔任何數據丟失的后果,AOF模式就變成了持久化的首選。

        當然,即使Redis具備持久化機制,但是一旦本地硬盤損壞,數據丟失依然在所難免。所以,Redis又提供了復制功能,作用是將一個主數據庫(master)的數據自動同步到多個從數據庫(slave),從而盡可能防止數據丟失。Redis主從機制可以簡單描述為:從數據庫啟動后,先向主數據庫發送SYNC命令;主數據庫接到SYNC命令后就開始保存快照,在此期間,所有發給主數據庫的命令都被緩存起來;快照保存完成后,主數據庫把快照和緩存的命令一起發給從數據庫;從數據庫保存主數據庫發來的快照文件,并依次執行主數據庫發來的緩存命令。在同步過程中,從數據庫不會阻塞,它默認使用同步之前的數據繼續響應客戶端發來的命令。

        事務是Redis提供的特性之一。首先利用MULTI命令通知Redis,接下來的若干命令屬于同一事務;然后輸入若干命令,這些命令都被放入命令隊列而不會被立即執行;最后,利用EXEC命令通知Redis,屬于同一事務的所有命令均已輸入完成,現在開始執行該事物。屬于同一個事務的所有有效命令或者全部被執行,或者全部不執行,且在執行過程中不會插入其他命令。管道(pipeline)是Redis提供的另一個特性。該特性使Redis能夠一次性接收多個命令,執行之后再一次性返回結果。這樣能夠減少客戶端與Redis服務器的通信次數,從而降低往返時延。

        除事務和管道以外,Redis還提供了很多其他特性,如設置鍵的過期時間,利用BLPOP/BRPOP命令實現優先級隊列,利用PUBLISH/SUBSCRIBE命令實現消息訂閱和發布等,這里不再贅述。

        Redis由ANSI C寫成,能夠運行在包括Linux和OS X在內的大部分POSIX系統上,官方推薦的操作系統為Linux。Redis沒有官方的Windows版本,但是微軟移植并維護了一個能夠運行在Windows上的Redis并放在github上(https://github.com/MSOpenTech/redis)。

        Redis的編程接口被稱為客戶端(clients),絕大部分主流編程語言都有官方推薦的客戶端。下圖中,具有Redis官方推薦客戶端的語言標為綠色,沒有官方推薦客戶端的標為藍色:


圖6

        由于Redis沒有官方推薦的C++客戶端,因此可以使用C客戶端予以代替。官方推薦的C客戶端是hiredis,可以從github上找到(https://github.com/redis/hiredis)。

        作為一款功能強大,效率極高的NoSQL數據庫,Redis已被包括新浪微博,知乎,Stackoverflow,暴雪和Flickr在內的多家公司成功用于實戰。

注:圖1-5均來自《Redis in Action》,Josiah L.Carlson, Manning Publications, 2013

參考文獻:

1. 李子驊,Redis入門指南,人民郵電出版社,2013年5月第1版

2.Josiah L.Carlson, Redis in Action, Manning Publications, 2013

3. Redis官方網站http://www.redis.io

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产美女福利在线 | 欧美一区永久视频免费观看 | 欧美亚洲精品一区 | 亚洲欧美日韩在线精品一区二区 | 成人在线免费小视频 | 国产一区二区免费福利片 | 精品久久久久久久 | 欧美极品videosex性欧美 | 免费观看又污又黄网站日本 | 欧美成人一区二区三区在线视频 | 亚洲精品h | 尤物精品在线观看 | 一区二区三区高清在线观看 | 在线观看视频高清视频 | 精品一区二区三区免费站 | 亚洲福利网址 | 欧美国产综合日韩一区二区 | 精品一区二区乱码久久乱码 | 自拍一区在线观看 | 欧美高清揄拍自拍视频网站 | 亚洲成综合人影院在院播放 | 中文字幕一区二区在线视频 | 亚洲色中文字幕在线播放 | 亚洲精品在线免费看 | 欧美日韩一区二区三区免费 | 欧美孕交videosfree另类 | 男人边吃奶边做好爽的视频 | 国产亚洲欧美久久精品 | 尤物精品视频 | 欧美成人在线观看 | 国产亚洲精品免费 | 精品久久久99大香线蕉 | 国产视频中文字幕 | 欧美性猛交xxx乱大交 | 尤物视频在线观看免费视频 | 国产欧美日韩另类一区乌克兰 | 日本免费一区二区三区三州 | 欧美高清videos性极品 | 亚洲 欧美 字幕 一区 在线 | 成人做爰网站 | 国产免费一区二区三区最新 |