1 关系型数据库和非关系型数据库
1.1 关系型数据库
代表:MySQL、Oracle
特点:数据和数据之间、表和字段之间、表和表之间存在关系
优点:
- 数据间有关系,增删改查非常方便
- 事务操作,保证数据完整性
缺点:
- 关系由底层大量算法保证,拉低系统运行速度、消耗系统资源
- 海量数据增删改查/维护/扩展显得无能为力
1.1 非关系型数据库
- 键值(Key-Value)存储数据库:Redis
典型应用: 内容缓存,主要用于处理大量数据的高访问负载
数据模型: 一系列键值对
优势: 快速查询
劣势: 存储的数据缺少结构化 - 列存储数据库:HBase
典型应用:分布式的文件系统
数据模型:以列簇式存储,将同一列数据存在一起
优势:查找速度快,可扩展性强,更容易进行分布式扩展
劣势:功能相对局限 - 文档型数据库:MongoDB
典型应用:Web应用(与Key-Value类似,Value是结构化的)
数据模型: 一系列键值对
优势:数据结构要求不严格
劣势: 查询性能不高,而且缺乏统一的查询语法 - 图形(Graph)数据库:Neo4J
典型应用:社交网络
数据模型:图结构
优势:利用图结构相关算法。
劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案
1.2 什么是Redis
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,目前为止Redis支持的键值数据类型如下:
- 字符串类型 string
- 散列类型 hash
- 列表类型 list
- 集合类型 set
- 有序集合类型 sortedset
1.3 Redis的安装和启动
redis官网安装步骤如下:
执行make编译之后可通过 make PREFIX=/XXX/XXX/redis install
安装到指定目录
启动
- 前端启动(无法部署集群)
- 后端启动
将redis.conf文件复制到安装目录下
修改daemonize no
为daemonize yes
启动后端模式
按配置文件启动:./bin/redis-server ./redis.conf
客户端连接:./bin/redis-cli -h host -p prot
2 Redis的数据类型和常用命令
2.1 string
字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型存入和获取的数据相同。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。
常用命令:
set key value
如果该key存在则进行覆盖操作。返回”OK”get key
返回value;如果该key不存在,返回(nil)。del key
删除指定keygetset key value
先获取该值,再设置该值incr key
value加一,如果key不存在,初始值为0decr key
value减一,如果key不存在,初始值为0append key value
拼凑字符串mset key value [key value …]
设置多个值mget key [key ...]
获取多个值
使用环境: 保存json格式字符串
2.2 hash
hash类型可以看成具有String Key和String Value的map容器。所以该类型非常适合于存储值对象的信息
常用命令:
hset key field value
为指定的key设定field/value对(键值对)。hget key field
返回指定的key中的field的值hdel key field [field … ]
可以删除一个或多个字段,返回值是被删除的字段个数
2.3 list
List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除
常用命令:
lpush key values[value1 value2…]
在指定的key所关联的list的头部插入所有的values,如果该key不存在,创建一个与该key关联的空链表,之后再向该链表的头部插入数据。插入成功,返回元素的个数lpop key
返回并弹出指定的key关联的链表中的第一个元素,即头部元素。如果该key不存在,返回nil;若key存在,则返回链表的头部元素rpop key
从尾部弹出元素。
2.4 set
在Redis中,我们可以将set类型看作为没有排序的字符集合,set集合中不允许出现重复的元素
常用命令:
sadd key values[value1、value2…]
向set中添加数据,如果该key的值已有则不会重复添加smembers key
获取set中所有的成员srem key members[member1、member2…]
删除set中指定的成员
其他命令
keys pattern
获取所有与pattern匹配的key,返回所有与该key匹配的keys。*表示任意一个或多个字符,?表示任意一个字符del key1 key2…
删除指定的keyexists key
判断该key是否存在,1代表存在,0代表不存在type key
获取指定key的类型。该命令将以字符串的格式返回。 返回的字符串为string、list、set、hash、zset,如果key不存在返回noneflushdb
清空数据库
3 持久化
Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式
3.1 RDB持久化
RDB持久化(默认支持,无需配置)机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘
优点: 快照保存和还原数据极快,适用于灾难恢复
缺点:随时启动,占用系统资源,可能造成内存不足而宕机
适用于内存比较充裕的计算机
3.2 AOF持久化
将appendonly修改为yes,开启AOF持久化机制,默认会在目录下产生一个appendonly.aof文件
优点:持续性占用极少量的系统资源,更高的数据安全性
缺点:日志文件比较大,在运行效率上往往会慢于RDB