一文詳解NOsql數據庫Redis

一圖詳解DB的分支產品


Nosql數據庫介紹html

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

專一於key-value查詢的redis、memcached、ttserversql

解決如下問題:數據庫

1)對數據庫的高併發讀寫需求緩存

2)大數據的高效存儲和訪問需求bash

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

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

特色:

一、安裝佈署簡單

二、支持高併發、高性能

三、經過程序或負載均衡能夠實現分佈式

四、僅爲內存緩存,重啓服務數據丟失

官方網站:http://memcached.org

2)memcacheDB

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

特色:

一、高併發讀寫

二、高效存儲

三、高可用數據存儲

官方網站:http://memcachedb.org/benchmark.html

生產環境如何選擇Nosql數據庫

一、最常規的緩存應用,memcached最合適

二、持久化存儲方案memcacheDB

三、2000萬之內數據量的小數據用memcached

四、大數據量能夠用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 <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集羣相關的知識可參考前面的文章

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

相關文章
相關標籤/搜索