1. 程式人生 > >Redis運維秘籍之初識Redis

Redis運維秘籍之初識Redis

一個數 主從復制 級別 emca 升級 ets 一位 計算 用戶

Redis簡介

Redis 是完全開源免費的,遵守BSD協議,是一個高性能的key-value數據庫。

Redis 與其他 key - value 緩存產品有以下三個特點:

1.Redis支持數據的持久化,可以將內存中的數據保持在磁盤中,重啟的時候可以再次加載進行使用。

2.Redis不僅僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。

3.Redis支持數據的備份,即master-slave模式的數據備份。

Redis發展歷程

2008年,意大利的一家創業公司Merzia推出一款基於Mysql的網站實時統計系統LLOOGG,然而沒過多久該公司的創始人 Salvatore Sanfilippo便對MySQL的性能感到失望,於是他決定親自為LLOOGG量身定做一個數據庫,並與2009年開發完成,這個數據庫就是redis。

不過該公司創始人並不滿足只將redis用於自己的網站服務,而是希望更多的人能夠使用這一款數據庫軟件,於是便在同一年將該軟件開源發布,並開始和redis的另一位主要的代碼貢獻者 Pieter Noordhuis一起繼續著redis的開發。

在開源上市的短短的幾年時間內,Redis就擁有了龐大的用戶群體。根據目前在國內用戶的情況來看,redis的用戶包涵了國內各大廠商,百度、新浪、知乎等,當然也有國外的比如GitHub、Stack Overflow 、Flickr 等一些知名網站。
現在Redis的源碼托管在GitHub上,開發十分活躍。

Redis版本說明

Redis 版本號采用標準慣例:主版本號.副版本號.補丁級別,一個副版本號就標記為一個標準發行版本,例如 1.2,2.0,2.2,2.4,2.6,2.8,奇數的副版本號用來表示非標準版本,例如2.9.x發行版本是Redis 3.0標準版本的非標準發行版本。

目前官方最新為5.X版本,每一次大版本的升級,都對應了redis的功能的增加以及完善。那麽在諸如眾多的版本中,我們如何選擇使用,就也變成一個比較令人關註的問題。個人總結在選擇時註意以下幾個事項:

根據redis的命名規則,我們首先要判定我們要使用的是不是穩定版本,避免在生產環境使用測試版本,出現不可控問題。盡量選擇市面主流的大版本,新的版本雖然增加了很多的功能,但是並不一定最新的就是最適合我們的。我盡可能選擇使用者眾多的,可以提升相互交流的空間同時也提供更好的可維護性。就像找女朋友,適合自己的就一定是最好的。

Redis特性及優勢

1.速度快

這也是我們為什麽要選擇內存數據庫的原因,也是我們很重要的一個參數指標。Redis使用C語言開發,C語言號稱最貼近系統的開發語言。

redis所有數據都會存在內存當中。舉個例子:以人作為參考的話,在大腦記憶力的東西我們想找的話一定是最快的,其次才是我們所記錄在書本上的東西。

2.持久化

存在腦子裏的知識可能忘記丟失,持久化存儲到紙上(硬盤)的數據才相對於最穩定。

3.支持多種數據結構

同樣key-value的數據庫,redis比mecache要好一些,很好的支持了 String、List、Set、Hash、Zset數據結構。

4.功能豐富

redis同樣也支持事務、流水線、發布/訂閱、消息隊列功能。當然比如消息隊列功能來講,還是專業的MQ比較好,畢竟術業有專攻。什麽樣的東西做什麽樣的事情。

5.高可用以及分布式

主從復制配置簡單,容易上手。可以提供基本的數據備份。技術條件支持的情況下,肯容易實現讀寫分離,備份同時提高性能。也可以使用Sentinel實現很好的主從切換,完成高可用。在3.0以後的版本中擁有了官方的集群工具Redis-Cluster 實現了分布式的功能,使我們的容量得到很好的擴展。

Redis與其他軟件

1.通過以上我們對redis的介紹,至少對這款軟件我們大家都有了一定的了解,那麽我們同時在介紹幾款其他的nosql大家可以參考對比一下。

Memcache 純內存型
MongoDB 文檔型
codis redis為基礎的較好的二次開發

Redis的應用場景

1.顯示最新項目列表

在日常的web應用中,展示出最新的評論或者回復的時候,如果頻繁的操作數據庫,這肯定是不可以接受的。使用lpush用來插入1個ID,作為關鍵字存儲到列表的頭部。ltrim用來限制列表中常用的項目數據比如2000,.這樣的話redis使用的是常駐內存的緩存,當我們訪問超出這個值才會去訪問數據庫。

2.海量數據和高並發

redis所支持的分布式和持久化,可以很好的支持和對應海量數據和應對高並發。redis從初期的主從復制,到現在官方的cluster支持,可以很好地擴容,對比以前單機的容量有了質的變化。同時持久化可以有效提高數據的安全性和穩定性。

3.秒殺等高並發事務

秒殺開始前30分鐘把秒殺庫存從數據庫同步到Redis Sorted Set

用戶秒殺庫存放入秒殺限制數長度的Sorted Set

秒殺到指定秒殺數後,Sorted Set不在接受秒殺請求,並顯示返回標識

秒殺活動完全結束後,同步Redis數據到數據庫,秒殺正式結束

4.計數器

Redis是一個很好的計數器,這要感謝INCRBY和其他相似命令。

我相信你曾許多次想要給數據庫加上新的計數器,用來獲取統計或顯示新信息,但是最後卻由於寫入敏感而不得不放棄它們。

好了,現在使用Redis就不需要再擔心了。有了原子遞增(atomic increment),你可以放心的加上各種計數,用GETSET重置,或者是讓它們過期。

例如這樣操作:
復制代碼 代碼如下:

INCR user: 
EXPIRE user: 60

你可以計算出最近用戶在頁面間停頓不超過60秒的頁面瀏覽量,當計數達到比如20時,就可以顯示出某些條幅提示,或是其它你想顯示的東西。

6.緩存

這是一個很關鍵的,也是最重要的一個使用場景。在數據緩存方面可以替代memcache。

其他具體的使用場景大家可以發掘一下,不再一一的介紹。

我能學到什麽

通過這一篇的介紹, 大家都大致了解了redis是個什麽樣的軟件,redis的發展以及redis都有什麽樣的功能和優勢。

由於博主運維出身,我們的文章也都是偏於運維實戰的。通過整套的文章系統的學習,我們可以快速的上手投入到redis的運維和使用中。

比如主從復制,twemproxy如何架設redis集群,redis-cluster如何架設集群,以及擴容,使用哨兵完成我們環境的高可用等。我們將使用目前比較多的redis 3.X版本作為講解的藍本,大版本的差異不再過多的介紹,3.X開始很好的支持了cluster,可以很好的實現擴容、縮容等。使用Centos 7.X的系統,作為我們學習的工具和背景。

後面的章節,博主將在51CTO訂閱專欄《Redis運維秘籍》中進行一一講解,歡迎大家學習。

Redis運維秘籍之初識Redis