Redis資料庫(一)
Redis資料庫
- NoSql介紹
對於資料庫的認識,從傳統的做法來講,最初只有關係型資料庫,關係型資料庫並不是資料庫一直以來的持續發展。
關係型資料庫的操作核心語法:SQL,但是SQL語法要求太嚴格了,而且在進行SQL處理的時候一旦處理不當就會產生大量的笛卡兒積,所以很多人不認可SQL操作,而一部分人就主張使用命令來完成資料庫的操作
例如:微軟在90年代有一個數據庫 ForPro,這個資料庫最初只能依靠自己的命令來進行處理,由於SQL的大力推廣,後來ForPro資料庫不得已支援了SQL語法。
關係型資料庫的問題:
1.利用ACID(原子性,一致性、隔離性、永續性)保證資料完整性
事務控制:一條記錄修改未提交或者未回滾,則其他使用者不能更新,造成效能問題
2.行列的規範化儲存(要求嚴格)
3.預定義結構(表結構定義)
4.儲存資料量“小”
5.結構化查詢
資料庫中的事務控制是一個很好的機制,但其本身有一個最大的缺點:速度慢(處理速度太慢),單節點的資料庫(一臺主機)即使再厲害,你所在的伺服器的硬體效能再好,你也無法承受幾億條資料
對於傳統開發,沒有高併發的訪問,不需要考慮這些效能問題。但網際網路行業,高併發量是經常存在的
NoSQL(NoSQL = Not Only SQL):即:不僅僅是SQL
NoSQL特點:
採用資料集儲存
動態結構定義
儲存精簡
可擴充套件性強
適合雲端計算
NoSQL訪問速度極快。只要前臺處理得當,可以保證資料的準確性。
在實際的開發過程中,關係型資料庫是不能夠被取代的,因為它儲存的資料都是結構化的資料,但是一些操作頻率較高的資料。例如:在所有的點上平臺上都會有一個購物車的功能,現在的技術要考慮PC端、移動端資料通用。
這樣的操作更新資料庫比較頻繁,這樣的解決方案太麻煩了,因為既然要操作的是資料庫,資料庫最好能有這樣大併發資料放訪問的功能,傳統關係型資料庫因為有了事務這樣一個概念,才讓整個執行變得異常緩慢。
解決了效能問題
傳統關係型資料庫依然要進行保留,依然要保留原始的結構化資料,而NoSQL要負責那些高併發的使用者資料操作
NoSQL劃分:
1.鍵值(Key-Value)儲存資料庫:採用Hash表結構儲存(簡單、易部署):最常用:Redis(把資料存到硬碟上)
MongoDB:文件型資料庫
影象資料庫(Neo4J、FlockDB)
在現在的開發之中,國內使用最多的NoSQL資料庫:
Redis、Memcached、MongoDB(儲存文件,類似於json結構的資料)
專案沒有NoSQL資料庫,就可以定性:屬於傳統專案,不需要考慮所謂的高併發處理機制,專案的使用人群比較小眾。
- Redis介紹
Redis:記憶體快取記憶體資料庫、遠端資料服務、開源的、先進的key-value儲存可用於構建高效能,可擴充套件的web應用程式的解決方案(C語言編寫)
支援豐富的資料型別,如string、list、set、hash
官網地址:http://www.redis.io/
如果要想學習Redis,要學會檢視官方文件Documents
使用Redis的時候儘量選擇3.2以上的版本,因為新版本才存在有一個官方提供的叢集支援(RedisCluster),低版本沒有(三套叢集架構 ,最簡單RedisCluster,不同公司整合不同的架構)
Nginx如果做反向伺服器(Tomcat)代理的時候,需要Redis進行記憶體的session處理。
Redis特點:
Redis整體的特點是速度快,支援的資料型別多,但並不在只有Redis具備這樣的特點,Redis是屬於快取資料庫的第二代產品,而第一代產品是memcached資料庫。
Redis與memcache的區別:
Redis支援更多的資料型別,而且Redis資料庫中的資料允許被持久化(儲存到磁碟),具有穩定性,而memcached的資料在記憶體中,(只在記憶體操作,一旦斷電,資料丟失),Redis支援主從備份。
- Redis的安裝
首先Redis提供給使用者的只是一個原始碼的開發程式包(C程式的原始檔)。,既然是C語言的檔案,那麼如果要想使用Redis,必須進行程式碼的編譯處理。理論上編譯環境可以在任意的作業系統中執行,考慮到實際的應用環境,更多的是在Linux下完成。
如果非要在windows中執行,可以去下載一個cygwin的UNIX模擬環境(在windows下可以使用linux命令)
一般不這樣做。
1.將Redis開發包上傳到LInux系統之中,但是我們需要注意,由於給出的開發包屬於原始碼,所以建議解壓縮到”/usr/local/src“的目錄之中(存放原始碼的路徑)
tar xzvf /src/ftp/redis-4.0.9.tar.gz -C /usr/local/src/
2.進入到redis原始碼所在的安裝目錄:
cd /usr/local/src/redis-4.0.9/
ll
3.進行程式的編譯處理,輸入make;
sudo apt-get install make 或者apt install make (安裝make指令)
發現還有錯誤
sudo apt-get install gcc (安裝gcc)
make MALLOC=libc (發現是malloc的 庫有問題)
make
4.編譯完成之後要進行redis安裝,輸入make install
5.Redis屬於記憶體快取資料庫,那麼如果你現在是一臺單獨的Redis伺服器,則應應該考慮將所有的可用記憶體都交給Redis來進行支配,理論上還需要執行以下程式碼:
echo “vm.overcommit_memory=1”>>/etc/sysctl.conf
本次的操作指的是進行一次記憶體的分配策略,在進行設定的時候,”vm.overcommit_memory”有如下3個取值
“0”:表示再進行處理的時候首先要檢查是否有足夠的記憶體供應,如果現在沒有足夠的記憶體供應,則無法分配,記憶體申請失敗,如果有可用記憶體則直接進行申請開闢
“1”:表示將所有的記憶體都交給應用使用,而不關心當前的記憶體狀態如何(做單獨的Redis伺服器)
“2”:表示允許分配超過所有實體記憶體和交換空間的記憶體總和
6.將以上配置寫入核心記憶體引數之中:/sbin/sysctl -p
7.為了方便使用Redis資料庫,那麼建立一個Redis支援的命令工具目錄:
mkdir -p /usr/local/redis/{bin,conf}
bin:可執行檔案
conf:所有的配置檔案(或者etc)
8.通過原始碼目錄拷貝出Redis所需要的程式執行檔案:
拷貝redis的服務啟動程式:cp /usr/local/src/redis-4.0.9/src/redis-server /usr/local/redis/bin
拷貝redis的命令列客戶端
cp /usr/local/src/redis-4.0.9/src/redis-cli /usr/local/redis/bin/
效能測試工具:(考驗redis的資料承受力)
cp /usr/local/src/redis-4.0.9/src/redis-benchmark /usr/local/redis/bin/
拷貝出一個配置檔案:
cp /usr/local/src/redis-4.0.9redis.conf /usr/local/redis/conf/
這樣就表示當前的redis資料庫已經將所有的程式檔案安裝成功
*Redis資料庫配置
如果 要想配置Redis資料庫,主要的配置檔案就是“redis.conf”,所有的配置在此處完成Redis作為一個具備有持久化功能的快取資料庫,所以其一定會有一個用於資料儲存的目錄,那麼一般在redis處理的時候有三類檔案需要做儲存
:Redsi的執行時的Pid(程序編號)
Redis的相關處理日誌
Redis的資料檔案
所以建立一個目錄用於存放這些資料
mkdir -p /usr/data/redis/{run,logs,dbcache}修改redis.conf的配置檔案(檔案特長)
vim /usr/local/redis/conf/redis.conf
1)配置redis的執行埠 (redis是服務 一定有埠)
預設埠 port 6379
2)配置Redis是否為後臺執行 daemonize no (預設) 修改為yes
3)設定程序儲存路徑:pidfile /var/run/redis_6379.pid 修改為:pidfile /usr/data/redis/run/redis_6379.pid
前提:目錄必須存在
4)設定日誌儲存路徑:logfile “_” 修改位 logfile “/usr/data/redis/logs/redis.log” 注意有下劃線
5)該Redis支援的資料個數 :databases 16
6)儲存資料檔案目錄 :dir ./修改為dir /usr/data/redis/dbcache
- 啟動Redis服務
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
如果要啟動Redis-Server就必須明確的指明要使用的redis.conf配置檔案
- Redis啟動會佔用6379的埠,所以檢視埠
netstat -nptl
此時我們發現Redis執行的時候是在6379本機下才可以執行,無法對外提供服務(當前資料庫只能在本機訪問)
- 啟動Redis客戶端:
方式一:直接連線本機6379埠的redis
/usr/local/redis/bin/redis-cli
方式二:連線遠端的格式
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379
表示連線成功
6. 設定一個數據:set mldn java ——–mldn為key java為value
7. 取得資料:get mldn
- 關閉Redsi服務:
1)取得要關閉的Redis服務的程序,而後使用kill 直接殺死
2)直接使用killall redis-server幹掉所有的Redis服務
檢視程序
ps -ef |grep redis
執行killall redis-server表示關閉服務
一旦redis服務開啟,不可能輕易關閉
檢視執行日誌:
cat /usr/data/redis/logs/redis.log
同時dbcache下已經有了檔案dump.rdb