关系型数据库和非关系型数据库的区别
关系型数据库
是一个结构化的数据库,记录方式是行(记录对象属性)和列(声明对象)
表与表之间是有关联的,使用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:元素不能重复,但是权重可以相同,用来排名 )