文章目录
- 一,关系型数据库和非关系型数据可区别
- 1.关系型数据库
- 2.非关系型数据库
- 3.区别
- 3.1存储方式
- 3.2扩展方式
- 3.2事务性的支持
- 二,非关系型数据为什么产生
- 三,Redis
- 1.Redis是什么
- 2.Redis优点
- 3.Redis适用范围
- 4. Redis 快的原因
- 4.1 基于内存运行
- 4.2 单线程模型
- 4.3 I/O 多路复用机制
- 四,Redis安装操作
- 1.安装步骤(单线程单机安装)
- 1.1关闭防火墙和增强功能
- 1.2下载编译包
- 1.3解压
- 1.4make
- 1.5Redis 服务配置文件
- 1.6/etc/redis/6379.conf配置
- 2.Redis命令操作
- 2.1Redis 服务控制
- 2.2Redis命令工具
- 2.3 连接 Redis 数据库的命令行工具
- 2.4redis-benchmark 测试工具
- 2.5 Redis常用命令
- (1)set,get
- (2)keys
- (3)exists
- (4)del
- (5)type
- (6)rename
- (7)renamex
- (8)dbsize
- (9)查看及设置密码
- (10)多数据库间切换
- (11)多数据库间移动数据
- (12)清除数据库内数据
- (13)卸载Redis
一,关系型数据库和非关系型数据可区别
1.关系型数据库
是一个结构化的数据库,创建在关系模型(二维表)基础上,一般面向于记录。标准数据查询语言(SQL语句)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。数据库使用时要先建立数据库,表结构,存储的数据,数据和表结构不一样就存不起来。
常见的数据库有:
Oracle、MySQL、SQL Server、Microsoft Access、DB2
2.非关系型数据库
不是使用数标准数据查询语言(SQL语句)的数据库都是非关系型。不用先建立库表和表结构可以存不同类型的数据,比如文字、图片、视频、音乐等,字段也可以数量不同
常见的数据库有:
Redis、MongDB(大数据用)、Hbase(大数据用)、CouhDB(云上的)
3.区别
3.1存储方式
- 关系型数据库是表格形式的,数据存储在数据表的行和列中。数据表彼此关联协作存储,容易提取数据。
- 非关系型数库据不适合使用传统的表结构(行和列),因为这些数据往往是不规则的、半结构化或非结构化的。它们的存储方式可以灵活处理复杂的数据模式,而不是强制要求数据按照固定的格式存储。数据及其特性是选择数据的存储和提取的方式 。
3.2扩展方式
- 关系型数据库是纵向扩展,提高处理能力,使用速度更快速的电脑处理相同的数据集就更快。因为数据存储在关系表中, 克服这些瓶颈需要采取各种优化手段。关系型数据库有很大扩展空间,但肯定会达到纵向扩展的上限点,这需要通过高性能电脑来处理。
- 非关系数据库是横向扩展的。因为非关系型数据存储是分布式的,非关系型数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。
3.2事务性的支持
- 如果数据操作需要非常精确的控制,比如确保一系列操作要么全部成功、要么全部失败(称为事务处理,原子性),或者需要对复杂的数据查询进行优化控制,传统的 关系型(SQL )数据库是性能和稳定性方面的最佳选择。关系(SQL) 数据库在处理事务时,可以精细地控制每个操作,并且如果出现问题,可以轻松回滚到之前的状态,确保数据的完整性和安全性。
- 非关系型数据库也能支持事务操作,但非关系型数据库在稳定性方面比不上 关系型(SQL) 数据库,非关系型(NoSQL) 数据库的优点体现在扩展性和处理大规模数据上,在快速处理大量数据、支持高并发访问时表现得非常出色。
二,非关系型数据为什么产生
Web2.0 纯动态网站类型遇到的三个问题是非关系型数据库产生的原因
三个问题是:
High performance——对数据库高并发读写需求
Huge Storage——对海量数据高效存储与访问需求
High Scalability && High Availability——对数据库高可扩展性与高可用性需求
关系型数据库(如 MySQL) 更适合处理涉及表格数据、复杂查询和事务的操作。非关系型数据库(如 Redis) 更适合处理需要高效存储和快速读取的数据,特别是频繁访问的数据。将两个结合起来形成读写分离,将经常被访问的热点数据存储在非关系型数据库中(如 Redis),而关系型数据库则负责长期存储和复杂查询。这样可以提高系统的整体性能。当用户访问网页时,系统首先会去 Redis(缓存) 中查找数据,因为 Redis 存在内存中,读取速度非常快。如果数据不在 Redis 中,才会去 MySQL(关系型数据库) 中读取,并将数据保存到 Redis 中,以便下次快速访问。
三,Redis
1.Redis是什么
Redis 是一个开源的、使用 C 语言编写的 NoSQL 数据库,广泛应用于高性能的分布式系统中。它主要基于内存运行,支持持久化存储,并采用键值对(Key-Value)的存储形式。在分布式架构中,Redis 是不可缺少的重要组成部分,常用于缓存、消息队列和会话管理。
Redis 采用单进程模型,在同一台服务器上仅使用一个主进程来处理所有的客户端请求,因此处理速度依赖于主进程的执行效率。当多个客户端同时访问时,单进程 Redis 的并发处理能力会受到一定限制。如果对高并发有更高要求,可以在同一台服务器上开启多个 Redis 进程,提升处理能力。开启多个 Redis 进程会增加服务器的 CPU 负载,需要根据实际需求来平衡性能与资源消耗。
Redis 在分布式系统中,能够通过主从复制、集群模式等方式,提升数据处理能力和系统的可扩展性。在高并发和海量数据处理场景下,Redis 是非常重要的基础组件之一。
2.Redis优点
- 具有极高的数据读写速度(数据读取速度高达十一万次/秒,数据写入速度高达八万一千次/秒。)
- 支持丰富的数据类型(支持key-value、Strings、Lists、Hashes、Sets Sorted Sets 等数据类型操作)
- 支持数据的持久化(把内存中的数据保存在磁盘中,重启的时候可以再一次加载使用。)
- 原子性(一系列操作要么执行成功要么失败)
- 支持数据备份
3.Redis适用范围
Redis 是一个基于内存运行的数据库,具有极高的读写速度,因此缓存是 Redis 最常见的应用场景之一。 Redis 的发布/订阅(Publish/Subscribe,简称 Pub/Sub)是一种消息通信模式,它允许消息发送者(发布者)将消息发送到多个接收者(订阅者),从而实现一对多的消息传递机制。Redis 通过这种方式,可以让不同的应用或服务之间进行高效的实时消息传递。 Redis还适用于获取最新N个数据的操作 ,** 排行榜类应用**,计数器应用、存储关系、实时分析系统、日志记录 。
4. Redis 快的原因
4.1 基于内存运行
Redis 是一个内存数据库,所有数据都存储在内存中,而不是硬盘上。内存的读取速度比硬盘要快得多,这使得 Redis 的数据访问几乎是瞬时的。
4.2 单线程模型
Redis 采用单线程模型,这意味着它不用去处理多线程之间的复杂性,比如竞争条件或锁问题。单线程使得每个操作都能够直接、快速执行,没有阻塞或冲突的可能。(在 Redis 6.0 中新增加的多线程也只是针对处理网络请求过程采用了多线性,而数据的读写命令,仍然是单线程处理的。)
4.3 I/O 多路复用机制
Redis 使用了 I/O 多路复用技术,通过 select
、poll
或 epoll
等系统调用,让 Redis 能够同时处理多个客户端请求,大幅提升了并发性能。这使得 Redis 在高并发场景下能够保持快速响应。
四,Redis安装操作
Redis 中文网站https://www.tkcnn.com/redis/Getting-started.html
官网https://redis.io/docs/latest/get-started/
Redis下载网址http://download.redis.io/releases/
1.安装步骤(单线程单机安装)
1.1关闭防火墙和增强功能
systemctl stop firewalld
setenforce 0
1.2下载编译包
yum install -y gcc gcc-c++ make
1.3解压
tar zxvf redis-5.0.7.tar.gz -C /opt
1.4make
Redis源码包中直接提供了 Makefile 文件,所以在解压完软件包后,不用执行 ./configure 命令进行配置,可以直接执行 make 与 make install 命令进行安装。
cd /opt/redis-5.0.7/
make -j 4 && make PREFIX=/usr/local/redis install
虚拟机给的核数多加上-j 4可以快点
1.5Redis 服务配置文件
使用软件包提供的 install_server.sh 脚本文件设置 Redis 服务所需要的相关配置文件
cd /opt/redis-5.0.7/utils/
./install_server.sh
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 #客户端命令工具
1.6/etc/redis/6379.conf配置
vim /etc/redis/6379.conf
bind 127.0.0.1 192.168.88.60 #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行,指定日志文件
用netstat -antulp|grep redis 可以查看 与 Redis 相关的网络连接信息 ,确定是否安装完成
2.Redis命令操作
2.1Redis 服务控制
/etc/init.d/redis_6379 stop #停止
/etc/init.d/redis_6379 start #启动
/etc/init.d/redis_6379 restart #重启
/etc/init.d/redis_6379 status #状态
2.2Redis命令工具
edis-server:用于启动 Redis 的工具
redis-benchmark:用于检测 Redis 在本机的运行效率
redis-check-aof:修复 AOF 持久化文件
redis-check-rdb:修复 RDB 持久化文件
redis-cli:Redis 命令行工具
2.3 连接 Redis 数据库的命令行工具
redis-cli -h host -p port -a password
选项
-h :指定远程主机
-p :指定 Redis 服务的端口号
-a :指定密码,未设置数据库密码可以省略-a 选项
例
redis-cli -h 192.168.xxx.xxx -p 6379
若不添加任何选项表示,则使用 127.0.0.1:6379 连接本机上的 Redis 数据库
2.4redis-benchmark 测试工具
redis-benchmark 是官方自带的 Redis 性能测试工具,可以有效的测试 Redis 服务的性能。
格式
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 :强制退出 redis。仅显示 query/sec 值。
–csv :以 CSV 格式输出。
-l :生成循环,永久执行测试。
-t :仅运行以逗号分隔的测试命令列表。
-I :Idle 模式。仅打开 N 个 idle 连接并等待。
例
(1)向ip地址为192.168.端口6379的Redis服务器发一千个并发连接请求和十万个测试性能请求
redis-benchmark -h 192.168.88.60 -p 6379 -c 1000 -n 100000
(2)测试存取一千个字节的数据包
redis-benchmark -h 192.168.88.60 -p 6379 -q -d 1000
(3)测试本机的Redis服务set和lpush的性能
redis-benchmark -t set,lpush -n 100000 -q
2.5 Redis常用命令
(1)set,get
set:存放数据,命令格式为 set key value
get:获取数据,命令格式为 get key格式
set kk xixi
get kk
(2)keys
取符合规则的键值列表,通常情况可以结合*、?等选项来使用
127.0.0.1:6379> KEYS * #查看当前数据库中所有键
127.0.0.1:6379> KEYS v* #查看当前数据库中以 v 开头的数据
127.0.0.1:6379> KEYS v? #查看当前数据库中以 v 开头后面包含任意一位的数据
127.0.0.1:6379> KEYS v?? #查看当前数据库中以 v 开头 v 开头后面包含任意两位的数据
(3)exists
判断键值是否存在
exists y44
存在提示1,不存在提示0
(4)del
删除需要删除的key
del y44
(5)type
查看key对应的value值的类型
type x1
(6)rename
对key重命名
使用rename命令进行重命名时,无论目标key是否存在都进行重命名,且源key的值会覆盖目标key的值。
格式
rename 源key 目标key
rename x1 x2
(7)renamex
对已有的key 进行重命名,并检测新名是否存在,如果目标 key 存在则不进行重命名。(不覆盖)
renamenx y3 y33
(8)dbsize
查看当前数据库中 key 的数量
(9)查看及设置密码
1.使用config set requirepass yourpassword命令设置密码
config set requirepass 123456
auth 123456
2.使用config get requirepass命令查看密码(一旦设置密码,必须先验证通过密码,否则所有操作不可用)
config get requirepass
如果密码忘了只能删除 rm -rf /var/run/redis-6379.pid然后重启redis
(10)多数据库间切换
Redis 支持多数据库,Redis 默认情况下包含 16 个数据库,数据库名称是用数字 0-15 来依次命名的。
多数据库相互独立,互不干扰。
select 1
(11)多数据库间移动数据
move命令
set k1 100: #在 Redis 数据库 0 中,创建了一个键 k1,其值为 100。
get k1: #从数据库 0 获取键 k1 的值,返回 "100"。
select 1 #切换到 Redis 数据库 1。Redis 默认有 16 个数据库(从 0 到 15)
get k1: #在数据库 1 中获取键 k1 的值,返回 nil,因为 k1 仅存在于数据库 0 中,数据库 1 没有该键。
select 0: #切换回数据库 0
get k1: #查看数据库 0 中的键 k1,看是否存在,值为 "100"。
move k1 1: #将数据库 0 中的键 k1 移动到数据库 1 中。移动操作会将 k1 从数据库 0 中删除,并在数据库 1 中创建 k1,保持其值为 100
select 1: #切换回数据库 1。
get k1: #获取数据库 1 中键 k1 的值,现在可以看到 k1 的值为 "100",因为它被从数据库 0 移动到了数据库 1。
select 0: #切换回数据库 0。
get k1: #获取数据库 0 中的键 k1,此时返回 nil,k1 已经被移动到了数据库 1,数据库 0 中不再有这个键
(12)清除数据库内数据
FLUSHDB :清空当前数据库数据
FLUSHALL :清空所有数据库的数据,需要谨慎使用
(13)卸载Redis
redis-cli shutdown
或有密码的情况
redis-cli -a 密码 shutdown
rm -f /usr/local/bin/redis-server
rm -f /usr/local/bin/redis-cli
rm -rf /etc/redis
rm -f /usr/local/etc/redis.conf
rm -rf /var/lib/redis
rm -rf /var/log/redis
rm -f /etc/init.d/redis_6379
rm -f /etc/systemd/system/redis.service
cd /path/to/redis/source #如果不存在目录就不用操作
make distclean
which redis-server #确认有没有卸载
which redis-cli