redis概述1

1.redis簡介

resis 是一個開源(BSD)許可的,內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲系統(tǒng),他可以用作數(shù)據(jù)庫墓猎,緩存和消息中中間件嗅剖。它支持多種類型的數(shù)據(jù)結(jié)構(gòu)烘浦,如字符串(strings),散列(hashes)、列表(lists)、集合(sets)吁断、有序集合(sorted)與范圍查詢趁蕊,bitmaps,hyperloglogs和地理空間(geospatial) 索引半徑查詢仔役。Redis內(nèi)置了復(fù)制(replication)掷伙、LUA腳本。LRU驅(qū)動事件又兵,事務(wù)任柜,和不同級別的磁盤持久化。Redis同樣支持主從復(fù)制沛厨,并且第一次同步是快速的非阻塞式的同步宙地。

2.redis的優(yōu)勢

  • 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
  • 豐富的數(shù)據(jù)類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets
    及 Ordered Sets 數(shù)據(jù)類型操作逆皮。
  • 原子 – Redis的所有操作都是原子性的宅粥,意思就是要么成功執(zhí)行要么失敗
    完全不執(zhí)行。單個操作是原子性的电谣。多個操作也支持事務(wù)粹胯,即原子性,
    通過MULTI和EXEC指令包起來辰企。
  • 豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。

3.Redis與其他key-value存儲有什么不同况鸣?

  • Redis有著更為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)并且提供對他們的原子性操作牢贸,這是一個不同于其他數(shù)據(jù)庫的進化路徑。Redis的數(shù)據(jù)類型都是基于基本數(shù)據(jù)結(jié)構(gòu)的同時對程序員透明镐捧,無需進行額外的抽象
  • Redis運行在內(nèi)存中但是可以持久化到磁盤潜索,所以在對不同數(shù)據(jù)集進行高速讀寫時需要權(quán)衡內(nèi)存,因為數(shù)據(jù)量不能大于硬件內(nèi)存懂酱。在內(nèi)存數(shù)據(jù)庫方面的另一個優(yōu)點是竹习,相比在磁盤上相同的復(fù)雜的數(shù)據(jù)結(jié)構(gòu),在內(nèi)存中操作起來非常簡單列牺,這樣Redis可以做很多內(nèi)部復(fù)雜性很強的事情整陌。同時,在磁盤格式方面他們是緊湊的以追加的方式產(chǎn)生的瞎领,因為他們并不需要進行隨機訪問泌辫。

4.什么是原子性,什么是原子性操作?

舉個例子:

A想要從自己的帳戶中轉(zhuǎn)1000塊錢到B的帳戶里九默。那個從A開始轉(zhuǎn)帳震放,到轉(zhuǎn)帳結(jié)束的這一個過程,稱之為一個事務(wù)驼修。在這個事務(wù)里殿遂,要做如下操作

  1. 從A的帳戶中減去1000塊錢诈铛。如果A的帳戶原來有3000塊錢,現(xiàn)在就變成2000塊錢了墨礁。
  2. 在B的帳戶里加1000塊錢幢竹。如果B的帳戶如果原來有2000塊錢,現(xiàn)在則變成3000塊錢了饵溅。
    如果在A的帳戶已經(jīng)減去了1000塊錢的時候妨退,忽然發(fā)生了意外,比如停電什么的蜕企,導(dǎo)致轉(zhuǎn)帳事務(wù)意外終止了咬荷,而此時B的帳戶里還沒有增加1000塊錢。那么轻掩,我們稱這個操作失敗了幸乒,要進行回滾〈侥粒回滾就是回到事務(wù)開始之前的狀態(tài)罕扎,也就是回到A的帳戶還沒減1000塊的狀態(tài),B的帳戶的原來的狀態(tài)丐重。此時A的帳戶仍然有3000塊腔召,B的帳戶仍然有2000塊。
    我們把這種要么一起成功(A帳戶成功減少1000扮惦,同時B帳戶成功增加1000)臀蛛,要么一起失敗(A帳戶回到原來狀態(tài)崖蜜,B帳戶也回到原來狀態(tài))的操作叫原子性操作浊仆。
    如果把一個事務(wù)可看作是一個程序,它要么完整的被執(zhí)行,要么完全不執(zhí)行。這種特性就叫原子性豫领。

5.Redis安裝

1.Window 下安裝
[https://github.com/MSOpenTech/redis/releases]
Redis 支持 32 位和 64 位抡柿。這個需要根據(jù)你系統(tǒng)平臺的實際情況選擇,這里我們下載 Redis-x64-xxx.zip壓縮包到 C 盤等恐,解壓后洲劣,將文件夾重新命名為 redis。

打開一個 cmd 窗口 使用cd命令切換目錄到 C:\redis 運行
 redis-server.exe redis.windows.conf 鼠锈。

如果想方便的話闪檬,可以把 redis 的路徑加到系統(tǒng)的環(huán)境變量里,這樣就省得再輸路徑了购笆,后面的那個 redis.windows.conf 可以省略粗悯,如果省略,會啟用默認的同欠。輸入之后样傍,會顯示如下界面:


image.png

然后:打開新的命令行窗口横缔,原來的不要關(guān)閉,嘗試進行下面操作

設(shè)置鍵值對 set myKey abc
取出鍵值對 get myKey
C:\Users\Xingxing>redis-cli
127.0.0.1:6379> set mykey abc
OK
127.0.0.1:6379> get mykey
"abc"

2.linux -ubuntu下面安裝

- 在 Ubuntu 系統(tǒng)安裝 Redis 可以使用以下命令:
$sudo apt-get update
$sudo apt-get install redis-server
- 啟動 Redis
$ redis-server
- 查看 redis 是否啟動衫哥?
$ redis-cli
- 以上命令將打開以下終端:
redis 127.0.0.1:6379>
- 127.0.0.1 是本機 IP 茎刚,6379 是 redis 服務(wù)端口。現(xiàn)在我們輸入 PING 命令撤逢。
redis 127.0.0.1:6379> ping
PONG
以上說明我們已經(jīng)成功安裝了redis膛锭。

5.Redis 配置

Redis 的配置文件位于 Redis 安裝目錄下,文件名為 redis.conf蚊荣。
你可以通過 CONFIG 命令查看或設(shè)置配置項初狰。
1.Redis CONFIG 命令格式如下:

redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME
實例
CONFIG GET loglevel
1) "loglevel"
2) "notice"
使用 * 號獲取所有配置項
CONFIG GET *
編輯配置
你可以通過修改 redis.conf 文件或使用 CONFIG set 命令來修改配置。
 CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
redis 127.0.0.1:6379> CONFIG SET loglevel "notice"
OK
redis 127.0.0.1:6379> CONFIG GET loglevel
1) "loglevel"
2) "notice"

參數(shù)說明

redis.conf 配置項說明如下:

1. Redis默認不是以守護進程的方式運行互例,可以通過該配置項修改奢入,使用yes啟用守護進程

    daemonize no

2. 當Redis以守護進程方式運行時,Redis默認會把pid寫入/var/run/redis.pid文件媳叨,可以通過pidfile指定

    pidfile /var/run/redis.pid

3. 指定Redis監(jiān)聽端口腥光,默認端口為6379,作者在自己的一篇博文中解釋了為什么選用6379作為默認端口糊秆,因為6379在手機按鍵上MERZ對應(yīng)的號碼武福,而MERZ取自意大利歌女Alessia Merz的名字

    port 6379

4. 綁定的主機地址

    bind 127.0.0.1

5.當 客戶端閑置多長時間后關(guān)閉連接,如果指定為0痘番,表示關(guān)閉該功能

    timeout 300

6. 指定日志記錄級別艘儒,Redis總共支持四個級別:debug、verbose夫偶、notice、warning觉增,默認為verbose

    loglevel verbose

7. 日志記錄方式兵拢,默認為標準輸出,如果配置Redis為守護進程方式運行逾礁,而這里又配置為日志記錄方式為標準輸出说铃,則日志將會發(fā)送給/dev/null

    logfile stdout

8. 設(shè)置數(shù)據(jù)庫的數(shù)量,默認數(shù)據(jù)庫為0嘹履,可以使用SELECT <dbid>命令在連接上指定數(shù)據(jù)庫id

    databases 16

9. 指定在多長時間內(nèi)腻扇,有多少次更新操作,就將數(shù)據(jù)同步到數(shù)據(jù)文件砾嫉,可以多個條件配合

    save <seconds> <changes>

    Redis默認配置文件中提供了三個條件:

    save 900 1

    save 300 10

    save 60 10000

    分別表示900秒(15分鐘)內(nèi)有1個更改幼苛,300秒(5分鐘)內(nèi)有10個更改以及60秒內(nèi)有10000個更改。

 

10. 指定存儲至本地數(shù)據(jù)庫時是否壓縮數(shù)據(jù)焕刮,默認為yes舶沿,Redis采用LZF壓縮墙杯,如果為了節(jié)省CPU時間,可以關(guān)閉該選項括荡,但會導(dǎo)致數(shù)據(jù)庫文件變的巨大

    rdbcompression yes

11. 指定本地數(shù)據(jù)庫文件名高镐,默認值為dump.rdb

    dbfilename dump.rdb

12. 指定本地數(shù)據(jù)庫存放目錄

    dir ./

13. 設(shè)置當本機為slav服務(wù)時,設(shè)置master服務(wù)的IP地址及端口畸冲,在Redis啟動時嫉髓,它會自動從master進行數(shù)據(jù)同步

    slaveof <masterip> <masterport>

14. 當master服務(wù)設(shè)置了密碼保護時,slav服務(wù)連接master的密碼

    masterauth <master-password>

15. 設(shè)置Redis連接密碼邑闲,如果配置了連接密碼算行,客戶端在連接Redis時需要通過AUTH <password>命令提供密碼,默認關(guān)閉

    requirepass foobared

16. 設(shè)置同一時間最大客戶端連接數(shù)监憎,默認無限制纱意,Redis可以同時打開的客戶端連接數(shù)為Redis進程可以打開的最大文件描述符數(shù),如果設(shè)置 maxclients 0鲸阔,表示不作限制偷霉。當客戶端連接數(shù)到達限制時,Redis會關(guān)閉新的連接并向客戶端返回max number of clients reached錯誤信息

    maxclients 128

17. 指定Redis最大內(nèi)存限制褐筛,Redis在啟動時會把數(shù)據(jù)加載到內(nèi)存中类少,達到最大內(nèi)存后,Redis會先嘗試清除已到期或即將到期的Key渔扎,當此方法處理 后硫狞,仍然到達最大內(nèi)存設(shè)置,將無法再進行寫入操作晃痴,但仍然可以進行讀取操作残吩。Redis新的vm機制,會把Key存放內(nèi)存倘核,Value會存放在swap區(qū)

    maxmemory <bytes>

18. 指定是否在每次更新操作后進行日志記錄泣侮,Redis在默認情況下是異步的把數(shù)據(jù)寫入磁盤,如果不開啟紧唱,可能會在斷電時導(dǎo)致一段時間內(nèi)的數(shù)據(jù)丟失活尊。因為 redis本身同步數(shù)據(jù)文件是按上面save條件來同步的,所以有的數(shù)據(jù)會在一段時間內(nèi)只存在于內(nèi)存中漏益。默認為no

    appendonly no

19. 指定更新日志文件名蛹锰,默認為appendonly.aof

     appendfilename appendonly.aof

20. 指定更新日志條件,共有3個可選值: 
    no:表示等操作系統(tǒng)進行數(shù)據(jù)緩存同步到磁盤(快) 
    always:表示每次更新操作后手動調(diào)用fsync()將數(shù)據(jù)寫到磁盤(慢绰疤,安全) 
    everysec:表示每秒同步一次(折衷铜犬,默認值)

    appendfsync everysec

 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子翎苫,更是在濱河造成了極大的恐慌权埠,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件煎谍,死亡現(xiàn)場離奇詭異攘蔽,居然都是意外死亡,警方通過查閱死者的電腦和手機呐粘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門满俗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人作岖,你說我怎么就攤上這事唆垃。” “怎么了痘儡?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵辕万,是天一觀的道長。 經(jīng)常有香客問我沉删,道長渐尿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任矾瑰,我火速辦了婚禮砖茸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘殴穴。我一直安慰自己凉夯,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布采幌。 她就那樣靜靜地躺著劲够,像睡著了一般。 火紅的嫁衣襯著肌膚如雪休傍。 梳的紋絲不亂的頭發(fā)上再沧,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音尊残,去河邊找鬼。 笑死淤堵,一個胖子當著我的面吹牛寝衫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拐邪,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼慰毅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了扎阶?” 一聲冷哼從身側(cè)響起汹胃,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤婶芭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后着饥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體犀农,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年宰掉,在試婚紗的時候發(fā)現(xiàn)自己被綠了呵哨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡轨奄,死狀恐怖孟害,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情挪拟,我是刑警寧澤挨务,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站玉组,受9級特大地震影響谎柄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜球切,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一谷誓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吨凑,春花似錦捍歪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至恩商,卻和暖如春变逃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背怠堪。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工揽乱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粟矿。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓凰棉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親陌粹。 傳聞我的和親對象是個殘疾皇子撒犀,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • REmote DIctionary Server(Redis)是一個有Salvatore Sanfilippo寫的...
    高陽劉閱讀 257評論 0 2
  • 圣誕節(jié)假期,女兒回來了,周日下午或舞,我們到引知教育參加了一個茶話會荆姆,主要聽一位賓夕法尼亞文理學(xué)院大一的女孩和她媽媽做...
    午后窗臺的貓閱讀 107評論 0 0
  • 本文參加#我的古城,我的故事S车剩活動胆筒,本人承諾,本文為原創(chuàng)文章魏宽,未在其他平臺發(fā)表腐泻。 趙雷有他的成都,李志有他...
    南國有妖F閱讀 538評論 0 4
  • 第一次來到這里,還不太了解具體規(guī)則和功能蚌斩,也不清楚老師到底是否布置了作業(yè)或是根本就沒有作業(yè)铆惑,可這個時候我特想寫些心...
    境由心生619閱讀 135評論 0 0