Redis键值对数据库相关理论

Redis键值对数据库相关理论

未来数据库主流----非关系型数据库

数据库的新兴之秀非关系型数据库(NoSQL),除了今天要介绍的Redis,还有MongDB、Hbase、CouhDB等等。其凭借着其非关系型、 分布式、 开源和横向扩展等优势, 被认为是下一代数据库产品。
非关系型数据库解决了关系型数据库存在的一些缺点。
1.在现在的网络环境中要求数据库需要可以承载大量的并发访问量,和读写要求。一般会达到1W次/秒以上的请求数。这无疑给关系型数据库带来了巨大的挑战。
2.不仅如此,除了大量的并发请求现在的数据库还要承载海量的数据,据统计一个月就有可能产生大约2.5亿条用户信息,这给关系型数据库通过sql语句查找带来了巨大的挑战。
3.现在的关系型数据库存在着高可用、横向扩展的瓶颈。无法通过添加硬件和节点的方式扩展负载性能。尤其是24小时需要工作的数据库服务器进行扩展升级都要停机维护。这还带来了巨大的经济损失。

强大的非关系型数据库----Redis

Redis简介

Redis是一个开源的、使用 C 语言编写、基于内存运行的 NoSQL数据库。 Redis 基于内存运行并支持持久化,采用 key-value(键值对) 的存储形式,是目前分布式架构中不可或缺的一环。
Redis可以在同一台服务器上部署多个Redis实例。在一般的生产环境中会根据情况决定服务器需要开多少Redis进程,多了会增加CPU负担,少了会降低Redis工作效率。

Redis优点

1.具有极高的数据读写速度, 数据读取的速度最高可达到 110000 次/s, 数据写入速度最高可达到 81000 次/s。
2.支持丰富的数据类型, 不仅仅支持简单的 key-value 类型的数据, 还支持 Strings,Lists, Hashes, Sets 及 Ordered Sets 等数据类型。
3.支持数据的持久化, 可以将内存中的数据保存在磁盘中, 重启的时候可以再次加载进行使用。
4.Redis支持事物的原子性, Redis 所有操作都是原子性的。
5.Redis支持数据备份。

Redis一些参数配置

在/etc/redis/6379.conf配置文件中,我们可以根据当前环境修改一些Redis的配置参数。

114 timeout 0				#当客户端闲置多长时间后关闭连接, 如果指定为 0, 表示关闭该功能

254 dbfilename dump.rdb			#指定本地数据库文件名, 默认值为 dump.rdb

264 dir /var/lib/redis/6379			#指定本地数据库存放目录

540 # maxclients 10000				#最大客户端连接数,默认关闭如果设置 maxclients 0, 表示不限制。 当客户端连接数到达限制时, Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息。

242 rdbcompression yes		#指定存储至本地数据库时是否压缩数据, 默认为 yes。

567 # maxmemory <bytes>		#指定 Redis 最大内存限制, Redis 在启动时会把数据加载到内存中, 达到最大内存后, Redis 会先尝试清除已到期或即将到期的 Key, 当此方法处理后, 仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。

704 appendfilename "appendonly.aof"			#指定更新日志文件名, 默认为 appendonly.aof

Redis一些命令工具

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

因为Redis是一个c/s架构,所以要访问Redis需要客户端软件。用Redis自带的命令:redis-cli -h 来访ip -p端口 -a 密码。若无密码则不需要-a。
在这里插入图片描述
info;命令可以查看Redis当前的信息。

192.168.80.133:6379> info
# Server
redis_version:5.0.7
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:4db2f2a314114749
redis_mode:standalone
os:Linux 3.10.0-957.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:4.8.5
process_id:17803
run_id:5542ac499810d68d7367512ec3fb49715723d8e9
tcp_port:6379
uptime_in_seconds:3050
uptime_in_days:0
hz:10
configured_hz:10
lru_clock:7568550
executable:/usr/local/bin/redis-server
config_file:/etc/redis/6379.conf

# Clients
connected_clients:2
client_recent_max_input_buffer:2
client_recent_max_output_buffer:0
blocked_clients:0
......

redis-benchmark 测试工具,用于测试Redis性能的工具。

-c 指定并发连接数;-n指定请求数
redis-benchmark -h 192.168.80.133 -p 6379 -c 100 -n 10000

在这里插入图片描述

测试存取能力:

-q: 强制退出 redis。 仅显示 query/sec 值;-d: 以字节的形式指定 SET/GET 值的数据大小。
 redis-benchmark -h 192.168.80.133 -p 6379 -q -d 100

在这里插入图片描述

Redis持久化

与同类型的数据库memcached相比,redis可以支持数据的持久化。即将内存中的数据存放在硬盘中。所以在进行持久化操作前就重启计算机,在内存中的数据就会丢失。在开启持久化后,redis会不定期通过异步方式将内存里的数据写入到磁盘中去。或者将每次的数据更新接入到磁盘中。
redis持久化的方式有两种:RDB和AOF。
RDB工作模式:通过创建快照的方式将某个时刻的内存中redis存储的数据变成快照写入此盘。其中会专门有一个fork进程去创建数据集进行备份。

在这里插入图片描述
在配置文件中设置了RBD的数据持久化规则:

 219  save 900 1		#900秒内至少有1个key被更改就执行快照
 220  save 300 10		#300内描述至少有10个key被更改就执行快照
 221  save 60 10000		#60秒内至少有10000个key被更改就执行快照

备份数据会议dump.rbd形式存储在安装路径下。
我们也可以通过命令手动进行redis快照。save和bgsave,save是一个阻塞进程在输入命令后无法接受客户端的请求;而bgsave则是通过fork进程在后台完成快照,其父进程依旧可以接收来自客户端的请求。
RBD优缺点:
优点
1.RBD备份是按照时间进行的,非常好归档们可以根据需求恢复到相应的时间点。
2.RBD方便备灾,通过还原文件进行数据恢复。还可以远程发送给其他终端使用。
3.在持久化过程中,通过fork子进程去完成,其父进程有就可以正常工作。不会影响到服务线程的I/O。
4.RBD启动比AOF的日志形式快。

缺点
1.RBD在未进行备份前如果服务器出现情况,未进行数据持久化操作,为持久化的部分可能会造成数据丢失。
2.如果需要备份的数据过大,会造成redis服务停止几秒钟。

AOF工作模式:
AOF持久化模式是通过将数据写入到redis中的每条命令,记录为日志文件的形式,我们可以通过查看文件内容发现之前的操作记录。
首先我们需要在配置文件中开启AOF持久化功能,否则redis不会使用AOF模式进行持久化。

#只有改为yes才可以。
 700 appendonly no

在配置文件中设置了AOF持久化频率的相关参数。

 729 # appendfsync always		#每个 Redis 命令都要同步写入硬盘。这样会严重降低 Redis 的性能
 730 appendfsync everysec	#每秒执行一次同步,显式地将多个写命令同步到硬盘
 731 # appendfsync no			#让操作系统来决定应该何时进行同步

因为AOF会将命令持续性的写入到文件中,这样就会造成冗余的操作记录占用太多的磁盘空间,甚至会超出磁盘的容量。为此我们需要对AOF文件进行重写和压缩的操作。
重写,可以通过设置auto-aof-rewrite-percentage和auto-aof-rewrite-min-size两个配置选项来对 AOF 重写进行配置。auto-aof-rewrite-percentage是当新的日志比旧的日志大多少时进行重写;auto-aof-rewrite-min-size是当新日志多大时进行重写。 Redis 以 append 模式不断的将修改数据写入到老的磁盘文件中, 同时 Redis 还会创建一个新的文件用于记录此期间有哪些修改命令被执行。
压缩,则是通过 BGREWRITEAOF 命令,与fork类似,也是一个子进程在后台对日志中无需的冗余操作进行删除,从而减小了日志的大小。

AOF的优缺点:
优点
1.AOF提供了多种备份的频率,即使美妙同步也就会丢失1s的数据。保证了数据的安全性。
2.AOF 包含一个格式清晰、 易于理解的日志文件用于记录所有的修改操作。 事实上,我们也可以通过该文件完成数据的重建。
3.采用AOF模式,在写入过程中即使出现宕机现象, 也不会破坏日志文件中已经存在的内容。 然而如果我们本次操作只是写入了一
半数据就出现了系统崩溃问题, 不用担心, 在 Redis 下一次启动之前, 我们可以通过redis-check-aof 工具来帮助我们解决数据一致性的问题。

缺点
1.AOF文件大小比RBD的大,所以在恢复数据的时候比较慢。
2.AOF备份频率比RBD的高,所以在性能上会占用更多的资源。
3.AOF是用记录的方式将操作卸载日志中,而RBD则是以快照的方式记录数据文件。RBD会更加的安全BUG比AOF少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值