1. 程式人生 > >一篇文章詳解NOsql數據庫Redis

一篇文章詳解NOsql數據庫Redis

iss mem 新浪 簡單 加載 release 單線程 高速 etc

一圖詳解DB的分支產品
技術分享圖片
osql數據庫介紹

是一種非關系型數據庫服務,它能解決常規數據庫的並發能力,比如傳統的數據庫的IO與性能的瓶頸,同樣它是關系型數據庫的一個補充,有著比較好的高效率與高性能。

專註於key-value查詢的redis、memcached、ttserver

解決以下問題:

1)對數據庫的高並發讀寫需求
2)大數據的高效存儲和訪問需求
3)高可擴展性和高可用性的需求
Nosql數據庫的應用環境

1)數據模型比較簡單
2)需要靈活性更強的IT系統
3)對數據庫的性能要求較高
4)不需要高度數據一致性
5)對於給定KEY,比較容易映射復雜值的環境
Nosql軟件的分類與特點

1)key-value鍵值存儲數據庫(redis、memcached)

1.用於內容緩存,適合負載並擴展大的數據集

2.數據類型是一系列的鍵值對

3.有快速查詢功能,但存儲數據少結構化

4.對事務的支持不好,數據庫故障產生時不可進行回滾
技術分享圖片
2)列存儲數據庫(HBase)

1.用於分布式的文件系統

2.以列簇式存儲,將同一列數據存在一起

3.查找速度快,可擴展強,更容易進行分布式擴展

4.功能相對局限
技術分享圖片
3)面向文件的數據庫(mongoDB)

1.用於WEB應用較多

2.數據類型是一系列鍵值對

3.查詢性能不高,沒有統一的查詢語法
技術分享圖片
4)圖形數據庫(Graph)

1.社交網絡應用較多

2.不容易做分布式的集群方案

常用的Nosql數據庫介紹

1)memcached

是一個開源高性能的,具有分布式內存對象的緩存系統

特點:

1、安裝布署簡單
2、支持高並發、高性能
3、通過程序或負載均衡可以實現分布式
4、僅為內存緩存,重啟服務數據丟失

2)memcacheDB

是新浪基於memcached開發的一個開源項目,具備了事務恢復功能

特點:

1、高並發讀寫
2、高效存儲
3、高可用數據存儲

生產環境如何選擇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)

不同命令延遲差別大

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<br/>|-- redis-benchmark #性能測試工具<br/>|-- redis-check-aof #檢測更新日誌<br/>|-- redis-check-dump #檢查本地數據庫rdb文件<br/>|-- redis-cli #命令行客戶端操作工具<br/>|-- redis-sentinel -&gt; redis-server<br/>-- 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

Redis集群生產環境高可用方案實戰過程

一篇文章詳解NOsql數據庫Redis