一、关系型数据库和非关系型数据库
关系型数据库(RDBMS):指采用了关系模型来组织数据的数据库,,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
①特点:
- 结构化数据:数据存储在二维表中,通常遵循ACID属性(原子性、一致性、隔离性、持久性)。
- 固定的数据类型:每个字段都有固定的数据类型。
- 事务支持:支持复杂的事务处理,确保数据的完整性和一致性。
- SQL查询:使用结构化查询语言(SQL)进行数据查询和管理。
- 数据完整性:通过主键、外键等约束保证数据的完整性和关联性。
- 数据维护:通常需要更多的时间和资源来维护数据完整性、安全性和性能。
②:关系型数据库的优点
- 容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解
- 使用方便:通用的 SQL 语言使得操作关系型数据库非常方便
- 易于维护:丰富的完整性 (实体完整性、参照完整性和用户定义的完整性) 大大减低了数据冗余和数据不一致的概率
③:关系型数据库的缺点
- 存储在磁盘当中IO能力受限:网站的用户并发性非常高,往往达到每秒上万次读写请求,对于传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
- 在表当中查询效率比较低:在一张包含海量数据的表中查询,效率是非常低的。
- 升级维护比较困难:当需要对数据库系统进行升级和扩展时,往往需要停机维护和数据迁移。
- 性能欠佳:在关系型数据库中,导致性能欠佳的最主要原因是多表的关联查询,以及复杂的数据分析类型的复杂 SQL 报表查询。为了保证数据库的 ACID 特性,必须尽量按照其要求的范式进行设计,关系型数据库中的表都是存储一个格式化的数据结构。
典型应用:银行系统、电子商务网站、ERP系统、CRM系统等需要高数据一致性和事务支持的应用。
非关系型数据库(NoSQL):非关系型数据库以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,不局限于固定的结构,可以减少一些时间和空间的开销。
①特点:
- 灵活的数据模型:数据模型灵活,可以是键值对、文档、列族或图形等。
- 高性能:通常具有更高的读写性能,适用于大数据和高并发场景。
- 查询速度快:使用特定的查询语言或API进行查询,通常比关系型数据库更快。
- 水平扩展:通过分布式架构实现水平扩展,易于处理大规模数据。
- 不一定支持事务:部分NoSQL数据库不支持事务或仅支持有限的事务功能。
②:非关系型数据库的优点
- Nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。
- 关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。Nosql基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
- 非关系型数据库一般强调的是数据最终一致性,不像关系型数据库一样强调数据的强一致性,从非关系型数据库中读到的有可能还是处于一个中间态的数据,Nosql不提供对事务的处理。
③:非关系型数据库的缺点
- 只适合存储一些较为简单的数据,对于需要进行较复杂查询的数据,关系型数据库显得更为合适。
- 不适合持久存储海量数据,因为一般是内存型数据库
典型应用:社交媒体、日志分析、实时数据分析、缓存系统等需要高性能和灵活数据模型的应用。
总结
选择关系型数据库还是非关系型数据库,取决于具体的应用需求。如果需要高数据一致性、复杂的事务处理、固定的数据结构,并且数据量不是特别大,关系型数据库可能是一个更好的选择。而如果需要处理大规模数据、高性能读写、灵活的数据模型,并且不太需要事务支持,那么非关系型数据库可能更合适。
二、redis基本认识和安装
redis 数据存储在内存,Redis属于非关系型数据库,是一个完全开源免费的一个高性能的key-value数据库。它是基于内存的数据库,读写数据的效率极高。
安装好redis后,win+X,打开管理员的PowerShell,启动redis D:\redis\redis-server.exe redis.windows.conf,出现如下界面代表启动成功
如果没有出现图形,可能是reids的端口号被占用,可以在cmd中输入netstat -ano命令,查看端口号6379的PID,然后再任务管理器中结束6379对应的PID进行,再次尝试启动redis
三、redis的基本使用
①Redis支持的数据类型(key值区分大小写)
基本数据类型
- String(字符串):Redis最基本的数据类型,一个键对应一个值,一个键值最大存储512MB
- Hash(哈希):hash是一个键值对的集合,是一个String类型的field和value的映射表,适合用于存储对象
- List(列表):是redis的简单的字符串列表,按插入顺序排序
- Set(集合):是String字符串类型的无序集合,也不可重复
- ZSet(sorted set 有序集合):是String类型的有序集合,也不可重复。有序集合中的每个元素都需要指定一个分数,根据分数对元素进行升序排序。
②String(字符串)的基本操作
String: key value json数据
set: set key value 设置value值
get: get key 根据key值获取value值
mset: mset k1 v1 k2 v2 批量设置value
mget: get k1 k2 批量根据key值获取value值
exists * 判断key值是否存在,不存在输出0
keys * 查找出所有的key值
keys *me 匹配所有以me结尾的key值
clear 清屏
flushall 清空所有的key值
EXPIRE key 10(seconds) 设置key的过期时间,为10s
TTL key 查看过期时间 -2 key值过期后key值就会被清除,再次get key会得到nil
setEX key seconds value 设置key的value值时设置过期时间
③Hash(哈希)的基本操作
hset key field value[field1 value1 field2 value2] 创建哈希(Hsah)名为key,属性为field,属性值为value
hget key field 获得哈希(Hsah)名为key,属性为field的属性值
hgetall key 获得哈希(Hsah)名为key的所有属性和属性值
hdel key field 删除哈希(Hsah)名为key的field属性
hexists key field 判断哈希(Hsah)名key是否右field属性 0不存在,1存在
hkeys key 获得哈希(Hsah)名key的所有属性
hlen key 获得哈希(Hsah)名key的属性个数
④List(列表)的基本操作
lpush key value 在列表key中左边插入value
lpush key value 在列表key中右边插入value
lrange key start stop 输出列表key中从start到stop的值
lpop key 从列表左边出元素
rpop key 从列表右边出元素
llen arr 获取列表的长度
ltrim key start stop 对列表key切分从start到stop
⑤Set(集合)的基本操作
sadd key member[member1,member2] 给set集合key添加元素member(set集合无序,且不重复)
scard key 获取集合key中元素的个数
smenbers key 获取集合key中的所有元素
sismember key member 判断集合key中是否含有member元素
srem key member 删除集合key中的member元素
del key 删除集合key
sdiff key1 key2 返回集合key1比集合key2多的元素
sinter key[key..] 返回集合之间的交集
sunion key[key...] 返回集合之间的并集
⑥ZSet(sorted set 有序集合)的基本操作
zadd key score member[score member...] 向sortedset有序集合key中添加排序值score和元素值member(按照排序值给集合从小到大排序,不重复)
zrange key start stop [withscores] 获取集合key从start到stop的元素,withscores表示一起返回排序值score
zscore key member 获取集合key的指定元素的分数
zrank key member 获取集合key指定元素的排名,从小到大,从0开始
zrevrenk key member 获取集合key指定元素的排名,从大到小,从0开始
zrem key member 删除集合key的指定元素