Redis数据库

目录

一、关系型数据库与非关系型数据库

1.关系型数据库

1.1概述

1.2特点

1.3主要组成部分

1.4主流关系型数据库

1.5应用场景

2.非关系型数据库

2.1概述

2.2特点

2.3主要类型

2.4应用场景

3.关系型数据库和非关系型数据库区别

3.1数据存储方式

3.2扩展方式

3.3对事物性的支持

3.4查询语言

二、Redis数据库

1.什么是Redis

2.Redis特点

3.Redis速度快的原因

4.Redis应用场景

三、Redis安装部署

1.环境设置

2.下载依赖包及解压压缩包

3.执行脚本并配置相关配置文件

四、Redis命令工具

1.常用命令工具

1.1redis-cli命令行工具

1.2redis-benchmark测试工具

2.Redis数据库常用命令

2.1数据的存放和获取

2.2键值查询

3.Redis多数据库常用命令

3.1切换数据库

3.2在数据库之间移动

3.3清空当前数据库数据

3.4清空所有数据库的数据(慎用)


一、关系型数据库与非关系型数据库

1.关系型数据库

1.1概述

关系型数据库是基于关系模型(二维表格模型)构建的数据库系统,广泛用于存储和管理结构化数据。它将数据组织成表格(表),表中的代表记录,代表属性

1.2特点

  1. 结构化数据:

数据以表格形式存储,数据表之间可以通过主键和外键建立关系

  1. 标准查询语言:

使用SQL(结构化查询语言)进行数据的创建、查询、更新和删除操作

  1. ACID特性:

支持原子性、一致性、隔离性和持久性,确保数据操作的可靠性和稳定性

  1. 数据完整性:

通过约束(如主键、外键、唯一性约束等)保证数据的完整性和一致性

1.3主要组成部分

表(Table):数据的基本存储单位,由行和列组成
行(Row):表中的一条记录
列(Column):记录的属性
主键(Primary Key):唯一标识表中每条记录的字段
外键(Foreign Key):用于在不同表之间建立关系的字段

1.4主流关系型数据库

Oracle:功能强大,广泛用于大型企业和金融系统
MySQL:开源、易用,适用于中小型网站和应用
SQL Server:微软的数据库管理系统,集成度高,适合Windows环境
PostgreSQL:开源,支持复杂查询和事务,适用于高要求的应用
DB2:IBM的数据库,主要面向企业级解决方案

1.5应用场景

事务性应用: 需要高并发和事务支持的场景,如金融系统、电子商务
数据分析: 结构化数据分析和报表生成
**传统业务系统:**如ERP、CRM等系统,适合使用关系型数据库进行数据管理

2.非关系型数据库

2.1概述

非关系型数据库(NoSQL)是一类不同于传统关系型数据库的数据存储系统,旨在处理海量数据和高并发需求。NoSQL意为"不仅仅是SQL",强调其灵活性和多样性

2.2特点

  1. 灵活的数据模型:

不要求固定的表结构,数据可以是文档、键值对、列族或图形等形式

  1. 高可扩展性:

支持横向扩展,可以通过增加更多的服务器来分担负载,适应数据增长

  1. 高性能:

优化了读写性能,能够高效处理大规模数据和高并发访问

  1. 最终一致性:

有些非关系型数据库采用最终一致性模型,而非传统的ACID事务,适合需要高可用性的场景

2.3主要类型

  1. 键值存储:

数据以键值对形式存储,快速查找

例子:Redis、DynamoDB

  1. 文档存储:

数据以文档形式存储,通常使用JSON或BSON格式,灵活性高

例子:MongoDB、CouchDB

  1. 列族存储:

数据按列存储,适合大规模数据分析

例子:HBase、Cassandra

  1. 图数据库:

专为存储和查询图结构数据设计,适合社交网络、推荐系统等

例子:Neo4j、ArangoDB

2.4应用场景

大数据分析: 处理海量数据集,如日志分析和实时数据处理
社交网络: 存储用户信息、关系等复杂数据
内容管理: 灵活的数据结构支持多种内容类型,如图片、视频、文档
**实时应用:**对高并发访问有需求的应用,如在线游戏、即时消息

3.关系型数据库和非关系型数据库区别

3.1数据存储方式

关系型数据库:

①数据以表格形式存储,包含行和列

②数据表之间通过主键和外键建立关系,适合结构化数据管理
非关系型数据库:

①数据以文档、键值对、列族或图形等形式存储,灵活性高

②不要求固定的结构,适合多样化和非结构化数据

3.2扩展方式

关系型数据库:

①通常采用纵向扩展,通过提升单一服务器的硬件性能(如增加内存或CPU)来处理更高的负载

②存在性能瓶颈,扩展性有限

非关系型数据库:

①采用横向扩展,通过增加更多的普通服务器(节点)来分担负载,适合大规模数据处理

②天然支持分布式架构

3.3对事物性的支持

关系型数据库:

①支持强事务性,符合ACID特性(原子性、一致性、隔离性、持久性),适合需要高一致性和复杂查询的应用

②具备细粒度的事务控制和回滚能力

非关系型数据库:

①通常不具备完整的ACID支持,支持最终一致性,适合高并发和大数据量场景

②更关注扩展性和可用性,而非严格的事务控制

3.4查询语言

关系型数据库:

①使用SQL(结构化查询语言)进行数据操作,标准化程度高

非关系型数据库:

①使用各种不同的查询方式,通常不依赖于标准化的查询语言,具体实现取决于数据库类型(如MongoDB的查询语言、Redis的命令等)

二、Redis数据库

1.什么是Redis

Redis(Remote Dictionary Server)是一个开源的高性能NoSQL数据库,使用C语言编写。它基于内存运行,采用键值对(key-value)的存储形式,并支持持久化,将内存中的数据保存到磁盘

2.Redis特点

  1. 高读写速度:

Redis 的性能非常优越,能够支持每秒大量的读写请求
2. 丰富的数据类型:

支持多种数据结构,如字符串、列表、哈希、集合和有序集合,适应不同场景的需求
3. 数据持久化:

支持将内存数据保存到磁盘,确保重启后数据仍然可用
4. 原子性:

所有操作都是原子性的,保证数据一致性
5. 数据备份:

通过主从复制(master-slave)模式实现数据备份,提高可靠性

3.Redis速度快的原因

  1. 纯内存存储:

Redis 将数据存储在内存中,避免了磁盘 I/O 带来的延迟,确保极快的数据读写速度

  1. 单线程模型:

Redis 采用单线程处理命令,减少了锁竞争和线程创建销毁的开销,降低了上下文切换的成本。这使得操作的执行更加高效

  1. I/O 多路复用:

通过使用 I/O 多路复用技术,Redis 能够同时处理多个连接,从而提高了并发处理能力,充分利用 CPU 资源

4.Redis应用场景

1. 缓存:

作为内存数据库,Redis 常用于缓存热点数据,减少后端数据库的负载,加快数据访问速度

2. 会话存储:

可以用来存储用户会话信息,实现高效的用户状态管理

3. 实时分析:

支持高频数据写入和读取,适合实时数据分析和统计,如网站访问量、用户行为等

4. 消息队列:

通过列表和发布/订阅机制,Redis 可用于构建高效的消息队列系统,处理异步任务

5. 排行榜和计数器:

利用有序集合,Redis 可以轻松实现实时排行榜和计数器功能

6. 临时数据存储:

支持设置键的过期时间,适合存储临时数据,如验证码等

7. 分布式锁:

Redis 的原子性操作可用于实现分布式锁,帮助控制并发访问

三、Redis安装部署

1.环境设置

关闭防火墙以及增强功能
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

2.下载依赖包及解压压缩包

下载依赖包
yum install -y gcc gcc-c++ make

上传并解压压缩包
cd /opt
tar zxvf redis-5.0.7.tar.gz

编译安装
cd /opt/redis-5.0.7/
make
make PREFIX=/usr/local/redis install

3.执行脚本并配置相关配置文件

执行软件包提供的install_server.sh脚本文件
cd /opt/redis-5.0.7/utils
./install_server.sh
......         一直回车
直到出现:Please select the redis executable path []
然后在这句话后面手动输入
/usr/local/redis/bin/redis-server   
#注意要一次性正确输入
#没有一次性输入正确,那么要保证后面一定作软链接

Selected config:
Port           : 6379								#默认侦听端口为6379
Config file    : /etc/redis/6379.conf				#配置文件路径
Log file       : /var/log/redis_6379.log			#日志文件路径
Data dir       : /var/lib/redis/6379				#数据文件路径
Executable     : /usr/local/redis/bin/redis-server	#可执行文件路径
Cli Executable : /usr/local/bin/redis-cli			#客户端命令工具

把redis的可执行程序文件放入路径环境变量的目录中便于系统识别
ln -s /usr/local/redis/bin/* /usr/local/bin/

当 install_server.sh 脚本运行完毕,Redis 服务就已经启动,默认监听端口为 6379
netstat -natp | grep redis

Redis 服务控制
/etc/init.d/redis_6379 stop				#停止
/etc/init.d/redis_6379 start			#启动
/etc/init.d/redis_6379 restart			#重启
/etc/init.d/redis_6379 status			#状态

修改配置 /etc/redis/6379.conf 参数
vim /etc/redis/6379.conf
bind 127.0.0.1 172.16.58.10				    #70行,添加 监听的主机地址
port 6379									#93行,Redis默认的监听端口
daemonize yes								#137行,启用守护进程
pidfile /var/run/redis_6379.pid				#159行,指定 PID 文件
loglevel notice								#167行,日志级别
logfile /var/log/redis_6379.log				#172行,指定日志文件


重启服务
/etc/init.d/redis_6379 restart

四、Redis命令工具

1.常用命令工具

redis-server:用于启动 Redis 的工具
redis-benchmark:用于检测 Redis 在本机的运行效率
redis-check-aof:修复 AOF 持久化文件
redis-check-rdb:修复 RDB 持久化文件
redis-cli:Redis 命令行工具

1.1redis-cli命令行工具

基本语法
redis-cli -h host -p port -a password

|----|-----------------------|
| 选项 | 功能 |
| -h | 指定远程主机 |
| -p | 指定 Redis 服务的端口号 |
| -a | 指定密码(如果未设置密码,可以省略此选项) |

redis-cli -h 172.16.58.10 -p 6379 -a 123

1.2redis-benchmark测试工具

基本语法
redis-benchmark [选项] [选项值]

|---------|----------------------------------|
| 选项 | 功能 |
| -h | 指定服务器主机名 |
| -p(小写) | 指定服务器端口 |
| -s | 指定服务器 socket |
| -c | 指定并发连接数 |
| -n | 指定请求总数 |
| -d | 以字节形式指定 SET/GET 值的数据大小 |
| -k | 1=keep alive 0=reconnect |
| -r | SET/GET/INCR 使用随机 key,SADD 使用随机值 |
| -P(大写) | 通过管道传输指定数量的请求 |
| -q | 强制退出,仅显示每秒查询数量 |
| --csv | 以 CSV 格式输出结果 |
| -l | 生成循环,持续执行测试 |
| -t | 仅运行指定的测试命令 |
| -I(大写i) | Idle 模式,打开 N 个空闲连接并等待 |

发送并发连接和请求
redis-benchmark -h 172.16.58.10 -p 6379 -c 100 -n 100000

测试特定数据大小的性能
redis-benchmark -h 172.16.58.10 -p 6379 -q -d 100

测试本机上Redis服务的SET和LPUSH操作性能
redis-benchmark -t set,lpush -n 100000 -q

2.Redis数据库常用命令

2.1数据的存放和获取

set:存放数据,命令格式为 set key value
get:获取数据,命令格式为 get key

例:
127.0.0.1:6379> set student wm
OK
127.0.0.1:6379> get student
"wm"

2.2键值查询

设置键值
127.0.0.1:6379> set A1 1
OK
127.0.0.1:6379> set A2 2
OK
127.0.0.1:6379> set B3 3
OK
127.0.0.1:6379> set B1 4
OK
127.0.0.1:6379> set C5 5
OK
127.0.0.1:6379> set C20 5
OK

(1)KEYS *     #查看所有键
127.0.0.1:6379> KEYS *
1) "A1"
2) "A2"
3) "B3"
4) "B1"
5) "C5"
6) "C20"

(2)KEYS A*    # 以 A 开头的键
127.0.0.1:6379> KEYS A*
1) "A1"
2) "A5"

(3)KEYS A?    # 以 A 开头,后面有任意一位
127.0.0.1:6379> KEYS A?
1) "A1"
1) "A5"

(4)KEYS C??   # 以 C 开头,后面有任意两位
127.0.0.1:6379> KEYS C??
1) "C20"

(5)判断键是否存在
exists key
127.0.0.1:6379> exists student		#判断 student 键是否存在
(integer) 1							# 1 表示 student 键是存在
127.0.0.1:6379> exists room
(integer) 0							# 0 表示 room 键不存在

(6)删除指定键
del key
127.0.0.1:6379> keys *
127.0.0.1:6379> del A1
127.0.0.1:6379> get A1   #这时候会发现获取不到数据

(7)获取键值类型
type key
127.0.0.1:6379> type A2
string

(8)重命名键(覆盖)
rename old_key new_key
使用rename命令进行重命名时,无论目标key是否存在都进行重命名,且源key的值会覆盖目标key的值。在实际使用过程中,建议先用 exists 命令查看目标 key 是否存在,然后再决定是否执行 rename 命令,以避免覆盖重要数据
127.0.0.1:6379> keys B*
1) "B3"
2) "B1"
127.0.0.1:6379> rename B1 B2
OK
127.0.0.1:6379> keys B*
1) "B3"
2) "B2"
127.0.0.1:6379> get B3
"3"
127.0.0.1:6379> get B2
"4"
127.0.0.1:6379> rename B3 B33
OK
127.0.0.1:6379> get B3
(nil)
127.0.0.1:6379> get B2
"4"

(9)重命名键(不覆盖)
renamenx 命令的作用是对已有 key 进行重命名,并检测新名是否存在,如果目标 key 存在则不进行重命名
renamenx old_key new_key
127.0.0.1:6379> keys *
127.0.0.1:6379> get student
"wm"
127.0.0.1:6379> get B2
"4"
127.0.0.1:6379> renamenx B2 student
(integer) 0
127.0.0.1:6379> keys *
127.0.0.1:6379> get student
"wm"
127.0.0.1:6379> get B2
"4"

(10)查看当前数据库中键的数量
dbsize
127.0.0.1:6379> dbsize

(11)设置密码
config set requirepass yourpassword
127.0.0.1:6379> config set requirepass 123

(12)验证密码
auth yourpassword
127.0.0.1:6379> auth 123
127.0.0.1:6379> config get requirepass

3.Redis多数据库常用命令

3.1切换数据库

命令格式:select 序号
select db_number
使用 redis-cli 连接 Redis 数据库后,默认使用的是序号为 0 的数据库
127.0.0.1:6379> select 10			#切换至序号为 1 的数据库
127.0.0.1:6379[10]> select 15		#切换至序号为 5 的数据库
127.0.0.1:6379[15]> select 0	    #切换至序号为 0 的数据库

3.2在数据库之间移动

格式:move 键值 序号
move key db_number
127.0.0.1:6379> set fzx 100
OK
127.0.0.1:6379> get fzx
"100"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> move fzx 1
(integer) 1
127.0.0.1:6379[1]> get fzx
"100"

3.3清空当前数据库数据

FLUSHDB :清空当前数据库数据
127.0.0.1:6379> FLUSHDB
OK

3.4清空所有数据库的数据(慎用)

FLUSHALL :清空所有数据库的数据,慎用!
127.0.0.1:6379> FLUSHALL
OK
相关推荐
远歌已逝15 分钟前
维护在线重做日志(二)
数据库·oracle
只因在人海中多看了你一眼23 分钟前
分布式缓存 + 数据存储 + 消息队列知识体系
分布式·缓存
qq_433099401 小时前
Ubuntu20.04从零安装IsaacSim/IsaacLab
数据库
Dlwyz1 小时前
redis-击穿、穿透、雪崩
数据库·redis·缓存
工业甲酰苯胺3 小时前
Redis性能优化的18招
数据库·redis·性能优化
没书读了4 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
i道i5 小时前
MySQL win安装 和 pymysql使用示例
数据库·mysql
小怪兽ysl5 小时前
【PostgreSQL使用pg_filedump工具解析数据文件以恢复数据】
数据库·postgresql
wqq_9922502775 小时前
springboot基于微信小程序的食堂预约点餐系统
数据库·微信小程序·小程序
爱上口袋的天空5 小时前
09 - Clickhouse的SQL操作
数据库·sql·clickhouse