NoSQL數據庫服務之Redis
一圖詳解DB的分支產品
Nosql數據庫介紹
是一種非關系型數據庫服務,它能解決常規數據庫的并發能力,比如傳統的數據庫的IO與性能的瓶頸,同樣它是關系型數據庫的一個補充,有著比較好的高效率與高性能。
專注于key-value查詢的redis、memcached、ttserver
解決以下問題:
1)對數據庫的高并發讀寫需求
2)大數據的高效存儲和訪問需求
3)高可擴展性和高可用性的需求
Nosql數據庫的應用環境
1)數據模型比較簡單
2)需要靈活性更強的IT系統
3)對數據庫的性能要求較高
4)不需要高度數據一致性
5)對于給定KEY,比較容易映射復雜值的環境
Nosql軟件的分類與特點
1)key-value鍵值存儲數據庫(redis、memcached)
- 用于內容緩存,適合負載并擴展大的數據集
- 數據類型是一系列的鍵值對
- 有快速查詢功能,但存儲數據少結構化
- 對事務的支持不好,數據庫故障產生時不可進行回滾
2)列存儲數據庫(HBase)
- 用于分布式的文件系統
- 以列簇式存儲,將同一列數據存在一起
- 查找速度快,可擴展強,更容易進行分布式擴展
- 功能相對局限
3)面向文件的數據庫(mongoDB)
- 用于WEB應用較多
- 數據類型是一系列鍵值對
- 查詢性能不高,沒有統一的查詢語法
4)圖形數據庫(Graph)
- 社交網絡應用較多
- 不容易做分布式的集群方案
常用的Nosql數據庫介紹
1)memcached
是一個開源高性能的,具有分布式內存對象的緩存系統
特點:
1、安裝布署簡單
2、支持高并發、高性能
3、通過程序或負載均衡可以實現分布式
4、僅為內存緩存,重啟服務數據丟失
官方網站:http://memcached.org
2)memcacheDB
是新浪基于memcached開發的一個開源項目,具備了事務恢復功能
特點:
1、高并發讀寫
2、高效存儲
3、高可用數據存儲
官方網站:http://memcachedb.org/benchmark.html
生產環境如何選擇Nosql數據庫
1、最常規的緩存應用,memcached最合適
2、持久化存儲方案memcacheDB
3、2000萬以內數據量的小數據用memcached
4、大數據量可以用redis
redis持久化數據服務
REmote DIctionary server(redis)是一個基于key-value鍵值對的持久化數據庫存儲系統,對支持數據存儲類型更多,包括字符串、列表、集合等
是一種持久化緩存服務,會周期的把更新的數據寫入磁盤以及把修改操作記錄追加到文件里記錄下來,還支持主從同步模式,是一個開源的基于C語言編寫的,支持網絡、內存可持久化的日志型、key-value數據庫
redis持久服務的特點
- key-value鍵值類型存儲系統
- 支持數據可靠存儲
- 單進程單線程高性能服務器
- 恢復比較慢
- 單機qps(秒并發)可以達到10W
- 適合小數據高速讀寫訪問
redis存儲系統優、缺點:
- 可以持久化存儲數據
- 支持每秒10W的讀寫頻率
- 支持豐富的數據類型
- 所有操作都是原子性的
- 支持異機主從復制
- 內存管理開銷大(低于物理內存的3/5)
- 不同命令延遲差別大
官方網站:http://www.redis.io
redis持久化介紹
redis將數據存儲于內存中,通過快照、日志兩種方式實現持久化存儲,前者性能高,會有數據丟失的情況,后者相反。
redis應用場景
MYSQL+memcached網站架構的問題:數據量大就需要拆表,需要擴容,數據一致性是個問題
1)***應用場景就是內存服務
2)作為memcached替代方案
3)對數據一致性有一定要求但不高的業務
4)需要更多數據類型支持的業務
5)需要主從同步及負載均衡的業務
redis的安裝
要進行主從同步配置,可以實現故障切換,主上禁用數據持久化,從上配置,內存要夠大
- 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 #檢查本地數據庫rdb文件
- |-- redis-cli #命令行客戶端操作工具
- |-- redis-sentinel -> redis-server
- `-- redis-server #服務的啟動程序
配置環境變量
- [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
啟動服務
- [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.
#內存不足的時候,數據加載到磁盤可能失效,可以使用命令解決或修改配置文件
- [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表示用戶空間請求更多內存時,內核嘗試估算出余下可用內存
1表示內核允許***限度的的使用內存
關閉服務命令
- [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





























