標籤:

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)

  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、僅為內存緩存,重啟服務數據丟失

官方網站: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持久服務的特點

  1. key-value鍵值類型存儲系統

  2. 支持數據可靠存儲

  3. 單進程單線程高性能伺服器

  4. 恢複比較慢

  5. 單機qps(秒並發)可以達到10W

  6. 適合小數據高速讀寫訪問

redis存儲系統優、缺點:

  1. 可以持久化存儲數據

  2. 支持每秒10W的讀寫頻率

  3. 支持豐富的數據類型

  4. 所有操作都是原子性的

  5. 支持異機主從複製

  6. 內存管理開銷大(低於物理內存的3/5)

  7. 不同命令延遲差別大

官方網站: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

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 4uIPv6 24271 0t0 TCP *:6379 (LISTEN)

redis-ser 6072 root 5uIPv4 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集群相關的知識可參考前面的文章

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


推薦閱讀:

資料庫事務隔離級別測試
學習SQL【4】-聚合與排序
學習SQL【3】-查詢基礎
關係型資料庫的原理

TAG:資料庫 | 服務 |