NoSQL數(shù)據(jù)庫服務(wù)之Redis
一圖詳解DB的分支產(chǎn)品
Nosql數(shù)據(jù)庫介紹
是一種非關(guān)系型數(shù)據(jù)庫服務(wù),它能解決常規(guī)數(shù)據(jù)庫的并發(fā)能力,比如傳統(tǒng)的數(shù)據(jù)庫的IO與性能的瓶頸,同樣它是關(guān)系型數(shù)據(jù)庫的一個補(bǔ)充,有著比較好的高效率與高性能。
專注于key-value查詢的redis、memcached、ttserver
解決以下問題:
1)對數(shù)據(jù)庫的高并發(fā)讀寫需求
2)大數(shù)據(jù)的高效存儲和訪問需求
3)高可擴(kuò)展性和高可用性的需求
Nosql數(shù)據(jù)庫的應(yīng)用環(huán)境
1)數(shù)據(jù)模型比較簡單
2)需要靈活性更強(qiáng)的IT系統(tǒng)
3)對數(shù)據(jù)庫的性能要求較高
4)不需要高度數(shù)據(jù)一致性
5)對于給定KEY,比較容易映射復(fù)雜值的環(huán)境
Nosql軟件的分類與特點(diǎn)
1)key-value鍵值存儲數(shù)據(jù)庫(redis、memcached)
- 用于內(nèi)容緩存,適合負(fù)載并擴(kuò)展大的數(shù)據(jù)集
- 數(shù)據(jù)類型是一系列的鍵值對
- 有快速查詢功能,但存儲數(shù)據(jù)少結(jié)構(gòu)化
- 對事務(wù)的支持不好,數(shù)據(jù)庫故障產(chǎn)生時不可進(jìn)行回滾
2)列存儲數(shù)據(jù)庫(HBase)
- 用于分布式的文件系統(tǒng)
- 以列簇式存儲,將同一列數(shù)據(jù)存在一起
- 查找速度快,可擴(kuò)展強(qiáng),更容易進(jìn)行分布式擴(kuò)展
- 功能相對局限
3)面向文件的數(shù)據(jù)庫(mongoDB)
- 用于WEB應(yīng)用較多
- 數(shù)據(jù)類型是一系列鍵值對
- 查詢性能不高,沒有統(tǒng)一的查詢語法
4)圖形數(shù)據(jù)庫(Graph)
- 社交網(wǎng)絡(luò)應(yīng)用較多
- 不容易做分布式的集群方案
常用的Nosql數(shù)據(jù)庫介紹
1)memcached
是一個開源高性能的,具有分布式內(nèi)存對象的緩存系統(tǒng)
特點(diǎn):
1、安裝布署簡單
2、支持高并發(fā)、高性能
3、通過程序或負(fù)載均衡可以實(shí)現(xiàn)分布式
4、僅為內(nèi)存緩存,重啟服務(wù)數(shù)據(jù)丟失
官方網(wǎng)站:http://memcached.org
2)memcacheDB
是新浪基于memcached開發(fā)的一個開源項(xiàng)目,具備了事務(wù)恢復(fù)功能
特點(diǎn):
1、高并發(fā)讀寫
2、高效存儲
3、高可用數(shù)據(jù)存儲
官方網(wǎng)站:http://memcachedb.org/benchmark.html
生產(chǎn)環(huán)境如何選擇Nosql數(shù)據(jù)庫
1、最常規(guī)的緩存應(yīng)用,memcached最合適
2、持久化存儲方案memcacheDB
3、2000萬以內(nèi)數(shù)據(jù)量的小數(shù)據(jù)用memcached
4、大數(shù)據(jù)量可以用redis
redis持久化數(shù)據(jù)服務(wù)
REmote DIctionary server(redis)是一個基于key-value鍵值對的持久化數(shù)據(jù)庫存儲系統(tǒng),對支持?jǐn)?shù)據(jù)存儲類型更多,包括字符串、列表、集合等
是一種持久化緩存服務(wù),會周期的把更新的數(shù)據(jù)寫入磁盤以及把修改操作記錄追加到文件里記錄下來,還支持主從同步模式,是一個開源的基于C語言編寫的,支持網(wǎng)絡(luò)、內(nèi)存可持久化的日志型、key-value數(shù)據(jù)庫
redis持久服務(wù)的特點(diǎn)
- key-value鍵值類型存儲系統(tǒng)
- 支持?jǐn)?shù)據(jù)可靠存儲
- 單進(jìn)程單線程高性能服務(wù)器
- 恢復(fù)比較慢
- 單機(jī)qps(秒并發(fā))可以達(dá)到10W
- 適合小數(shù)據(jù)高速讀寫訪問
redis存儲系統(tǒng)優(yōu)、缺點(diǎn):
- 可以持久化存儲數(shù)據(jù)
- 支持每秒10W的讀寫頻率
- 支持豐富的數(shù)據(jù)類型
- 所有操作都是原子性的
- 支持異機(jī)主從復(fù)制
- 內(nèi)存管理開銷大(低于物理內(nèi)存的3/5)
- 不同命令延遲差別大
官方網(wǎng)站:http://www.redis.io
redis持久化介紹
redis將數(shù)據(jù)存儲于內(nèi)存中,通過快照、日志兩種方式實(shí)現(xiàn)持久化存儲,前者性能高,會有數(shù)據(jù)丟失的情況,后者相反。
redis應(yīng)用場景
MYSQL+memcached網(wǎng)站架構(gòu)的問題:數(shù)據(jù)量大就需要拆表,需要擴(kuò)容,數(shù)據(jù)一致性是個問題
1)***應(yīng)用場景就是內(nèi)存服務(wù)
2)作為memcached替代方案
3)對數(shù)據(jù)一致性有一定要求但不高的業(yè)務(wù)
4)需要更多數(shù)據(jù)類型支持的業(yè)務(wù)
5)需要主從同步及負(fù)載均衡的業(yè)務(wù)
redis的安裝
要進(jìn)行主從同步配置,可以實(shí)現(xiàn)故障切換,主上禁用數(shù)據(jù)持久化,從上配置,內(nèi)存要夠大
- wget http://download.redis.io/releases/redis-2.8.24.tar.gz
- [root@redis-m tools]#tar zxf redis-2.8.24.tar.gz
- [root@redis-m tools]#cd redis-2.8.24
- [root@redis-m redis-2.8.24]#make
- [root@redis-m redis-2.8.24]#make PREFIX=/application/redis-2.8.24 install
- [root@redis-m redis-2.8.24]#ln -s /application/redis-2.8.24 /application/redis
- [root@redis-m tools]# tree /application/redis
- /application/redis
- `-- bin
- |-- redis-benchmark #性能測試工具
- |-- redis-check-aof #檢測更新日志
- |-- redis-check-dump #檢查本地數(shù)據(jù)庫rdb文件
- |-- redis-cli #命令行客戶端操作工具
- |-- redis-sentinel -> redis-server
- `-- redis-server #服務(wù)的啟動程序
配置環(huán)境變量
- [root@redis-m tools]# echo "PATH=/application/redis/bin:$PATH">>/etc/profile
- [root@redis-m tools]# source /etc/profile
- [root@redis-m tools]# which redis-server
- /application/redis/bin/redis-server
查看幫助文檔
- [root@redis-m tools]# redis-server --help
- Usage: ./redis-server [/path/to/redis.conf] [options]
- ./redis-server - (read config from stdin)
- ./redis-server -v or --version
- ./redis-server -h or --help
- ./redis-server --test-memory <megabytes>
- Examples:
- ./redis-server (run the server with default conf)
- ./redis-server /etc/redis/6379.conf
- ./redis-server --port 7777
- ./redis-server --port 7777 --slaveof 127.0.0.1 8888
- ./redis-server /etc/myredis.conf --loglevel verbose
啟動服務(wù)
- [root@redis-m ~]# cd /application/redis/
- [root@redis-m redis]# ll
- total 4
- drwxr-xr-x 2 root root 4096 Mar 22 04:50 bin
- [root@redis-m redis]# mkdir conf
- [root@redis-m redis]# cp /download/tools/redis-2.8.24/redis.conf ./conf/
- [root@redis-m redis]# redis-server /application/redis/conf/redis.conf &
- [6072] 22 Mar 05:00:51.373 # Server started, Redis version 2.8.24
- [6072] 22 Mar 05:00:51.374 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
#內(nèi)存不足的時候,數(shù)據(jù)加載到磁盤可能失效,可以使用命令解決或修改配置文件
- [6072] 22 Mar 05:00:51.375 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
- [6072] 22 Mar 05:00:51.375 * The server is now ready to accept connections on port 6379
- [root@redis-m redis]# lsof -i :6379
- COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
- redis-ser 6072 root 4u IPv6 24271 0t0 TCP *:6379 (LISTEN)
- redis-ser 6072 root 5u IPv4 24273 0t0 TCP *:6379 (LISTEN)
- vm.overcommit_memory
0表示用戶空間請求更多內(nèi)存時,內(nèi)核嘗試估算出余下可用內(nèi)存
1表示內(nèi)核允許***限度的的使用內(nèi)存
關(guān)閉服務(wù)命令
- [root@redis-m redis]# redis-cli shutdown
- [6072] 22 Mar 05:09:32.699 # User requested shutdown...
- [6072] 22 Mar 05:09:32.699 * Saving the final RDB snapshot before exiting.
- [6072] 22 Mar 05:09:32.710 * DB saved on disk
- [6072] 22 Mar 05:09:32.711 # Redis is now ready to exit, bye bye...
- [1]+ Done redis-server /application/redis/conf/redis.conf