推薦(免費(fèi)):redis
文章目錄
- 一、redis是什么
- 二、Redis能干什么
- 三、Redis下載與安裝部署
- 四、Redis的幾個(gè)小知識(shí)
一、Redis是什么
Redis:REmote DIctionary Server(遠(yuǎn)程字典服務(wù)器)
Redis是完全開(kāi)源免費(fèi)的,用c語(yǔ)言編寫(xiě)的,遵守BSD協(xié)議的一個(gè)高性能的(key/value)分布式內(nèi)存數(shù)據(jù)庫(kù),也是基于內(nèi)存運(yùn)行并支持持久化的nosql數(shù)據(jù)庫(kù),是當(dāng)前最熱門(mén)的NoSql數(shù)據(jù)庫(kù)之一,也被人們稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器。同時(shí),Redis也是一個(gè)簡(jiǎn)單的、高效的、分布式的、基于內(nèi)存的緩存工具。架構(gòu)好服務(wù)器后,通過(guò)網(wǎng)絡(luò)連接(類似數(shù)據(jù)庫(kù)),提供Key-Value式緩存服務(wù)。
Redis有以下幾個(gè)優(yōu)勢(shì):
- 1.性能極高 Redis讀的速度是11萬(wàn)次/s,寫(xiě)的速度是8萬(wàn)次/秒。
- 2.豐富的數(shù)據(jù)類型 Redis支持的類型有String、Hash、List、Set以及Ordered Set數(shù)據(jù)庫(kù)類型。
- 3.原子性 Redis所有操作都是原子性的,通過(guò)MULTI和EXEC指令包起來(lái)。
- 4.豐富的讀寫(xiě) Redis支持publish/subscribe、通知、key過(guò)期等特性。
- 5.高速讀寫(xiě) redis使用自己實(shí)現(xiàn)的分離器,代碼量很短,沒(méi)有使用lock(mysql),因此效率非常高。
Redis也有以下幾個(gè)劣勢(shì):
- 1.持久化 Redis直接將數(shù)據(jù)存儲(chǔ)在內(nèi)存中,如果要將數(shù)據(jù)保存到磁盤(pán)上,第一種方法是使用①定時(shí)快照(snapshot):每隔一段時(shí)間將整個(gè)數(shù)據(jù)庫(kù)寫(xiě)到磁盤(pán)上,每次均是寫(xiě)全部數(shù)據(jù),但是代價(jià)非常高;第二種方法是②基于語(yǔ)句追加(aof):只追蹤變化的數(shù)據(jù),但是追加的log可能過(guò)大,同時(shí)所有的操作均重新執(zhí)行一遍,恢復(fù)速度慢。
- 2.耗內(nèi)存,占用內(nèi)存過(guò)高。
二、Redis能干什么
企業(yè)開(kāi)發(fā)中,可以將Redis作為數(shù)據(jù)庫(kù)、緩存、熱點(diǎn)數(shù)據(jù)(經(jīng)常被查詢但是不被修改和刪除的數(shù)據(jù))、消息中間件等大部分功能。
Redis的常用場(chǎng)景實(shí)例如下:
-
緩存
如今緩存幾乎是所有中大型網(wǎng)站都在用的必殺技,合理的利用緩存不僅能夠提升網(wǎng)站的訪問(wèn)速度,還能大大降低數(shù)據(jù)庫(kù)的壓力。Redis提供了鍵過(guò)期的功能,也提供了靈活的鍵淘汰策略。 -
排行榜
如淘寶的月度銷量榜單、商品按時(shí)間的上新排行榜等。Redis提供的有序集合數(shù)據(jù)類構(gòu)能實(shí)現(xiàn)各種復(fù)雜的排行榜應(yīng)用。 -
計(jì)數(shù)器
如電商網(wǎng)站商品的瀏覽量、視頻網(wǎng)站視頻的播放數(shù)等。為了保證數(shù)據(jù)實(shí)時(shí)效,每次瀏覽都得給+1,并發(fā)量高時(shí)如果每次都請(qǐng)求數(shù)據(jù)庫(kù)操作無(wú)疑是種挑戰(zhàn)和壓力。Redis提供的incr命令來(lái)實(shí)現(xiàn)計(jì)數(shù)器功能,內(nèi)存操作,性能非常好,非常適用于這些計(jì)數(shù)場(chǎng)景。 -
分布式會(huì)話
集群模式下,在應(yīng)用不多的情況下一般使用容器自帶的Session復(fù)制功能就能滿足,在應(yīng)用增多相對(duì)復(fù)雜的系統(tǒng)中,一般都會(huì)搭建以Redis等內(nèi)存數(shù)據(jù)庫(kù)為中心的session服務(wù),session不再由容器管理,而是由session服務(wù)及內(nèi)存數(shù)據(jù)庫(kù)管理。 -
分布式鎖
分布式技術(shù)帶來(lái)的技術(shù)挑戰(zhàn)是對(duì)同一個(gè)資源的并發(fā)訪問(wèn),如全局ID、減庫(kù)存、秒殺等場(chǎng)景,并發(fā)量不大的場(chǎng)景可以使用數(shù)據(jù)庫(kù)的悲觀鎖、樂(lè)觀鎖來(lái)實(shí)現(xiàn),但在并發(fā)量高的場(chǎng)合中,利用數(shù)據(jù)庫(kù)鎖來(lái)控制資源的并發(fā)訪問(wèn)是不太理想的,大大影響了數(shù)據(jù)庫(kù)的性能??梢岳肦edis的setnx功能來(lái)編寫(xiě)分布式的鎖,如果設(shè)置返回1說(shuō)明獲取鎖成功,否則獲取鎖失敗,實(shí)際應(yīng)用中要考慮的細(xì)節(jié)要更多。 -
社交網(wǎng)絡(luò)
點(diǎn)贊、踩、關(guān)注/被關(guān)注、共同好友等是社交網(wǎng)站的基本功能,社交網(wǎng)站的訪問(wèn)量通常來(lái)說(shuō)比較大,而且傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)類型不適合存儲(chǔ)這種類型的數(shù)據(jù),Redis提供的哈希、集合等數(shù)據(jù)結(jié)構(gòu)能很方便的的實(shí)現(xiàn)這些功能。 -
最新列表
Redis列表結(jié)構(gòu),LPUSH可以在列表頭部插入一個(gè)內(nèi)容ID作為關(guān)鍵字,LTRIM可用來(lái)限制列表的數(shù)量,這樣列表永遠(yuǎn)為N個(gè)ID,無(wú)需查詢最新的列表,直接根據(jù)ID去到對(duì)應(yīng)的內(nèi)容頁(yè)即可。 -
消息系統(tǒng)
消息隊(duì)列是大型網(wǎng)站必用中間件,如activemq、rabbitmq、kafka等流行的消息隊(duì)列中間件,主要用于業(yè)務(wù)解耦、流量削峰及異步處理實(shí)時(shí)性低的業(yè)務(wù)。Redis提供了發(fā)布/訂閱及阻塞隊(duì)列功能,能實(shí)現(xiàn)一個(gè)簡(jiǎn)單的消息隊(duì)列系統(tǒng)。但是,這個(gè)不能和專業(yè)的消息中間件相比。
三、Redis下載與安裝部署
Redis英文官網(wǎng)。
Redis中文網(wǎng)站。
由于企業(yè)里面做Redis開(kāi)發(fā),99%都是linux版的運(yùn)用和安裝,所以本文僅介紹Linux下的安裝與運(yùn)行,windows下的安裝使用小伙伴們可以自行百度。前往上面的官網(wǎng)點(diǎn)擊Download下載.gz安裝包后,放在Linux下的/opt目錄 (我這里安裝的是Redis的6.0.5版本)。
- 解壓命令為:tar -zxvf redis-6.0.5.tar.gz
上述命令只是解壓了Redis,如果想要安裝Redis,需要Linux系統(tǒng)有g(shù)cc環(huán)境,如果沒(méi)有可以使用yum install gcc-c++安裝,然后使用gcc -v查看版本。
如果Linux環(huán)境已經(jīng)有了gcc環(huán)境,直接使用下面的命令進(jìn)行安裝:
- 安裝命令為:make install
安裝好默認(rèn)是像tomcat那樣不能開(kāi)機(jī)自啟的,可以修改 redis.conf 文件中的 daemonize 屬性為yes。
- 開(kāi)啟redis服務(wù):redis-server /myredis/redis.conf(此處為修改屬性后的redis配置文件)
查看后臺(tái)Redis服務(wù)是否啟動(dòng):
- ps -ef|grep redis
開(kāi)啟Redis服務(wù):
- redis-cli -p 6379
正常關(guān)閉,數(shù)據(jù)會(huì)進(jìn)行保存
在redis命令行中使用shutdown命令關(guān)閉。
非正常關(guān)閉,易導(dǎo)致數(shù)據(jù)丟失
斷電、手動(dòng)kill掉redis進(jìn)程等。
幾個(gè)其他的redis命令
四、Redis的幾個(gè)小知識(shí)
Redis是一個(gè)單進(jìn)程,使用單進(jìn)程模型來(lái)處理客戶端的請(qǐng)求。對(duì)讀寫(xiě)等事件的響應(yīng)是通過(guò)對(duì)epoll函數(shù)的包裝來(lái)做到的。Redis的實(shí)際處理速度完全依靠主進(jìn)程的執(zhí)行效率。
epoll是Linux內(nèi)核為處理大批量文件描述符而作了改進(jìn)的epoll,是Linux下多路復(fù)用IO接口select/poll的增強(qiáng)版本,它能顯著提高程序在大量并發(fā)連接中只有少量活躍的情況下的系統(tǒng)CPU利用率。
-
Redis默認(rèn)有16個(gè)數(shù)據(jù)庫(kù),下標(biāo)從零開(kāi)始,初始默認(rèn)使用零號(hào)庫(kù),可以使用SELECT
命令連接上指定數(shù)據(jù)庫(kù)。 -
dbsize指令可以查看當(dāng)前數(shù)據(jù)庫(kù)的key的數(shù)量,keys *查看所有的key。
-
flushdb:清空當(dāng)前庫(kù)(慎用)
-
Flushall:清空全部庫(kù)(慎用)
-
統(tǒng)一密碼管理,16個(gè)庫(kù)都是同樣密碼,要么都OK要么一個(gè)也連接不上。
-
Redis索引都是從零開(kāi)始
-
Redis默認(rèn)端口是6379
更多相關(guān)免費(fèi)學(xué)習(xí)推薦:redis