1. 什么是NoSQL
nosql[not only sql]不仅仅是sql。所有非关系型数据库的统称。除去关系型数据库之外的都是非关系数据库。
1.1为什么使用NoSQL
NoSQL数据库相较于传统关系型数据库具有灵活性、可扩展性和高性能等优势,适合处理非结构化和半结构化数据,支持分布式架构以实现高可用性和高吞吐量。同时,NoSQL的无模式特性使其能够迅速适应变化的数据结构,提升开发效率,特别适合大数据和快速迭代的应用场景。
NoSQL数据库的出现,弥补了关系数据(比如MySQL)在某些方面的不足,在某些方面能极大的节省开发成本和维护成本。MySQL和NoSQL都有各自的特点和使用的应用场景,两者的紧密结合将会给web2.0的数据库发展带来新的思路。让关系型数据库关注在关系上,NoSQL关注在存储上。
1.2 NOSQL和RDBMS的区别
RDBMS--关系型数据库得到通称
- 高度组织化结构化数据。
- 结构化查询语言(SQL) sql语句
- 数据和关系都存储在单独的表中。
- 数据操纵语言DML,数据定义语言DDL
- 严格的一致性. 事务
- 基于事务
NoSQL--非关系型数据库的统称
- 代表着不仅仅是SQL
- 没有声明性查询语言。 sql语句
- 键 - 值对存储。
- 非结构化和不可预知的数据 value: 字符串 对象 集合 无需集合
- 高性能,高可用性和可伸缩性。 适合搭建集群。 ---基于内存计算的
1.3 常用的NOSQL产品
1. redis [企业使用频率很高]
2. mongodb [抽空看看]
3. hbase [适合大数据]
2. redis的介绍
2.1 redis的概述
redis的官网:https://redis.io/
Redis是一种开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息代理。Redis提供数据结构,例如字符串,哈希,列表,集合,带范围查询的排序集合,位图,超日志,地理空间索引和流。Redis具有内置的复制[集群],Lua脚本,LRU驱逐,事务和不同级别的磁盘持久性[磁盘],并通过Redis Sentinel和Redis Cluster自动分区提供了高可用性【集群】。
redis是免费的软件,它可以用作数据库,缓存,消息代理。而且里面可以存储多种数据类型,并且提高了高可用机制。
2.2 redis的特点
2.1 redis的特点
1.Redis读取的速度是110000次/s,写的速度是81000次/s
2.原子 。Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。线程安全
3.支持多种数据结构:string(字符串);list(列表);hash(哈希),set(集合);zset(有序集合)
4.持久化--磁盘,主从复制(集群)
5.官方不支持window系统,但是又第三方版本。 linux系统。
2.3 linux中安装redis
redis软件语言是C语言。—必须安装C的环境。
第一步:准备环境
1.安装redis需要的环境。yum install -y gcc-c++ (yum命令不可用上节讲述)
2.上官网下载redis源码安装包。 ---redis-7.2.3.tar.gz
第二步:放入uer/app下并解压
tar -zxvf redis-7.2.3.tar.gz
第三步:进入解压后的目录
cd redis-7.2.3
第四步:编译安装
make install
自动配置了环境变量。
2.4 启动redis服务器
redis-server redis.conf
redis-server: redis启动的脚本命令
redis.conf: redis配置文件的名
==>安装redis.conf这个配置来启动redis服务
2.5 客户端连接redis服务器
redis-cli -h redis服务器的ip -p 端口号
-h: 如果不写默认127.0.0.1
-p: 默认6379
2.6 配置文件
2.7 安装图形化客户端
可以使用navicat(16.2之后的版本),idea(2022.3.3之后),redisplus等
使用前要修改上述配置
3. 使用redis
详情参考:https://www.redis.net.cn/order/
3.1 key操作的命令
keys *:查看所有的key
del key ...: 删除指定的key
expire key second: 为指定的key设置过期时间
exists key: 判断指定的key是否存在
3.2 数据库的命令
select n:选择库
flushdb: 清空当前库
flushall: 清空所有库。
3.3 redis支持的数据类型
redis支持的数据类型种类很多,其中使用最频繁的: String字符串,Hash,List队列,Set集合,ZSet有序集合等。
3.3.1 字符串类型。
表示里面的value的类型为字符串类型。默认可以存放512M大小的字符串内容。
常用:
1. set key value: 存放字符串类型的数据
2. get key: 获取指定key对应的value值。
3. setex key second value: 存放字符串类型的数据并设置过期时间。
4. setnx key value: 如果指定的key存在,则不设置。不存在则存入。
5. incr key: 为指定的key递增
6. decr key: 为指定的key递减
3.3.2 Hash类型
表示value值为Hash数据类型。 表示value又是key-value形式。
常用:
1. hset key field value: 存储哈希类型的数据
2. hget key field: 获取存在哈希表中指定字段的value值
3. hgetall key: 获取在哈希表中指定key的所有字段和值
4. hkeys key: 获取所有哈希表中的字段
5. hvals key: 获取哈希表中所有的值
6. hexists key field:查询哈希表key中,指定的字段是否存在
3.3.3 list类型
list表示列表类型,表示value的值为list类型。
常用:
1. lpush key value value ....: 将一个或多个值插入到列表的头部。
2. lrange key start end: 获取列表指定范围内的元素
3. linsert key before|after element value: 在列表元素前或后插入元素
4. lpop key: 移除并获取列表中的第一个元素
5. lset key index value: 修改指定下标的值
3.3.4 set集合
无序 不可重复的集合。
1. sadd key element element ...:向集合添加一个或多个成员
2. smembers key: 返回集合中的所有成员.
3. srem key : 移除集合中一个或多个成员
4. sinter key key..: 返回给定所有集合的交集.
3.3.5 zset集合
有序 元素不允许重复的集合。 有序跟属性score有关。
1. zadd key score value score value score value: 向有序集合添加一个或多个成员,或者更新已存在成员的分数
2.zrange key start end: 通过索引区间返回有序集合成指定区间内的成员
3.zrevrange key start end: 返回有序集中指定区间内的成员,通过索引,分数从高到底