redis

姓名:穆培婷

學(xué)號:17101223414

專業(yè):軟件工程

本文轉(zhuǎn)載自:http://blog.csdn.net/mengxianhua/article/details/8961713

【嵌牛導(dǎo)讀】:Redis是一個開源的使用ANSIC語言編寫绵咱、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型绊袋、Key-Value數(shù)據(jù)庫樱哼,并提供多種語言的API洁墙。從2010年3月15日起,Redis的開發(fā)工作由VMware主持掉弛。從2013年5月開始症见,Redis的開發(fā)由Pivotal贊助。

【嵌牛鼻子】:Redis? 緩存? 負(fù)載均衡

【嵌牛提問】:redis是什么殃饿?redis有什么用谋作?

【嵌牛正文】:

一、什么是redis乎芳?

Redis是Remote?Dictionary?Server(遠(yuǎn)程數(shù)據(jù)服務(wù))的縮寫遵蚜,由意大利人?antirez(Salvatore?Sanfilippo)開發(fā)的一款 內(nèi)存高速緩存數(shù)據(jù)庫逻翁,該軟件使用C語言編寫,它的數(shù)據(jù)模型為 key-value蹋肮,它支持豐富的數(shù)據(jù)結(jié)構(gòu),比如 String list? hash?? set? sorted set理郑。肴甸,可持久化寂殉,保證了數(shù)據(jù)安全。

1雷滋、為什么要用redis

1) 是一款數(shù)據(jù)庫產(chǎn)品不撑,有數(shù)據(jù)存儲功能文兢;

2) 可以高速讀取數(shù)據(jù)(in-memory)晤斩;

3) 可以減輕數(shù)據(jù)庫負(fù)擔(dān)

4) 有集合計(jì)算功能(優(yōu)于普通數(shù)據(jù)庫合同類別產(chǎn)品)

5) 多種數(shù)據(jù)結(jié)構(gòu)支持

2焕檬、什么場合適合使用redis?

1)【sort set】排行榜應(yīng)用澳泵,取top n操作实愚,列入sina微博熱門話題

2)【list】獲得最新N個數(shù)據(jù)或某個分類的最新數(shù)據(jù)

3)計(jì)數(shù)器應(yīng)用

4)【set】sns(social network site)獲得共同的好友

5)【set】防攻擊系統(tǒng)(IP判斷)等等

3、redis其他信息

1) 作者是意大利的Salvatore Sanfilippo(antirez),又是VMWare大善人聘請了他專心寫Redis

2) 默認(rèn)端口號?6379兔辅,是手機(jī)按鍵上的MERZ對應(yīng)的號碼腊敲,意大利歌女(Alessia Merz)梅爾茲的代名詞

4、拓展補(bǔ)充

緩存:

有兩種類型 數(shù)據(jù)緩存维苔、頁面緩存(smarty)

使用緩存減輕數(shù)據(jù)庫的負(fù)載碰辅。

在開發(fā)網(wǎng)站的時候如果有一些數(shù)據(jù)在短時間之內(nèi)不會發(fā)生變化,而它們還要被頻繁訪問介时,為了提高用戶的請求速度/降低網(wǎng)站的負(fù)載没宾,就把這些數(shù)據(jù)放到一個讀取速度更快的介質(zhì)上,該行為就稱作對該數(shù)據(jù)的緩存動作沸柔。

該介質(zhì)可以是文件循衰、數(shù)據(jù)庫、內(nèi)存褐澎,內(nèi)存經(jīng)常用于數(shù)據(jù)緩存会钝。

頁面緩存經(jīng)常用在CMS內(nèi)存管理系統(tǒng)里邊

數(shù)據(jù)緩存經(jīng)常會用在頁面的具體數(shù)據(jù)里邊

二、與memcached比較

1) Redis不僅僅支持簡單的k/v類型的數(shù)據(jù)工三,同時還提供list迁酸,set,zset俭正,hash等數(shù)據(jù)結(jié)構(gòu)的存儲胁出。

2) Redis支持master-slave(主—從)模式應(yīng)用。

3) Redis支持?jǐn)?shù)據(jù)的持久化段审,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤中全蝶,重啟的時候可以再次加載進(jìn)行使用。

4) Redis單個value的最大限制是1GB寺枉, memcached只能保存1MB的數(shù)據(jù)

相關(guān)資源:Redis手冊網(wǎng)址:http://www.redisdoc.com/en/latest/index.html

三抑淫、Redis安裝

Windows下安裝:redis-server.exe? redis.conf(或者redis-server.exe redis.windows.conf)

客戶端redis-cli.exe -h 127.0.0.1 -p 6379

Linux下安裝:redis-3.2.8.tar.gz

tar zxvf redis-3.2.8.tar.gz

cd redis-3.2.8

make PREFIX=/usr/local/redis

cd src

啟動服務(wù):service redis start

新開終端:cd /usr/local/redis

客戶端:./redis-cli

四、具體使用

1姥闪、Key

Key 可以是任意類型,最后都存成byte[]

Key 不能太長始苇,比如1024字節(jié),但作者也不追求太短筐喳,要表達(dá)清楚意思才好催式,作者建議用":"分隔表名函喉,用"."作為單詞間的連接。

KEYS顯示所有的key荣月,支持通配符 "KEYS a*" , "keys a?c"管呵,但不建議在生產(chǎn)環(huán)境大數(shù)據(jù)量下使用。

SORT哺窄,對集合按數(shù)字或字母順序排序后返回捐下,或者存到另一個List,還可以關(guān)聯(lián)到外部Key等坷襟。因?yàn)闀挠肅PU婴程,有時會安排到slave上執(zhí)行授段。

EXPIRE/EXPREAT/PERSIST/TTL/届搁,關(guān)于Key超時的操作,默認(rèn)以秒為單位,也有p字頭的以毫秒為單位的版本瞬逊。

其他命令: EXISTS范删,DEL旨巷,RENAME/RENAMENX(僅當(dāng)new key不存在時)若锁,MOVE/MIGRATE(實(shí)例內(nèi)從此db到彼db/從此實(shí)例到彼實(shí)例)会通,RANDOMKEY煤辨,TYPE/Object(Key的類型/對象編碼類型,空置時間),DUMP/RESTORE(value值的持久化)

2、String

最普通的key-value谨履,除了支持最基本的get/set欢摄, Redis也很喜歡添加一些簡便的指令,在服務(wù)端做起來是舉手之勞笋粟,客戶端便方便很多怀挠。

incr/decr/incrby/incrbyfloat, 如果key還不存在時創(chuàng)建key并設(shè)原值為0害捕。

setEx/pSetEx绿淋, Set + Expire 的簡便寫法,p字頭以毫秒為單位。

setNx吨艇, key不存在時才put進(jìn)去躬它。

getset, 設(shè)置新值东涡,返回舊值冯吓。

mget/mset/msetex倘待, 一次get/set多個key。

getbit/setbit/bitop/bitcount bitmap玩法组贺,比如統(tǒng)計(jì)今天的訪問用戶凸舵,每個用戶有一個offset,今天進(jìn)來的話就把那個位為1失尖。

append/setrange/getrange啊奄,只對特定的數(shù)據(jù)格式比如字段定長的有用,json格式就沒用掀潮。

3菇夸、Hash

Key-HashMap結(jié)構(gòu),相比2.2中的JSON格式Value仪吧,可以只讀取/更新對象的某些屬性庄新,有些屬性超長就讓它一邊呆著不動。薯鼠。

另一個用法是用來建索引择诈。比如User對象,除了id有時還要按name來查詢出皇,可以建一個Key為user:index:name的Hash羞芍,在插入U(xiǎn)ser對象時(set user:101 {"id":101,"name":"calvin"}), 順便往這個hash插入一條(hset user:index:name calvin 101)郊艘,這時calvin作為hash里的一個key荷科,值為101。按name查詢的時候暇仲,用hget user:index:name calvin 就能從名為calvin的key里取出id步做。

4、List

Redis里可以當(dāng)雙向鏈表來用奈附,還提供blocking版本的pop函數(shù)全度,可以當(dāng)Message Queue來用。

不過List并沒有JMS的ack機(jī)制斥滤,如果消費(fèi)者把job給Pop走了又沒處理完就死機(jī)了怎么辦? 解決方法之一是加多一個sorted set将鸵,以分發(fā)時間為score,用戶把job做完了之后要去消掉它佑颇。

除了List標(biāo)準(zhǔn)的雙向POP/PUSH外顶掉,還支持對隊(duì)列內(nèi)容的直接操作,比如LREM/LSET/LINSERT/LINDEX挑胸。

另外經(jīng)常用LTRIM限制List的大小痒筒,比如只保留最新的20條消息。LRANGE不同于POP直接彈走元素,只是返回列表內(nèi)一段下標(biāo)的元素簿透。LLEN獲取列表的長度移袍。

5、Set

Set就是Set老充,還提供一些交集葡盗,并集,差集的集合操作啡浊。

6觅够、Sorted Set

有序集,元素放入集合的時候要同時提供該元素的分?jǐn)?shù)巷嚣。

ZRANGE/ZREVRANGE 按排名的上下限返回元素喘先,正數(shù)與倒數(shù)。

ZRANGEBYSCORE/ZREVRANGEBYSCORE 按分?jǐn)?shù)的上下限返回元素涂籽,正數(shù)與倒數(shù)苹祟。

ZREMRANGEBYRANK/ZREMRANGEBYSCORE 按排名/按分?jǐn)?shù)刪除元素砸抛。

ZCOUNT 統(tǒng)計(jì)分?jǐn)?shù)上下限之間的元素個數(shù)评雌。

ZRANK/ZREVRANK 顯示某個元素的正倒序的排名。

ZSCORE/ZINCRBY 顯示元素的分?jǐn)?shù)/增加元素的分?jǐn)?shù)直焙。

ZADD/ZREM/ZCARD/ZINTERSTORE/ZUNIONSTORE 集合操作與SET相同景东,少了個差集的操作。

7奔誓、事務(wù)

用Multi/Exec/Discard實(shí)現(xiàn)斤吐, 隔離級別是這邊事務(wù)一天不提交,那邊另一個事務(wù)還是看到舊的值厨喂。 還有個Watch指令和措,起到CAS的效果,如果事務(wù)提交時蜕煌,Key的值已被別的事務(wù)改變派阱,事務(wù)會被打斷。

8斜纪、Lua Script

Redis2.6內(nèi)置的Lua Script支持贫母,可以在Redis的Server端一次過運(yùn)行大量邏輯。

整個Script默認(rèn)是在一個事務(wù)里的盒刚。

Script里涉及的所有Key盡量用變量腺劣,從外面?zhèn)魅耄筊edis一開始就知道你要改變哪些key因块。

EVAL每次傳輸一整段Script比較費(fèi)帶寬橘原,可以先用SCRIPT LOAD載入script,返回哈希值。然后用EVALHASH執(zhí)行趾断。

內(nèi)置的LUA庫里還很貼心的帶了CJSON寨辩,可以處理JSON字符串。

五歼冰、Redis的主從模式

前提:針對數(shù)據(jù)庫的增刪改查操作靡狞,在進(jìn)行數(shù)據(jù)庫的select操作是最耗費(fèi)負(fù)載的,為了更好的優(yōu)化mysql數(shù)據(jù)庫隔嫡,減輕mysql的負(fù)載甸怕,我們可以設(shè)置兩臺mysql數(shù)據(jù)庫,一臺主要負(fù)責(zé)數(shù)據(jù)的寫入腮恩,一臺負(fù)責(zé)數(shù)據(jù)的讀取梢杭,這樣相對可以減輕數(shù)據(jù)庫的壓力。同樣這種方案也可以應(yīng)用在redis中秸滴。設(shè)置主從redis.從服務(wù)器在連接到主服務(wù)器后武契,可以讀取主服務(wù)器上的數(shù)據(jù)。

注意:從服務(wù)器在連接主服務(wù)器后荡含,自身是不可以進(jìn)行寫數(shù)據(jù)的操作咒唆,所以在進(jìn)行自身操作的時候,必須要斷開于主服務(wù)器的連接释液。(殺死操作全释,重新啟動)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市误债,隨后出現(xiàn)的幾起案子浸船,更是在濱河造成了極大的恐慌,老刑警劉巖寝蹈,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件李命,死亡現(xiàn)場離奇詭異,居然都是意外死亡箫老,警方通過查閱死者的電腦和手機(jī)封字,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來槽惫,“玉大人周叮,你說我怎么就攤上這事〗缧保” “怎么了仿耽?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長各薇。 經(jīng)常有香客問我项贺,道長君躺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任开缎,我火速辦了婚禮棕叫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奕删。我一直安慰自己俺泣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布完残。 她就那樣靜靜地躺著伏钠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谨设。 梳的紋絲不亂的頭發(fā)上熟掂,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機(jī)與錄音扎拣,去河邊找鬼赴肚。 笑死,一個胖子當(dāng)著我的面吹牛二蓝,可吹牛的內(nèi)容都是我干的誉券。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼侣夷,長吁一口氣:“原來是場噩夢啊……” “哼横朋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起百拓,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎晰甚,沒想到半個月后衙传,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡厕九,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年蓖捶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扁远。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡俊鱼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出畅买,到底是詐尸還是另有隱情并闲,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布谷羞,位于F島的核電站帝火,受9級特大地震影響溜徙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜犀填,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一蠢壹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧九巡,春花似錦图贸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至佳窑,卻和暖如春制恍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背神凑。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工净神, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人溉委。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓鹃唯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瓣喊。 傳聞我的和親對象是個殘疾皇子坡慌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

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