关系型数据库和非关系型数据库的区别

关系型数据库

是一个结构化的数据库,记录方式是行(记录对象属性)和列(声明对象)

表与表之间是有关联的,使用sql语句来对指定的表、库进行增删改查

在创建表的时候,我们是设计好了表的结构。按照表结构来存储数据,数据与表结构不匹配,存储数据会失败

非关系型数据库(nosql not only sql)

不需要定义库,也不需要定义表结构,直接记录即可,而且每条记录都可以有不同的数据类型、字段(字段个数)

redis key:value 键值对形式存储。每个键之间没有直接关联,库与库之间互相独立

区别

1、数据存储方式不同

2、扩展方式不同。性能上的提升

关系型数据库靠的是提升本机性能

非关系型数据库可以横向扩展,加入节点服务器的方式提高性能

3、对事物支持性不同

MySQL:原子性、隔离性、一致性、持久性

非关系型数据库redis也支持事物,但是稳定性和处理能力都不如关系型数据库

非关系型数据库的主要场景

1、操作的扩展

2、海量数据处理

web2.0核心特点:交互

纯动态网站的三高问题

1、对数据库高并发读写的需求

2、对海量数据高效存储与访问的需求

3、对数据库的高可扩展性与高可用性的需求

常见的需求场景

1、数据库缓存

2、web页面缓存

3、CPU和硬盘之间缓存

关系型数据库

库 —- 表 —- 行、列 —- 存储数据

非关系型数据库

库 —- 集合 —- 键值对

(不需要手动的创建库和集合)

redis 开源的、使用C语言编写的nosql数据库

redis 基于内存运行,支持持久化(数据恢复)。采用的就是key-value(键值对)的存储形式。目前在分布式架构中非常重要的一环

redis服务器是单进程模式,即只有一个主进程工作。也就是说,在一台服务器上可以启动多个redis(端口号不能冲突)

redis的实际处理速度是完全依靠主进程的执行效率

服务器只部署了一个redis,多个客户端访问可能会导致redis处理能力下降

服务器部署多个redis进程,虽然能提高redis并发处理能力,但是会给服务器的CPU带来很大的压力

一般来说,一台服务器部署三个redis进程(根据情况来看。高并发要部署多个。一般情况单进程足矣)

redis特点

1、具有极高的读写速度,数据读取每秒110000次,写入数据每秒可以执行81000次

2、支持丰富的数据类型

3、支持持久化。平常的数据都是保存在内存中,持久化可以写入到磁盘中,既可以保存到本地,也可以实现备份。

4、原子性,所有的操作都是原子性

5、支持主从模式 master-slave模式

面试:redis为什么这么快?

答:①redis是纯内存结构,避免了磁盘I/O的耗时; ②核心模块是一个单进程,减少了线程切换和收回线程的时间; ③I/O的多路复用机制(每个执行线路都可以同时执行读和写,大大提高并发的效率);

*特殊说明:redis的读写仍然是单进程处理

redis服务控制命令

/etc/init.d/redis_6379 +stop start restart status

redis的命令工具

redis-server 直接启动redis(只能启动)

redis-benchmark 检测redis再本机运行的效果

redis-cli 命令行工具

redis-check-aof 检测aof持久性是否正常

redis-check-rdb 检测rdb持久性是否正常

redis-benchmark -h 指定服务器的主机名、IP地址

redis-benchmark -p 指定服务器的端口号

redis-benchmark -c 指定并发连接数

redis-benchmark -n 指定请求数

如何进入redis

redis-cli -h 192.168.233.10 -p 6379 远程登录还是需要指定目标服务器的IP地址

redis-cli仅限于本地

redis cli -h 192.168.233.10 -p 6379

-h 指定IP地址

-p 指定端口号

a 指定登录密码

redis的五大数据类型

1、string (字符串)也是redis最基本类型,最大能存储512MB的数据,可以存储任何数据(包括但不限于:数字、文字、图片等)

2、list数据类型

列表当中的元素还是string类型

3、hash类型

hash类型用于存储对象,采用hash格式进行操作。hash占用的磁盘空间少,而且一个hash存储4294967295个键值对

4、set数据类型(无序集合)

元素类型也是string。列表里的元素是唯一的,不可以重复。多个集合之间可以进行并集、交集、差集的运算

set当中的元系类型是唯一的,可以跟踪一些唯一性的数据。访问微博的用户名。只要把对应的名称写入redis,set集合可以自动保存,唯一性,方便下次访问

5、有序集合

有序集合元素类型也是string,元素也不能重复,唯一。每个元素都会关联一个double(小数点)的分数(score,表示权重),可以通过权重的大小进行排序。元素的权重可以相同

zset

在线积分的排行榜,可以实时更新用户的分数。zrange命令获取积分top10的用户。zrank命令通过username获取玩家的排行信息

redis其他数据类型

位图(BitMap)

存储位数据,可以进行位级别的操作。

常用命令:SETBIT、GETBIT、BITCOUNT。

HyperLogLog

用于基数估算的数据结构。

常用命令:PFADD、PFCOUNT。

地理位置(GeoSpatial)

存储地理位置信息。

常用命令:GEOADD、GEODIST、GEORADIUS

ZCOUNT myzset 1 3表示权重1<= scroe <=3

set和hset 创建普通类型和hash类型,一般情况下,如无特殊需求,普通的创建方式即可;对一个键进行多字段存储,节省内存,使用hash方式

DBSIZE查看当前库键的数量

redis的库(库都是创建好的,16个库)

按照数字排名:0-15 互相独立

redis特点

1、读写速度快

2、数据类型(①string;②list;③hash对一个键进行多字段操作要用hash节省内存空间;④无序集合set:元素不能重复,可以用来定义唯一值;⑤有序集合zset:元素不能重复,但是权重可以相同,用来排名 )