redis

姓名:穆培婷

學(xué)號(hào):17101223414

專業(yè):軟件工程

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

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

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

【嵌牛提問(wèn)】:redis是什么?redis有什么用?

【嵌牛正文】:

一、什么是redis?

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

1、為什么要用redis

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

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

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

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

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

2、什么場(chǎng)合適合使用redis?

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

2)【list】獲得最新N個(gè)數(shù)據(jù)或某個(gè)分類的最新數(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大善人聘請(qǐng)了他專心寫(xiě)Redis

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

4、拓展補(bǔ)充

緩存:

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

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

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

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

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

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

二、與memcached比較

1) Redis不僅僅支持簡(jiǎn)單的k/v類型的數(shù)據(jù),同時(shí)還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。

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

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

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

相關(guān)資源:Redis手冊(cè)網(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

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

新開(kāi)終端:cd /usr/local/redis

客戶端:./redis-cli

四、具體使用

1、Key

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

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

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

SORT,對(duì)集合按數(shù)字或字母順序排序后返回,或者存到另一個(gè)List,還可以關(guān)聯(lián)到外部Key等。因?yàn)闀?huì)耗用CPU,有時(shí)會(huì)安排到slave上執(zhí)行。

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

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

2、String

最普通的key-value,除了支持最基本的get/set, Redis也很喜歡添加一些簡(jiǎn)便的指令,在服務(wù)端做起來(lái)是舉手之勞,客戶端便方便很多。

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

setEx/pSetEx, Set + Expire 的簡(jiǎn)便寫(xiě)法,p字頭以毫秒為單位。

setNx, key不存在時(shí)才put進(jìn)去。

getset, 設(shè)置新值,返回舊值。

mget/mset/msetex, 一次get/set多個(gè)key。

getbit/setbit/bitop/bitcount bitmap玩法,比如統(tǒng)計(jì)今天的訪問(wèn)用戶,每個(gè)用戶有一個(gè)offset,今天進(jìn)來(lái)的話就把那個(gè)位為1。

append/setrange/getrange,只對(duì)特定的數(shù)據(jù)格式比如字段定長(zhǎng)的有用,json格式就沒(méi)用。

3、Hash

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

另一個(gè)用法是用來(lái)建索引。比如User對(duì)象,除了id有時(shí)還要按name來(lái)查詢,可以建一個(gè)Key為user:index:name的Hash,在插入U(xiǎn)ser對(duì)象時(shí)(set user:101 {"id":101,"name":"calvin"}), 順便往這個(gè)hash插入一條(hset user:index:name calvin 101),這時(shí)calvin作為hash里的一個(gè)key,值為101。按name查詢的時(shí)候,用hget user:index:name calvin 就能從名為calvin的key里取出id。

4、List

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

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

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

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

5、Set

Set就是Set,還提供一些交集,并集,差集的集合操作。

6、Sorted Set

有序集,元素放入集合的時(shí)候要同時(shí)提供該元素的分?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ù)上下限之間的元素個(gè)數(shù)。

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

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

ZADD/ZREM/ZCARD/ZINTERSTORE/ZUNIONSTORE 集合操作與SET相同,少了個(gè)差集的操作。

7、事務(wù)

用Multi/Exec/Discard實(shí)現(xiàn), 隔離級(jí)別是這邊事務(wù)一天不提交,那邊另一個(gè)事務(wù)還是看到舊的值。 還有個(gè)Watch指令,起到CAS的效果,如果事務(wù)提交時(shí),Key的值已被別的事務(wù)改變,事務(wù)會(huì)被打斷。

8、Lua Script

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

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

Script里涉及的所有Key盡量用變量,從外面?zhèn)魅?,使Redis一開(kāi)始就知道你要改變哪些key。

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

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

五、Redis的主從模式

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

注意:從服務(wù)器在連接主服務(wù)器后,自身是不可以進(jìn)行寫(xiě)數(shù)據(jù)的操作,所以在進(jìn)行自身操作的時(shí)候,必須要斷開(kāi)于主服務(wù)器的連接。(殺死操作,重新啟動(dòng))

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容