1 Redis安裝與入門

1.Redis介紹

什麼是Redis?

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

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

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

    Redis不僅僅支持簡單的key-value類型的數據,同時還提供listsetzsethash等數據結構的存儲。

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

同時,再看下Redis有什麼優勢:

  • 讀速度爲110000次/s,寫速度爲81000次/s,性能極高
  • 具有豐富的數據類型
  • Redis所有操作都是原子的,意思是要麼成功執行要麼失敗完全不執行,多個操作也支持事務
  • 豐富的特性,比如Redis支持publish/subscribe、notify、key過期等

 

 2.Redis應用場景

2.1、熱點數據的緩存

      由於redis訪問速度塊、支持的數據類型比較豐富,所以redis很適合用來存儲熱點數據,另外結合expire,我們可以設置過期時間然後再進行緩存更新操作,這個功能最爲常見,我們幾乎所有的項目都有所運用。

2.2、限時業務的運用

     redis中可以使用expire命令設置一個鍵的生存時間,到時間後redis會刪除它。利用這一特性可以運用在限時的優惠活動信息、手機驗證碼等業務場景。

2.3、計數器相關問題

    redis由於incrby命令可以實現原子性的遞增,所以可以運用於高併發的秒殺活動、分佈式序列號的生成、具體業務還體現在比如限制一個手機號發多少條短信、一個接口一分鐘限制多少請求、一個接口一天限制調用多少次等等。

2.4、排行榜相關問題

關係型數據庫在排行榜方面查詢速度普遍偏慢,所以可以藉助redis的SortedSet進行熱點數據的排序。

    在奶茶活動中,我們需要展示各個部門的點贊排行榜, 所以我針對每個部門做了一個SortedSet,然後以用戶的openid作爲上面的username,以用戶的點贊數作爲上面的score, 然後針對每個用戶做一個hash,通過zrangebyscore就可以按照點贊數獲取排行榜,然後再根據username獲取用戶的hash信息。

 2.5、分佈式鎖

這個主要利用redis的setnx命令進行,setnx:"set if not exists"就是如果不存在則成功設置緩存同時返回1,否則返回0 ,這個特性在俞你奔遠方的後臺中有所運用,因爲我們服務器是集羣的,定時任務可能在兩臺機器上都會運行,所以在定時任務中首先 通過setnx設置一個lock,如果成功設置則執行,如果沒有成功設置,則表明該定時任務已執行。 當然結合具體業務,我們可以給這個lock加一個過期時間,比如說30分鐘執行一次的定時任務,那麼這個過期時間設置爲小於30分鐘的一個時間 就可以,這個與定時任務的週期以及定時任務執行消耗時間相關。

當然我們可以將這個特性運用於其他需要分佈式鎖的場景中,結合過期時間主要是防止死鎖的出現。

2.6、延時操作

這個目前我做過相關測試,但是還沒有運用到我們的實際項目中,下面我舉個該特性的應用場景。 比如在訂單生產後我們佔用了庫存,10分鐘後去檢驗用戶是夠真正購買,如果沒有購買將該單據設置無效,同時還原庫存。 由於redis自2.8.0之後版本提供Keyspace Notifications功能,允許客戶訂閱Pub/Sub頻道,以便以某種方式接收影響Redis數據集的事件。 所以我們對於上面的需求就可以用以下解決方案,我們在訂單生產時,設置一個key,同時設置10分鐘後過期, 我們在後臺實現一個監聽器,監聽key的實效,監聽到key失效時將後續邏輯加上。 當然我們也可以利用rabbitmq、activemq等消息中間件的延遲隊列服務實現該需求。

2.7、分頁、模糊搜索

redis的set集合中提供了一個zrangebylex方法,語法如下:

ZRANGEBYLEX key min max [LIMIT offset count]

通過ZRANGEBYLEX zset - + LIMIT 0 10 可以進行分頁數據查詢,其中- +表示獲取全部數據

zrangebylex key min max 這個就可以返回字典區間的數據,利用這個特性可以進行模糊查詢功能,這個也是目前我在redis中發現的唯一一個支持對存儲內容進行模糊查詢的特性。

前幾天我通過這個特性,對學校數據進行了模擬測試,學校數據60萬左右,響應時間在700ms左右,比mysql的like查詢稍微快一點,但是由於它可以避免大量的數據庫io操作,所以總體還是比直接mysql查詢更利於系統的性能保障。

2.8、點贊、好友等相互關係的存儲

Redis set對外提供的功能與list類似是一個列表的功能,特殊之處在於set是可以自動排重的,當你需要存儲一個列表數據,又不希望出現重複數據時,set是一個很好的選擇,並且set提供了判斷某個成員是否在一個set集合內的重要接口,這個也是list所不能提供的。 又或者在微博應用中,每個用戶關注的人存在一個集合中,就很容易實現求兩個人的共同好友功能。

這個在奶茶活動中有運用,就是利用set存儲用戶之間的點贊關聯的,另外在點贊前判斷是否點贊過就利用了sismember方法,當時這個接口的響應時間控制在10毫秒內,十分高效。

2.9、隊列

由於redis有list push和list pop這樣的命令,所以能夠很方便的執行隊列操作。

3.Redis安裝

 

3.1 windows 安裝redis


3.2 linux 安裝redis


Redis的官方下載網址是:http://redis.io/download  或  http://download.redis.io/releases/
Redis服務器端的默認端口是6379。

1. Redis的源碼包並上傳到Linux系統的這個目錄/opt/redis。
2. 解壓縮。           
tar -zxf redis-5.0.8.tar.gz
3. 切換到解壓後的目錄。
cd redis-5.0.8         
4. 編譯。
make        
(注意,編譯需要C語言編譯器gcc的支持,如果沒有,需要先安裝gcc。可以使用rpm -q gcc查看gcc是否安裝)
(利用yum在線安裝gcc的命令    yum -y install gcc )
(如果編譯出錯,請使用make clean清除臨時文件。之後,找到出錯的原因,解決問題後再來重新安裝。 )
5. 進入到src目錄。       
cd src
6. 執行安裝。
make install    
到此就安裝完成。由於安裝redis的時候,我們沒有選擇安裝路徑,故是默認位置安裝。在此,我們可以將可執行文件和配置文件移動到習慣的目錄。
cd /usr/local
mkdir -p /usr/local/redis/bin    
mkdir -p /usr/local/redis/etc
cd /lamp/redis-2.6.17
cp ./redis.conf /usr/local/redis/etc
cd src
cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server redis-sentinel /usr/local/redis/bin

開放linux 6379 端口
1.編輯 /etc/sysconfig/iptables 文件:vi /etc/sysconfig/iptables
加入內容並保存:-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 6379 -j ACCEPT
2.重啓服務:/etc/init.d/iptables restart
3.查看端口是否開放:/sbin/iptables -L -n
比較重要的3個可執行文件:
redis-server:Redis服務器程序
redis-cli:Redis客戶端程序,它是一個命令行操作工具。也可以使用telnet根據其純文本協議操作。
redis-benchmark:Redis性能測試工具,測試Redis在你的系統及配置下的讀寫性能。

3.3Redis的啓動命令:


/usr/local/redis/bin/redis-server

cd /usr/local/redis/bin
./redis-server /usr/local/redis/etc/redis.conf   爲redis-server指定配置文

 

3.4修改 redis.conf文件

daemonize yes --- 修改爲yes  後臺啓動

requirepass 123456  ----註釋取消掉設置賬號密碼

ps aux | grep '6379'  --- 查詢端口

 

 3.5redis命令連接方式


./redis-cli -h 127.0.0.1 -p 6379 -a "123456"  --- redis 使用賬號密碼連接


3.6 停止redis


redis-cli shutdown  或者 kill redis進程的pid

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章