SQL: 关系型数据库,表与表之间建立关联关系。
NoSQL: 非关系型数据库,数据与数据之间没有关联关系。
解析SQL语句:"select * from users;"
1.解析字符串“select * from users”
2.将字符串转换为对象
3.经过大量的算法执行查询操作
4.展示结果
NoSQL数据库适用场景
-
数据模型比较简单
-
需要灵活性更强的IT系统
-
对数据库性能要求更高
-
对于给定KEY,比较容易映射复杂值得环境
Redis简介
-
开源免费,遵守BSD协议,高性能(NoSQL)的key-value数据库
-
使用C语言编写实现、支持网络、基于内存且可持久化的日志型、Key-Value数据库。
Redis与其他key-value缓存产品有以下3个特点:
-
持久化:将内存中的数据保存在磁盘中,重启时再次加载使用,不至于丢失数据。
-
结构化:支持list,set,zset,hash等数据结构
-
备份:支持数据的备份,集群等高可用功能。
Redis特点
-
性能极高:读 11000次/s,写81000次/s
-
数据类型丰富:String, List, Hash, Set, Ordered Set等
-
原子:Redis所有操作都是原子的,即要么成功执行要么完全不执行。单个操作是原子性的,多个操作也支持事务,即原子性。通过MULTI和EXEC指令包起来。
-
特性丰富:支持publish、subscribe,通知,key过期等。
Redis缺点
-
持久化:Redis直接将数据存储到内存中,将数据保存至磁盘上,使用2种方式实现持久化过程。 定时快照(snapshot):每隔一段时间将整个数据库写到磁盘上,每次均是写全部数据,代价高。 基于语句追加aof:只追踪变化的数据,但是追加的log可能过大,同时所有的操作均重新执行一遍,回复速度慢。
-
耗内存,占用内存过高。
Redis应用场景
企业开发中:可以用作数据库、缓存(热点数据(经常会被查询,但是不经常被修改或者删除的数据))和消息中间件等大部分功能。
-
限时优惠活动信息
-
网站数据缓存(对于一些需要定时更新的数据,例如:积分排行榜)
-
手机验证码
-
限制网站访客访问频率(例如:一分钟最多访问10次)
Redis命名建议
-
key无需太长,尽量不超过1024字节,消耗内存且降低查找效率
-
key不能太短,降低可读性
-
统一命名模式:例如:user:123:password
Redis总结
-
单个key存入512M大小
-
支持多种数据结构
-
单线程,原子性
-
支持持久化,使用了AOF和ROB机制
-
支持集群,支持库(0-15)16个库
-
做消息队列,例如聊天室