redis(一)--認識redis

? ? ? ? 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在內的多家公司成功用于實戰。

轉載于:https://www.cnblogs.com/HHR-SUN/p/7047173.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254322.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254322.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254322.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

轉:如何用gcc編譯生成動態鏈接庫*.so文件 動態庫

轉:如何編譯.so動態庫問:我源文件為main.c, x.c, y.c, z.c,頭文件為x.h,y.h,z.h如何編譯成.so動態庫?編譯器用gcc最好能給出詳細參數解釋,謝謝答:# 聲稱動代連接庫,假設名稱為libtest.sogcc x.c y.c z.c -f…

工業鏡頭的主要參數與選型

文章目錄簡介1、鏡頭的分類(1) 以鏡頭安裝分類(2) 以攝像頭鏡頭規格分類(3) 以鏡頭光圈分類(4) 以鏡頭的視場大小分類(5) 從鏡頭焦距上分2、選擇鏡頭的技術依據(1) 鏡頭的成像尺寸(2) 鏡頭的分辨率(3) 鏡頭焦距與視野角度(4) 光圈或通光量3、變焦鏡頭(zoom lens&…

SQLSEVER 中的那些鍵和約束

SQL Server中有五種約束類型,各自是 PRIMARY KEY約束、FOREIGN KEY約束、UNIQUE約束、DEFAULT約束、和CHECK約束。查看或者創建約束都要使用到 Microsoft SQL Server Managment Studio。1. PRIMARY KEY約束 在表中常有一列或多列的組合,其值能唯一標識表…

數據庫 sqlite 進階

http://www.cppblog.com/czy463/archive/2013/12/16/204816.html 董淳光 前序: Sqlite3 的確很好用。小巧、速度快。但是因為非微軟的產品,幫助文檔總覺得不夠。這些天再次研究它,又有一些收獲,這里把我對 sqlite3 的研究列出來&a…

形象的列舉-C# 枚舉

文章目錄簡介例子分析點撥博主寫作不容易,孩子需要您鼓勵 萬水千山總是情 , 先點個贊行不行 簡介 枚舉類型用于聲明一組命名常數。 定義枚舉類型語法格式如下:enum 枚舉數組名{枚舉成員列表};例如: enum week{星期一,星期二…

Confluence 6 手動備份站點

2019獨角獸企業重金招聘Python工程師標準>>> Confluence 被配置自動備份數據,使用壓縮的 XML 格式。同時你也可以通過 Confluence 的 管理員控制臺(Administration Console)手動進行備份。 你需要具有 System Administrator 權限才…

編寫高質量的Makefile

分類: c/c研究 GNU&LINUX2010-09-12 15:31163人閱讀 評論(0)收藏舉報源地址 :http://acm.hrbeu.edu.cn/forums/index.php?showtopic1827&st0&gopid8924&#entry8924 一、前言 回想自己的第一個Makefile,是這個樣子的 …

第六篇:python基礎之文件處理

第六篇:python基礎之文件處理 閱讀目錄 一.文件處理流程二.基本操作2.1 文件操作基本流程初探2.2 文件編碼2.3 文件打開模式2.4 文件內置函數flush2.5 文件內光標移動2.6 open函數詳解2.7 上下文管理2.8 文件的修改一.文件處理流程 打開文件,得到文件句柄…

前端每日實戰:56# 視頻演示如何用純 CSS 描述程序員的生活

效果預覽 按下右側的“點擊預覽”按鈕可以在當前頁面預覽,點擊鏈接可以全屏預覽。 https://codepen.io/comehope/pen/YvYVvY 可交互視頻 此視頻是可以交互的,你可以隨時暫停視頻,編輯視頻中的代碼。 請用 chrome, safari, edge 打開觀看。 ht…

從特殊到一般-C#中的類

文章目錄類的概念類的定義實例例子分析類的成員數據成員屬性成員方法成員靜態成員博主寫作不容易,孩子需要您鼓勵 萬水千山總是情 , 先點個贊行不行 類的概念 在日常生活中,類是對具有相同特性的一類是物的抽象。比如水果是一個類,它是對…

Chapter 1 First Sight——30

The girl sitting there giggled. Id noticed that his eyes were black — coal black. 那個坐在那里的女孩笑著。我注意到她的眼睛是很色的--炭黑色的。 Mr. Banner signed my slip and handed me a book with no nonsense about introductions. Banner 先生簽了我的名字然后…

GPU 與CPU的作用協調,工作流程、GPU整合到CPU得好處

在不少人的心目中,顯卡最大的用途可能就只有兩點——玩游戲、看電影,除此之外,GPU并沒有其他的作用了。但是隨著微軟IE9的正式發布,不少人突然發現,微軟一直提到一個名詞:GPU硬件加速,從而也讓不…

[luoguP1029] 最大公約數和最小公倍數問題(數論)

傳送門 一.暴力枚舉&#xff08;加了點優化&#xff09; #include <cstdio>int x, y, ans;inline int gcd(int x, int y) {return !y ? x : gcd(y, x % y); }inline int lcm(int x, int y) {return x / gcd(x, y) * y; }int main() {int i, j;scanf("%d %d", …

CPU和GPU擅長和不擅長的方面

從它們執行運算的速度與效率的方面來探討這個論題。CPU和GPU都是具有運算能力的芯片&#xff0c; CPU更像“通才”——指令運算(執行)為重數值運算&#xff0c; GPU更像“專才”——圖形類數值計算為核心。在不同類型的運算方面的速度也就決定了它們的能力——“擅長和不擅長”…

一些IO流的知識

IO流&#xff1a; 輸入流&#xff1a;輸出流&#xff1a; 字節流&#xff1a;字符流&#xff1a;為了處理文字數據方便而出現的對象。 其實這些對象的內部使用的還是字節流(因為文字最終也是字節數據) 只不過&#xff0c;通過字節流讀取了相對應的字節數&#xff0c;沒有對這些…

為人示弱,做事留余 | 摸魚系列

我很喜歡結交有很好的自然觀察能力的朋友&#xff0c;這是種對周圍環境和文化的洞察力。 一方面的原因是優秀的領導者、企業家和投資人能利用這種能力發現新市場&#xff0c;預測新潮流&#xff0c;設計出有效的市場營銷活動&#xff0c;并找到需要重點關注的人群。 另一方面&a…

從一般到特殊-C#中的對象

文章目錄對象的概念對象的創建和使用匿名類型和初始化器構造函數和析構函數構造函數析構函數范例參數傳遞博主寫作不容易&#xff0c;孩子需要您鼓勵 萬水千山總是情 , 先點個贊行不行 對象的概念 類是具有相同特征一類事物的抽象&#xff0c;而對象是類的實例。 類和對象…

如何用面對對象來做一個躁動的小球?

今天來看看怎樣用面對對象來做一個躁動的小球。 首先我們先創建一個對象&#xff0c;他的屬性包含小球的隨機水平、縱向坐標&#xff0c;隨機寬、高&#xff0c;隨機顏色&#xff0c;以及創建小球的方法。 html: <div id"wrap"></div> js:function Boll(…

關于MyEclipse項目的名字的修改對項目導入導出的影響

不要修改項目名字&#xff0c;不管是在MyEclipse中(.project文件里面的額name會變)還是在G:\MyEclipseData目錄下(.project文件里面的額name不會變)&#xff0c;否則導入的時候不能訪問&#xff0c;會出現400的錯誤&#xff0c;而訪問的網址必須是以前沒改名前的那個名字才可以…

Gcc詳解以及靜態庫、動態庫生成

[轉] Gcc詳解以及靜態庫、動態庫生成 http://www.360doc.com/content/10/0619/14/1795182_33985297.shtml 1。gcc包含的c/c編譯器 gcc,cc,c,g,gcc和cc是一樣的&#xff0c;c和g是一樣的&#xff0c;(沒有看太明白前面這半句是什 么意思:))一般c程序就用gcc編譯&#xff0c;c程序…