一文详解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集群生产环境高可用方案实战过程

相关文章
相关标签/搜索