一、NoSQL介紹
1、NoSQL(NoSQL =Not Only SQL ),意即“不僅僅是SQL”,是一項全新的資料庫革命性運動,早期就有人提出,發展至2009年趨勢越發高漲。
2、NoSQL,指的是非關係型的資料庫。隨著互連網web2.0網站的興起,傳統的關聯式資料庫在應付web2.0網站,特別是超大規模和高並發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,而非關係型的資料庫則由於其本身的特點得到了非常迅速的發展。
3、NoSQL是以key-value形式儲存,和傳統的關係型資料庫不一樣,不一定遵循傳統資料庫的一些基本要求,比如:SQL標準(增刪改查)、ACID屬性(原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability))、表結構等等,這類資料庫有以下特點:非關係型的、分布式的、開源的、水平可擴充的。
4、常用的索引值對:
JavaScript:JSON
Java:HashMap
5、NoSQL特點
1)處理超大量的資料
2)運行在便宜的PC伺服器叢集上
3)擊碎了效能瓶頸
6、NoSQL適用情境
1)對資料高並發讀寫
2)對海量資料的高效率儲存和訪問
3)對資料的高可擴充性和高可用性
二、Redis介紹
1、Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、高效能的Key-Value資料庫,並提供多種語言的API。
2、和Memcached類似,它支援儲存的value類型相對更多,包括string(字串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(雜湊類型)
3、與memcached一樣,為了保證效率,資料都是緩衝在記憶體中。區別的是redis會周期性的把更新的資料寫入磁碟或者把修改操作寫入追加的記錄檔案,並且在此基礎上實現了master-slave(主從)同步。
4、這些資料類型都支援push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支援各種不同方式的排序。
5、Redis部署方案
1)目前全球最大的Redis使用者是新浪微博
2)應用程式直接存取Redis資料庫
3)應用程式直接存取Redis資料庫,只有當Redis訪問失敗時才訪問MySql。
6、Redis適用場合
1)取最新N個資料的操作,例如:取最新的500篇文章
2)熱門排行榜應用,取TOPN操作
3)需要精確設定到期時間的應用
4)計數器應用
5)Uniq操作,擷取某段時間所有資料排重值
6)即時系統,反垃圾系統
7)Pub/Sub構建即時訊息系統,例如:發布與訂閱
8)構建隊列系統,例如:棧/隊列
9)緩衝
7、Redis的安裝與部署
步驟:
1)下載:wget http://download.redis.io/releases/redis-2.8.5.tar.gz
2)編譯來源程式
Ø tar zxvf redis-2.8.5.tar.gz
Ø cd redis-2.8.5
Ø make
Ø cd src
Ø make install
3)移動檔案,便於管理
Ø sudo mkdir -p /usr/local/redis/bin
Ø sudo mkdir -p /usr/local/redis/etc
Ø sudo mv /home/lizhanhong/javatools/redis-2.8.5/redis.conf/usr/local/redis/etc
Ø cd /home/lizhanhong/javatools/redis-2.8.5/src
Ø sudo mv mkreleasehdr.sh redis-benchmark redis-check-aofredis-check-dump redis-cli redis-server /usr/local/redis/bin/
4)啟動Redis服務
Ø /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
Ø Redis服務端的預設串連連接埠是6379
Ø Mysql服務端的預設串連連接埠是3306
Ø MongoDB服務端的預設串連連接埠是27017
5)用戶端串連
/usr/local/redis/bin/redis-cli
6)停止Redis執行個體
Ø 方法一:/usr/local/redis/bin/redis-cli shutdown
Ø 方法二:pkill redis-server
Ø 方法三:kill -p 進程號
Ø 查看連接埠:netstat -tunpl |grep 6379
Ø 系統啟動時開啟redis服務:
在/etc/rc.local裡面添加
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf |
7)後台啟動配置
修改設定檔redis.conf裡面的daemonize值為yes
8、Redis的配置
daemonize 是否以後台進程運行,預設為no pidfile 如以後台進程運行,則需指定一個pid,預設為/var/run/redis.pid bind 綁定主機IP,預設值為127.0.0.1(注釋) port 監聽連接埠,預設為6379 timeout 逾時時間,預設為300(秒) loglevel 日誌記錄等級,有4個可選值,debug,verbose(預設值),notice,warning logfile 日誌記錄方式,預設值為stdout databases 可用資料庫數,預設值為16,預設資料庫為0 save 指出在多長時間內,有多少次更新操作,就將資料同步到資料檔案。這個可以多個條件配合,比如預設設定檔中的設定,就設定了三個條件。 save 900 1 900秒(15分鐘)內至少有1個key被改變 save 300 10 300秒(5分鐘)內至少有300個key被改變 save 60 10000 60秒內至少有10000個key被改變 rdbcompression 儲存至本機資料庫時是否壓縮資料,預設為yes dbfilename 本機資料庫檔案名稱,預設值為dump.rdb dir 本機資料庫存放路徑,預設值為 ./ slaveof 當本機為從服務時,設定主服務的IP及連接埠(注釋) masterauth 當本機為從服務時,設定主服務的串連密碼(注釋) requirepass 串連密碼(注釋) maxclients 最大用戶端串連數,預設不限制(注釋) maxmemory 設定最大記憶體,達到最大記憶體設定後,Redis會先嘗試清除已到期或即將到期的Key,當此方法處理後,任到達最大記憶體設定,將無法再進行寫入操作。(注釋) appendonly 是否在每次更新操作後進行日誌記錄,如果不開啟,可能會在斷電時導致一段時間內的資料丟失。因為redis本身同步資料檔案是按上面save條件來同步的,所以有的資料會在一段時間內只存在於記憶體中。預設值為no appendfilename 更新記錄檔名,預設值為appendonly.aof(注釋) appendfsync 更新日誌條件,共有3個可選值。no表示等作業系統進行資料緩衝同步到磁碟,always表示每次更新操作後手動調用fsync()將資料寫到磁碟,everysec表示每秒同步一次(預設值)。 vm-enabled 是否使用虛擬記憶體,預設值為no vm-swap-file 虛擬記憶體檔案路徑,預設值為/tmp/redis.swap,不可多個Redis執行個體共用 vm- max-memory 將所有大於vm-max-memory的資料存入虛擬記憶體,無論vm-max-memory設定多小,所有索引資料都是記憶體儲存的 (Redis的索引資料就是keys),也就是說,當vm-max-memory設定為0的時候,其實是所有value都存在於磁碟。預設值為0。 |