联系型数据库和非联系型数据库

联系型数据库

  • 联系型数据库是一个结构化的数据库,创立在联系模型(二维表格模型)基础上,一般面向于记载。
  • SQL 句子(规范数据查询言语)便是一种根据联系型数据库的言语,用于履行对联系型数据库中数据的检索和操作。
  • 干流的联系型数据库包括Oracle、MySQL、SQL Server、Microsoft Access、DB2、PostgreSQL等。
  • 以上数据库在运用的时候必须先建库建表设计表结构,然后存储数据的时候按表结构去存,假如数据与表结构不匹配就会存储失利。

非联系型数据库

  • NoSQL(NoSQL = Not Only SQL),意思是“不仅仅是 SQL”,对错联系型数据库的总称。
  • 除了干流的联系型数据库外的数据库,都认为对错联系型。
  • 不需求预先建库建表界说数据存储表结构,每条记载能够有不同的数据类型和字段个数(比如微信群聊里的文字、图片、视频、音乐等)。
  • 干流的NoSQL 数据库有Redis、MongBD、Hbase、Memcached、ElasticSearch、TSDB等。

联系型数据库和非联系型数据库区别

  • 数据存储方法不同
    • 联系型和非联系型数据库的主要差异是数据存储的方法。联系型数据天然便是表格局的,因此存储在数据表的行和列中。数据表能够互相相关协作存储,也很容易提取数据。
    • 与其相反,非联系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非联系型数据一般存储在数据集中,就像文档、键值对或许图结构。你的数据及其特性是挑选数据存储和提取方法的首要影响因素。
  • 扩展方法不同
    • SQL和NoSQL数据库最大的差别或许是在扩展方法上,要支撑日益增长的需求当然要扩展。
    • 要支撑更多并发量,SQL数据库是纵向扩展,也便是说进步处理才能,运用速度更快速的计算机,这样处理相同的数据集就更快了。由于数据存储在联系表中,操作的功用瓶颈或许涉及很多个表,这都需求经过进步计算机功用来克服。尽管SgL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。
    • 而NoSQL数据库是横向扩展的。由于非联系型数据存储天然便是分布式的,NoSQL数据库的扩展能够经过给资源池增加更多普通的数据库服务器(节点)来分担负载
  • 业务性的支撑不同
    • 假如数据操作需求高业务性或许复杂数据查询需求操控履行计划,那么传统的SQL数据库从功用和稳定性方面考虑是你的最佳挑选。SQL数据库支撑对业务原子性细粒度操控,而且易于回滚业务。(SQL业务操控的细粒度更高,更稳定,更易回滚业务)
    • 尽管NoSQL数据库也能够运用业务操作,但稳定性方面无法和联系型数据库比较,所以它们真正的价值是在操作的扩展性和大数据量处理方面。

非联系型数据库发生背景

可用于应对 Web2.0 纯动态网站类型的三高问题(高并发、高功用、高可用

  • High performance:对数据库高并发读写需求
  • Huge storage:对海量数据高效存储与拜访需求
  • High Scalability && High Availability:对数据库高可扩展性与高可用性需求

联系型数据库和非联系型数据库都有各自的特点与运用场景,两者的紧密结合将会给Web2.0的数据库发展带来新的思路。让联系型数据库重视在联系上和对数据的一致性确保,非联系型数据库重视在存储和高功率上。例如,在读写别离的MySQL数据库环境中,能够把常常拜访的数据存储在非联系型数据库中,进步拜访速度。

Redis简介

Redis (远程字典服务器)是一个 开源的、运用C言语编写的NoSQL 数据库。

Redis 根据内存运转并支撑耐久化,选用key-value (键值对)的存储方式,是现在分布式架构中不可或缺的一环。

Redis服务器程序是单进程模型,也便是在一台服务器上能够同时发动多个Redis进程,Redis的实践处理速度则是完全依靠于主进程的履行功率。

  • 若在服务器上只运转一个Redis进程,当多个客户端同时拜访时,服务器的处理才能是会有一定程度的下降;
  • 若在同一台服务器上敞开多个Redis进程,Redis在进步并发处理才能的同时会给服务器的CPU造成很大压力。

即:在实践生产环境中,需求根据实践的需求来决议敞开多少个Redis进程。若对高并发要求更高一些,或许会考虑在同一台服务器上敞开多个进程。若CPU资源比较严重,选用单进程即可。

Redis的优点

  • 具有极高的数据读写速度: 数据读取的速度最高可达到110000 次/s,数据写入速度最高可达到81000次/s。
  • 支撑的数据结构: key-value,支撑丰厚的数据类型:Strings、 Lists、Hashes、 Sets 及Sorted Sets 等数据类型操作。
    • Strings 字符串型
    • Lists 列表型
    • Hashes 散列
    • Sets 无序集合
    • Sorted Sets 有序集合
  • 支撑数据的耐久化: 能够将内存中的数据保存在磁盘中,重启的时候能够再次加载进行运用。
  • 原子性: Redis一切操作都是原子性的。(支撑业务,一切操作都作为业务)
  • 支撑数据备份: 即 master-salve 方式的数据备份。(支撑主从复制)

Redis存在的问题

  • 缓存和数据库双写一致性问题
  • 缓存雪崩问题
  • 缓存击穿问题
  • 缓存的并发竞赛问题

Redis的适用场景

  • Redis作为根据内存运转的数据库,是一个高功用的缓存,一般运用在session缓存、 行列、排行榜、计数器、最近最热文章、最近最热评论、发布订阅等。(给联系型数据做缓存,进步拜访的速度)
  • Redis适用于数据实时性要求高、数据存储有过期和筛选特征的、不需求耐久化或许只需求确保弱一致性、逻辑简略的场景。

哪些数据适合放入缓存中

一般会将部分数据放入缓存中,来进步拜访速度,然后数据库承当存储的工作。

  • 即时性。例如查询最新的物流状况信息。
  • 数据一致性要求不高。例如门店信息,修改后,数据库中现已改了,五分钟后缓存中才是最新的,但不影响功用运用。
  • 拜访量大且更新频率不高,例如网站主页的广告信息,拜访量大,但是不会常常变化。

Redis为什么快

  • Redis是一款纯内存结构,防止了磁盘 I/O 等耗时操作。(根据内存运转)
  • Redis指令处理的核心模块为单线程,削减了锁竞赛,以及频频创立线程和毁掉线程的代价,削减了线程上下文切换的耗费。(单线程处理)
  • 选用了 I/O 多路复用机制,大大进步了并发功率。(epoll方式)

:在 Redis 6.0中新增加的多线程也仅仅针对处理网络恳求进程选用了多线性,而数据的读写指令,仍然是单线程处理的。

Redis装置

  1. 装置所需依靠包

    NoSQL之Redis配置及优化

  2. 解压包,由于有makefile文件,可直接编译装置

    NoSQL之Redis配置及优化

  3. 直接用make进行编译,install时加个参数指定装置途径

    NoSQL之Redis配置及优化
    NoSQL之Redis配置及优化
    NoSQL之Redis配置及优化

  4. 进入redis的bin目录,其中的为履行指令

    NoSQL之Redis配置及优化

  5. 回到redis软件包中,进入utils目录,利用install_server.sh对redis做一些必要装备

    NoSQL之Redis配置及优化

  6. 履行install_server.sh文件

    NoSQL之Redis配置及优化

  7. 将redis/bin下的可履行文件悉数加入系统管理中

    NoSQL之Redis配置及优化
    NoSQL之Redis配置及优化

  8. 将redis履行文件加到系统管理

    NoSQL之Redis配置及优化

  9. 在第一次履行install_server.sh文件时,redis就现已发动成功。

    NoSQL之Redis配置及优化

  10. 但发动监听的时本地(127.0.0.1),所以要修改装备文件

    NoSQL之Redis配置及优化
    NoSQL之Redis配置及优化
    NoSQL之Redis配置及优化
    NoSQL之Redis配置及优化
    NoSQL之Redis配置及优化

  11. 装备完后重启redis

    NoSQL之Redis配置及优化
    NoSQL之Redis配置及优化

Redis指令东西

东西 效果
redis-server 用于发动redis的东西
redis-benchmark 用于检测redis在本机的运转功率
redis-check-aof 修正AOF耐久化文件
redis-check-rdb 修正RDB耐久化文件
redis-cli redis指令行东西

redis-cli指令行东西

语法:redis-cli -h host -p port -a password

  • -h:指定远程主机
  • -p:指定Redis 服务的端口号
  • -a:指定暗码,未设置数据库暗码能够省略-a选项
  • 若不增加任何选项表明,则运用127.0.0.1:6379衔接本机上的 Redis 数据库
    NoSQL之Redis配置及优化

redis-benchmark 测验东西

redis-benchmark是官方自带的Redis功用测验东西,能够有用的测验Redis服务的功用。
根本的测验语法redis-benchmark [选项] [选项值]

选项 效果
-h 指定服务器主机名
-p 指定服务器端口
-s 指定服务器 socket
-c 指定并发衔接数
-n 指定恳求数
-d 以字节的方式指定SET/GET值的数据大小
-k 1=keep alive 0=reconnect
-r SET/GET/INCR 运用随机key,SADD运用随机值
-P 经过管道传输<numreg>恳求
-q 强制退出redis,仅显现query/sec值
–csv 以CSV格局输出
-l 生成循环,永久履行测验
-t 仅运转以逗号分隔的测验指令列表
-I Idle方式,仅翻开N个idle衔接并等待

示例

  • 向IP地址为192.168.44.20、 端口为6379 的Redis 服务器发送100个并发衔接与100000 个恳求测验功用。redis-benchmark -h 192.168.44.20 -p 6379 -c 100 -n 100000

NoSQL之Redis配置及优化

  • 测验存取大小为100字节的数据包的功用。redis-benchmark -h 192.168.44.20 -p 6379 -q -d 100

NoSQL之Redis配置及优化

  • 测验本机上Redis 服务在进行 set 与 lpush 操作时的功用。redis-benchmark -t set,lpush -n 100000 -q

NoSQL之Redis配置及优化

Redis数据库常用指令

指令 效果
set 寄存数据
get 获取数据
keys * 检查一切的key
keys k? 检查k最初后边恣意一位的数据
exists 判别键是否存在(存在1,不存在0)
del 删去键
type 检查键对应的value值类型
rename key1 key2 改名,不管key2是否存在都会改名成功。假如存在,key1的值会掩盖key2得值
renamenx key1 key2 改名,若key2不存在,能够改名成功。若key2存在则不进行改名
dbsize 检查当时数据库中key的数目

set、get 设置和获取键的值

  • set:寄存数据,指令格局为 set key value
  • get:获取数据,指令格局为 get key

NoSQL之Redis配置及优化

lpush创立list

指令格局:lpush key value

NoSQL之Redis配置及优化

keys 获取键值列表

keys指令能够获取契合规矩的键值列表,一般状况能够结合 * 、? 等选项来运用。

NoSQL之Redis配置及优化

  • 检查当时数据库中一切键

    NoSQL之Redis配置及优化

  • 检查当时数据库中以v最初的键

    NoSQL之Redis配置及优化

  • 检查当时数据库中以v最初,后边包括恣意一位字符的键

    NoSQL之Redis配置及优化

  • 检查当时数据库中以v最初,后边包括恣意两位字符的键

    NoSQL之Redis配置及优化

exists 判别键是否存在

exists 指令能够判别键是否存在。
回来1,表明键存在。
回来0,表明键不存在。

NoSQL之Redis配置及优化

del 删去键

del 指令能够删去当时数据库的指定key。

NoSQL之Redis配置及优化

type 检查键存储的数据类型

type 指令能够获取 key 对应的 value 值类型。

NoSQL之Redis配置及优化

rename 重命名

rename 指令是对已有 key 进行重命名。(掩盖)

  • 运用rename指令进行重命名时,无论方针key是否存在都会进行重命名,且源key的值会掩盖方针key的值。
  • 在实践运用进程中,主张先用exists指令检查方针key 是否存在,然后再决议是否履行rename 指令,以防止掩盖重要数据。

NoSQL之Redis配置及优化

假如重命名后的键名是现已存在的键,那就会掩盖已有的键。

NoSQL之Redis配置及优化

renamenx 重命名

renamenx 指令的效果是对已有key进行重命名,并检测新名是否存在,假如方针key存在则不进行重命名。(不掩盖)

NoSQL之Redis配置及优化

dbsize检查键数目

dbsize 指令的效果是检查当时数据库中key的数目。

NoSQL之Redis配置及优化

设置过期时长和检查存活时间

setex,设置过期时长,指令格局:setex key 时间 value ttl,检查存活时间,指令格局:ttl key

NoSQL之Redis配置及优化

设置和清空暗码

设置和检查暗码

运用config set requirepass password指令设置暗码。(一旦设置暗码,必须先验证经过暗码,否则一切操作不可用)
运用config get requirepass指令检查暗码。

NoSQL之Redis配置及优化

设置暗码后,运用暗码登录能够直接操作,不需求二次验证

NoSQL之Redis配置及优化

清空暗码

运用config set requirepass ''清空暗码。

NoSQL之Redis配置及优化

Redis多数据库操作

Redis 支撑多数据库,Redis默认状况下包括16个数据库,数据库名称是用数字0-15来依次命名的。

运用redis-cli衔接Redis数据库后,默认运用的是序号为0的数据库。

多数据库相互独立,互不干扰。

多数据库间切换select

指令格局:select 序号(范围:0~15)

运用redis-cli衔接Redis数据库后,默认运用的是序号为0的数据库。

NoSQL之Redis配置及优化

多数据库间移动数据

指令格局:move 键值 序号

NoSQL之Redis配置及优化

铲除数据库内数据

  • FLUSHDB:清空当时数据库数据
  • FLUSHALL:清空一切数据库的数据,慎用!!!

总结

联系型数据库:

  • 实例–>数据库–>表(table)–>记载行(row)、数据字段(column)

非联系型数据库:

  • 实例–>数据库–>集合(collection) –>键值对(key-value)
  • 非联系型数据库不需求手动建数据库和集合(表)。

Redis

  • Redis根据内存运转并支撑耐久化
  • 选用key-value(键值对)的存储方式
  • 优点
    • 具有极高的数据读写速度
    • 支撑丰厚的数据类型
    • 支撑数据的耐久化
    • 原子性
    • 支撑数据备份

Redis 为什么快

  • 根据内存运转
  • 选用单线程处理数据的读写(削减锁竞赛和线程切换的耗费)
  • 选用IO多路复用机制(能够让单线程处理多个衔接恳求,削减网络IO的耗费)

设置、检查、删去的指令

类型 设置 检查 删去
string set get del
List lpush lrange del
Hash hset hget hdel
Set sadd smembers del
Sorted Set zadd zrank del