Redis数据库(一)

Redis数据库

  • NoSql介绍
    对于数据库的认识,从传统的做法来讲,最初只有关系型数据库,关系型数据库并不是数据库一直以来的持续发展。
    关系型数据库的操作核心语法:SQL,但是SQL语法要求太严格了,而且在进行SQL处理的时候一旦处理不当就会产生大量的笛卡儿积,所以很多人不认可SQL操作,而一部分人就主张使用命令来完成数据库的操作
    例如:微软在90年代有一个数据库 ForPro,这个数据库最初只能依靠自己的命令来进行处理,由于SQL的大力推广,后来ForPro数据库不得已支持了SQL语法。

关系型数据库的问题:
1.利用ACID(原子性,一致性、隔离性、持久性)保证数据完整性
事务控制:一条记录修改未提交或者未回滚,则其他用户不能更新,造成性能问题
2.行列的规范化存储(要求严格)
3.预定义结构(表结构定义)
4.存储数据量“小”
5.结构化查询

数据库中的事务控制是一个很好的机制,但其本身有一个最大的缺点:速度慢(处理速度太慢),单节点的数据库(一台主机)即使再厉害,你所在的服务器的硬件性能再好,你也无法承受几亿条数据

对于传统开发,没有高并发的访问,不需要考虑这些性能问题。但互联网行业,高并发量是经常存在的

NoSQL(NoSQL = Not Only SQL):即:不仅仅是SQL

NoSQL特点:
采用数据集存储
动态结构定义
存储精简
可扩展性强
适合云计算

NoSQL访问速度极快。只要前台处理得当,可以保证数据的准确性。

在实际的开发过程中,关系型数据库是不能够被取代的,因为它存储的数据都是结构化的数据,但是一些操作频率较高的数据。例如:在所有的点上平台上都会有一个购物车的功能,现在的技术要考虑PC端、移动端数据通用。

Redis数据库(一)_第1张图片

这样的操作更新数据库比较频繁,这样的解决方案太麻烦了,因为既然要操作的是数据库,数据库最好能有这样大并发数据放访问的功能,传统关系型数据库因为有了事务这样一个概念,才让整个执行变得异常缓慢。

Redis数据库(一)_第2张图片

解决了性能问题

传统关系型数据库依然要进行保留,依然要保留原始的结构化数据,而NoSQL要负责那些高并发的用户数据操作

NoSQL划分:

1.键值(Key-Value)存储数据库:采用Hash表结构存储(简单、易部署):最常用:Redis(把数据存到硬盘上)

Redis数据库(一)_第3张图片

MongoDB:文档型数据库
图像数据库(Neo4J、FlockDB)

在现在的开发之中,国内使用最多的NoSQL数据库:
Redis、Memcached、MongoDB(存储文档,类似于json结构的数据)

项目没有NoSQL数据库,就可以定性:属于传统项目,不需要考虑所谓的高并发处理机制,项目的使用人群比较小众。

  • Redis介绍

Redis数据库(一)_第4张图片

Redis:内存高速缓存数据库、远程数据服务、开源的、先进的key-value存储可用于构建高性能,可扩展的web应用程序的解决方案(C语言编写)
支持丰富的数据类型,如string、list、set、hash
官网地址:http://www.redis.io/

如果要想学习Redis,要学会查看官方文档Documents

使用Redis的时候尽量选择3.2以上的版本,因为新版本才存在有一个官方提供的集群支持(RedisCluster),低版本没有(三套集群架构 ,最简单RedisCluster,不同公司整合不同的架构)

Nginx如果做反向服务器(Tomcat)代理的时候,需要Redis进行内存的session处理。

Redis特点:

Redis数据库(一)_第5张图片

Redis整体的特点是速度快,支持的数据类型多,但并不在只有Redis具备这样的特点,Redis是属于缓存数据库的第二代产品,而第一代产品是memcached数据库。

Redis数据库(一)_第6张图片

Redis与memcache的区别:
Redis支持更多的数据类型,而且Redis数据库中的数据允许被持久化(保存到磁盘),具有稳定性,而memcached的数据在内存中,(只在内存操作,一旦断电,数据丢失),Redis支持主从备份。

  • Redis的安装
    首先Redis提供给用户的只是一个源代码的开发程序包(C程序的源文件)。,既然是C语言的文件,那么如果要想使用Redis,必须进行代码的编译处理。理论上编译环境可以在任意的操作系统中执行,考虑到实际的应用环境,更多的是在Linux下完成。

如果非要在windows中执行,可以去下载一个cygwin的UNIX模拟环境(在windows下可以使用linux命令)

一般不这样做。

1.将Redis开发包上传到LInux系统之中,但是我们需要注意,由于给出的开发包属于源代码,所以建议解压缩到”/usr/local/src“的目录之中(存放源代码的路径)

tar xzvf /src/ftp/redis-4.0.9.tar.gz -C /usr/local/src/

2.进入到redis源代码所在的安装目录:
cd /usr/local/src/redis-4.0.9/
ll
3.进行程序的编译处理,输入make;
sudo apt-get install make 或者apt install make (安装make指令)
发现还有错误
sudo apt-get install gcc (安装gcc)
make MALLOC=libc (发现是malloc的 库有问题)
make

4.编译完成之后要进行redis安装,输入make install
5.Redis属于内存缓存数据库,那么如果你现在是一台单独的Redis服务器,则应应该考虑将所有的可用内存都交给Redis来进行支配,理论上还需要执行以下代码:
echo “vm.overcommit_memory=1”>>/etc/sysctl.conf
本次的操作指的是进行一次内存的分配策略,在进行设置的时候,”vm.overcommit_memory”有如下3个取值
“0”:表示再进行处理的时候首先要检查是否有足够的内存供应,如果现在没有足够的内存供应,则无法分配,内存申请失败,如果有可用内存则直接进行申请开辟
“1”:表示将所有的内存都交给应用使用,而不关心当前的内存状态如何(做单独的Redis服务器)
“2”:表示允许分配超过所有物理内存和交换空间的内存总和

6.将以上配置写入内核内存参数之中:/sbin/sysctl -p
这里写图片描述
7.为了方便使用Redis数据库,那么建立一个Redis支持的命令工具目录:
mkdir -p /usr/local/redis/{bin,conf}

bin:可执行文件
conf:所有的配置文件(或者etc)

8.通过源代码目录拷贝出Redis所需要的程序运行文件:
拷贝redis的服务启动程序:cp /usr/local/src/redis-4.0.9/src/redis-server /usr/local/redis/bin

拷贝redis的命令行客户端
cp /usr/local/src/redis-4.0.9/src/redis-cli /usr/local/redis/bin/
性能测试工具:(考验redis的数据承受力)
cp /usr/local/src/redis-4.0.9/src/redis-benchmark /usr/local/redis/bin/

拷贝出一个配置文件:
cp /usr/local/src/redis-4.0.9redis.conf /usr/local/redis/conf/

这样就表示当前的redis数据库已经将所有的程序文件安装成功

  • *Redis数据库配置
    如果 要想配置Redis数据库,主要的配置文件就是“redis.conf”,所有的配置在此处完成

    1. Redis作为一个具备有持久化功能的缓存数据库,所以其一定会有一个用于数据存储的目录,那么一般在redis处理的时候有三类文件需要做保存
      :Redsi的运行时的Pid(进程编号)
      Redis的相关处理日志
      Redis的数据文件
      所以建立一个目录用于存放这些数据
      mkdir -p /usr/data/redis/{run,logs,dbcache}

    2. 修改redis.conf的配置文件(文件特长)
      vim /usr/local/redis/conf/redis.conf

1)配置redis的运行端口 (redis是服务 一定有端口)
默认端口 port 6379
2)配置Redis是否为后台运行 daemonize no (默认) 修改为yes
3)设置进程保存路径:pidfile /var/run/redis_6379.pid 修改为:pidfile /usr/data/redis/run/redis_6379.pid
前提:目录必须存在
4)设置日志保存路径:logfile “_” 修改位 logfile “/usr/data/redis/logs/redis.log” 注意有下划线

5)该Redis支持的数据个数 :databases 16
6)保存数据文件目录 :dir ./修改为dir /usr/data/redis/dbcache

  1. 启动Redis服务
    /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf

如果要启动Redis-Server就必须明确的指明要使用的redis.conf配置文件

  1. Redis启动会占用6379的端口,所以查看端口
    netstat -nptl

Redis数据库(一)_第7张图片

此时我们发现Redis运行的时候是在6379本机下才可以执行,无法对外提供服务(当前数据库只能在本机访问)

  1. 启动Redis客户端:
    方式一:直接连接本机6379端口的redis
    /usr/local/redis/bin/redis-cli
    方式二:连接远程的格式
    /usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379

Redis数据库(一)_第8张图片

表示连接成功
6. 设置一个数据:set mldn java ——–mldn为key java为value
7. 取得数据:get mldn

Redis数据库(一)_第9张图片

  1. 关闭Redsi服务:
    1)取得要关闭的Redis服务的进程,而后使用kill 直接杀死
    2)直接使用killall redis-server干掉所有的Redis服务
    查看进程
    ps -ef |grep redis
    这里写图片描述

执行killall redis-server表示关闭服务

一旦redis服务开启,不可能轻易关闭

查看运行日志:
cat /usr/data/redis/logs/redis.log
同时dbcache下已经有了文件dump.rdb

Redis数据库(一)_第10张图片

你可能感兴趣的:(开发,运维)