1. 什么是 NoSQL
NoSQL(Not Only SQL)是一类非关系型数据库管理系统,旨在处理大规模数据存储和高并发请求。与传统的关系型数据库(如 MySQL、PostgreSQL)不同,NoSQL 数据库不使用固定的表结构,而是使用灵活的数据模型,如键值对、文档、列族或图形等。NoSQL 数据库通常用于处理大数据、实时分析和分布式存储。
2. NoSQL 和 DBMS 的区别
-
数据模型:
- 关系型数据库(DBMS):使用表格形式存储数据,数据之间通过外键关联,通常遵循 ACID(原子性、一致性、隔离性、持久性)原则。
- NoSQL:支持多种数据模型(如键值、文档、列族、图形等),通常不强制使用固定的模式。
-
扩展性:
- 关系型数据库:通常是垂直扩展(增加单个服务器的性能)。
- NoSQL:通常是水平扩展(通过增加更多服务器来分担负载)。
-
查询语言:
- 关系型数据库:使用 SQL 进行查询。
- NoSQL:通常使用自定义的查询语言或 API。
3. 常用的 NoSQL 产品
-
MongoDB:文档型数据库,使用 BSON 格式存储数据。
-
Cassandra:列族型数据库,适合处理大数据和高可用性需求。
-
Redis:键值存储数据库,支持多种数据结构。
-
Couchbase:文档型数据库,提供强一致性和高性能。
-
Neo4j:图数据库,适合处理复杂的关系数据。
4. 什么是 Redis
Redis 是一个开源的高性能键值存储数据库,支持多种数据结构,如字符串、哈希、列表、集合和有序集合。它通常被用作缓存、消息代理和会话存储等场景。Redis 以其快速的读写性能和丰富的数据结构而闻名。
5. Redis 的优点
- 高性能:Redis 在内存中操作数据,读写速度极快。
- 丰富的数据结构:支持字符串、哈希、列表、集合等多种数据结构。
- 持久化:支持数据持久化,可以将内存中的数据保存到磁盘。
- 支持分布式:可以通过 Redis Cluster 实现数据的分布式存储和负载均衡。
- 简单易用:提供了简单易用的 API,方便开发者进行操作。
6. 安装 Redis
Redis 的安装步骤因操作系统而异。以下是基于 Linux 的基本安装步骤:
6.1 准备环境
1.安装redis需要的环境。yum install -y gcc-c++ 2.上官网下载redis源码安装包。 --- redis-5.0.8.tar.gz
6.2 安装
1.将安装包放入centos并解压
2. 进入解压后的目录
cd redis-7.2.3
3.编译安装
make install 配置了环境变量。
6.3启动redis服务器
redis-server redis.conf 安装redis.conf这个配置来启动redis服务.
6.4客户端连接redis服务器
redis-cli -h redis服务器的ip -p 端口号 -h: 如果不写默认127.0.0.1 -p: 如果不写默认6379
6.5 安装图形化客户端
最新native可以
最新idea可以
redisplus等
1.防火墙端口放行 2. 允许远程连接 3. 保护机制没有关闭
7. 使用 Redis
使用 Redis 主要通过命令行界面(CLI)或客户端库进行操作。以下是一些基本的 Redis 操作示例:
-
连接到 Redis:
redis-cli
-
设置键值对:
SET key "value"
-
获取键值:
GET key
-
删除键:
DEL key
-
使用数据结构:
-
列表:
LPUSH mylist "item1" RPUSH mylist "item2" LRANGE mylist 0 -1 # 获取所有元素
-
哈希:
HSET myhash field1 "value1" HGET myhash field1
-
集合:
SADD myset "member1" SMEMBERS myset
-
7.1 key操作的命令
keys *:查看所有的key del key ...: 删除指定的key expire key second: 为指定的key设置过期时间 exists key: 判断指定的key是否存在
7.2 数据库的命令
select n:选择库 flushdb: 清空当前库 flushall: 清空所有库。
7.3 redis支持的数据类型
redis支持的数据类型种类很多,其中使用最频繁的: String字符串,Hash,List队列,Set集合,ZSet有序集合等。
7.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递减
7.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中,指定的字段是否存在
7.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: 修改指定下标的值
1 set集合
无序 不可重复的集合。
1. sadd key element element ...:向集合添加一个或多个成员 2. smembers key: 返回集合中的所有成员. 3. srem key : 移除集合中一个或多个成员 4. sinter key key..: 返回给定所有集合的交集.
3.2 zset集合
有序 元素不允许重复的集合。 有序跟属性score有关。
1. zadd key score value score value score value: 向有序集合添加一个或多个成员,或者更新已存在成员的分数 2.zrange key start end: 通过索引区间返回有序集合成指定区间内的成员 3.zrevrange key start end: 返回有序集中指定区间内的成员,通过索引,分数从高到底
4. redis的使用场景
==热点数据的缓存。==
==限时任务的操作。比如短信验证码==
==完成session共享的问题。==
==完成分布式锁。==
商品的销售量。
5. redis的持久化方式
5.1 什么是持久化
把内存中的数据存储到磁盘的过程。同时也可以把磁盘中的数据加载到内存中。
5.2 redis实现持久化的方式
redis实现持久化的方式提供了两种:
第一种:RDB
第二种:AOF
5.2.1 什么是RDB
RDB[redis database]: 快照模式。每隔一段时间对内存中的数据进行快照存储。 默认启用该模式
5.2.2 什么时候会触发RDB模式
1.手动触发:save和bgsave手动触发rdb。 保存的名称dump.rdb
save该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。具体流程如下:
执行完成时候如果存在老的RDB文件,就把新的替代掉旧的。我们的客户端可能都是几万或者是几十万,这种方式显然不可取。
bgsave:
执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。具体流程如下:
bgsave在执行该命令时会fork出一个新的线程,单独执行rdb持久化操作,而不影响其他客户对redis服务的操作。---唯一的多线程。
2.自动触发: 通过配置文件搞定。
需要修改配置文件
#10秒改变5次 或50秒50次改变
save 10 5 50 50
5.2.3 什么是Aof
AOF[append only file]: 日志[每执行一个写操作]追加模式,默认redis没有开启该模式。需要手动开启。默认的文件名appendonly.aof
5.2.4 开启aof
把配置文件中的appendonly yes即可
当启动redis服务器,会把日志文件中的命令从上到下执行一下。
5.2.5 RBD和AOF的区别
RDB快照模式,数据备份和恢复速度快。缺点: 数据完整性差。数据可能丢失多。
AOF日志追加: 数据完整性高。 缺点: 数据备份和恢复速度慢。