关系型数据库、非关系型数据库
关系型数据库优势:
- 可以使用SQL语句进行复杂查询。
- 事务支持:支持对安全性能要求高的业务。
NoSQL优点:
- 成本较低:NoSQL数据库部署简单,基本都是开源软件,和关系型数据库相比价格便宜。
- 查询快:NoSQL数据库是基于键值对的,表中的主键和值的对应不需要SQL层解析。将数据存储在缓存中,而关系型数据库是将数据存储在硬盘中,查询速度不及NoSQL。
- 数据存储格式丰富:NoSQL以key-value、文档、图片等形式存储数据,关系型数据库只能存储基本类型的数据。
- 容易扩展:因为基于键值对,数据之间没有耦合性,容易水平扩展,关系型数据库的多表机制导致扩展艰难。
NoSQL缺点:
- 维护有限:新技术对于发展时间较久的关系型数据库而言,维护缺乏工具和资料。
- 不提供SQL支持:产生用户学习和使用的成本。
- 不支持事务:不提供关系型数据库的事务处理。
- 使用场景:通常情况下使用关系型数据库进行数据存储,在适合使用NoSQL的时候使用NoSQL,例如备份关系型数据库的数据。
NoSQL
- 键值(Key-Value)存储数据库
(1)相关产品:Tokyo Cabient/Tyrant、Redis、Voldemort、Berkely DB
(2)应用场景:内容缓存、处理大量数据的高访问负载。
(3)数据模型:一系列键值对。
(4)优点:快速访问。
(5)缺点:存储数据缺少结构化。
- 列存储数据库
(1)相关产品:Cassandra、HBase、Riak
(2)应用场景:分布式文件系统。
(3)数据模型:以列簇式存储,将同一列数据存在一起。
(4)优点:查找速度快,可扩展性强,更容易进行分布式扩展。
(5)缺点:功能相对比较局限。
- 文档型数据库
(1)相关产品:CouchDB、MongoDB
(2)应用场景:Web应用(类似于Key-Value,Value结构化)
(3)数据模型:一系列键值对。
(4)优点:数据结构要求不严格。
(5)缺点:查询性能不高并且缺乏统一的查询语法。
- 图形(Graph)数据库
(1)相关产品:Neo4J、InfoGrid、Infinite Graph
(2)应用场景:社交网络
(3)数据模型:图结构
(4)优点:利用图结构的相关算法。
(5)缺点:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。
Redis
非关系型数据库(NoSQL)、C语言开发的开源高性能键值对(Key-Value)数据库。用于解决大规模数据集合多重数据种类带来的问题,尤其是大数据、高并发方面。
数据类型
字符串(Sting):最常用
哈希(hash):map
列表类型(list):linkedlist,支持重复元素
集合类型(set):不允许重复元素
有序集合类型(sortedset):不允许重复元素并且元素有序
应用场景
- 缓存:数据查询、短连接、新闻内容、商品内容等
- 聊天室的在线好友列表
- 任务队列:秒杀、抢购
- 应用排行榜
- 网站访问统计
- 数据过期处理:精确到毫秒
- 分布式集群架构中session分离
Redis命令操作
(一)字符串类型
- 存储
set key value
- 获取
get key
- 删除
del key
(二)哈希类型
- 存储
hset key field value
- 获取
//获取指定的field对应的值
hget key field
//获取所有的field和value
hgetall key
- 删除
hdel key field
(三)列表类型
- 添加:头部添加、尾部添加
lpush key value
rpush key value
- 获取
//范围获取
lrabge key start end
- 删除:删除最左边的元素或者最右边的元素,返回删除元素
lpop key
rpop key
(四)集合类型
- 存储
sadd key value
- 获取:获取集合中所有元素
//获取集合中所有元素
smembers key
- 删除:删除集合中的某个元素
srem key value
(五)有序集合类型
每个元素都关联一个double类型的分数,redis通过分数来为集合中的成员进行从小到大的排序。
- 存储
zadd key score value
- 获取:范围获取
zrange key start end [widthscores]
- 删除
zrem key value
(六)通用命令
- 查询所有的键
keys *
- 获取:键对应的value的类型
type tey
- 删除:删除指定的key、value
del key value