添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

首先看个案例
无论是电商网站还是支付系统,都离不开数据的存储和增删改查,在这种情况下,每一次登录、访问等都会访问,这样会给数据库造成很大的压力,当数据库无法支撑过高的访问量,轻则影响用户体验,重则导致数据库宕机,网站无法访问。
如何解决数据库压力过大的问题呢?

  • 优化应用程序,减少数据库的连接数,尽量使用数据库连接池。
  • 使用消息队列,常见的有RabbitMQ,ActiveMQ,Kafka,RocketMQ等。
  • 通过使用redis等缓存数据,分担数据库读压力,同时直接从内存读数据速度更快。
  • 下面主要针对redis等nosql数据库进行介绍。

    nosql介绍

    特征

    对于NoSQL并没有一个明确的范围和定义,但是他们都普遍存在下面一些共同特征:

  • 不需要预定义模式:不需要事先定义数据模式,预定义表结构。数据中的每条记录都可能有不同的属性和格式。当插入数据时,并不需要预先定义它们的模式。
  • 无共享架构:相对于将所有数据存储的存储区域网络中的全共享架构。NoSQL往往将数据划分后存储在各个本地服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。
  • 弹性可扩展:可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移。
  • 分区:相对于将数据存放于同一个节点,NoSQL数据库需要将数据进行分区,将记录分散在多个节点上面。并且通常分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题。
  • 异步复制:和RAID存储系统不同的是,NoSQL中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会被网络传输引起迟延。缺点是并不总是能保证一致性,这样的方式在出现故障的时候,可能会丢失少量的数据。
  • BASE:相对于事务严格的ACID特性,NoSQL数据库保证的是BASE特性。BASE是最终一致性和软事务。
    NoSQL数据库并没有一个统一的架构,两种NoSQL数据库之间的不同,甚至远远超过两种关系型数据库的不同。可以说,NoSQL各有所长,成功的NoSQL必然特别适用于某些场合或者某些应用,在这些场合中会远远胜过关系型数据库和其他的NoSQL

    常用的nosql数据库

    临时性键值存储|永久性键值存储|面向文档的数据库|面向列的数据库
    -|:-:|:-:|:-:|
    Memcached|Tokyo Tyrant|MangoDB|Cassandra
    Redis|Flare|CouchDB|HBase
    |ROMA||HyperTable
    |Redis||

    redis安装和配置

    安装

    redis主要用于linux下,下面centos7下面安装最新版本redis-4.0.9。
    1
    2
    3
    4
    5
    wget http://download.redis.io/releases/redis-4.0.9.tar.gz
    tar xzf redis-4.0.9.tar.gz
    cd redis-4.0.9/
    make
    cd src && make all

    配置

    redis可以单机多实例,通过修改配置文件,不同实例使用不同的配置文件和端口号即可。
    下面配置文件统一存放在 conf 目录中。

    1
    2
    3
    4
    5
    cd /usr/local/src/   
    mv redis-4.0.9 redis #目录重命名,取消版本信息
    cd redis
    mkdir conf #新建配置文件目录,统一存放配置文件
    cp redis.conf conf/redis_6379.conf #配置文件,以端口号命名

    修改 redis_6379.conf 文件,默认该配置项为no,修改为yes。
    该参数表示是否使用守护线程的方式启动。
    当设置为 yes 时,表示开启守护进程模式。该模式下,redis在后台运行,并将进程pid写入至配置文件中设置的pidfile中,此时redis将一直运行,除非手动kill该进程。
    当设置为 no 时,当前界面将进入redis的命令行界面,ctrl+c强制退出或者关闭连接工具都会导致redis进程退出。

    1
    daemonize yes

    启动

    1
    redis-server /usr/local/src/redis/conf/redis_6379.conf

    确认是否启动
    通过进程确认

    1
    2
    3
    [root@VM_0_4_centos conf]# ps aux|grep redis
    root 25841 0.0 0.1 141772 1976 ? Ssl 23:26 0:00 redis-server 127.0.0.1:6379
    root 25856 0.0 0.0 112644 964 pts/1 R+ 23:26 0:00 grep --color=auto redis

    通过端口号确认

    1
    2
    [root@VM_0_4_centos conf]# netstat -lntp |grep 6379
    tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 25841/redis-server

    错误信息说明

  •