缓存加速CDN——Redis配置与优化

1. 关系数据库和非关系数据库

1.1 关系数据库与非关系型数据库

1.1.1 关系型数据库

  • 一个结构化的数据库,创建在关系模型基础上
  • 一般面向于记录
  • 包括 Oracle、 MySQL、 SQL Server. Microsoft Access、 DB2等

1.1.2 非关系型数据库

  • 除了主流的关系型数据库外的数据库,都认为是非关系型
  • 包括Redis、 MongBD、Hbase、 CouhDB等

1.2 非关系型数据库产生背景

  • High performance——对数据库高并发读写需求
  • Huge Storage——对海量数据高效存储与访问需求
  • High Scalability && High Availability——对数据库高可扩展性与高可用性需求

2. Redis安装部署

2.1 Redis简介

  • Redis基于内存运行并支持持久化
  • 采用key-value (键值对)的存储形式
  • 优点
    - 具有极高的数据读写速度
    - 支持丰富的数据类型
    - 支持数据的持久化
    - 原子性
    - 支持数据备份

2.2 操作步骤

在这里插入图片描述

2.3 编译安装Redis

[root@localhost src]# tar xvzf redis4.0.9.tar.gzg
[root@localhost src]# cd redis-4.0.9/
[root@localhost redis- 4.0.9]# make
[root@localhost redis-4.0.9]# make PREFIx=/s/localredis install
I [root@localhost ~]# In -s /usrlocalredis/bin/ /usrl/local/bin/

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.4 设置Redis相关配置文件

[root@localhost redis]# cd /uslocal/src/redis 4.0.9/utils/
[root@localhost utils]# ./install server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379]
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]
Selected default - /etc/redis/6379.conf
Please select the redis log file name [varl/log/redis_ 6379.l0og]
Selected default - /var/log/redis_ 6379.log
Please select the data directory for this instance [var/lib/redis/6379]
Selected default - /var/lib/redis/6379
Please select the redis executable path 0 /sr/local/redis/bin/redis-server

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.5 Redis进程控制

[root@localhost utils]# /etc/init.d/redis_ 6379 status
Redis is running (5436)
[root@localhost utils]# /etc/init.d/redis_ 6379 stop
Stopping...
Redis stopped
[root@localhost utils]# /etc/init.d/redis_ 6379 start
Starting Redis server...
[root@localhost utils]# /etc/init.d/redis_ 6379 restart
Stopping...
Redis stopped
Starting Redis server...

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

2.6 Redis配置文件

配置参数(/etc/redis/6379.conf)

bind:监听的主机地址
port: 端口
daemonize yes:启用守护进程
pidfile:指定PID文件
loglevel notice:日志级别
logfile:指定日志文件

3. Redis数据库常用命令

3.1 redis-cli命令行工具

连接本地数据库
[root@localhost utils]# /us/localredis/bin/redis-cli
127.0.0.1:6379>
D
连接远程数据库
[root@localhost utils]# redis-cli -h 192. 168.10.161 -p 6379
192.168. 10.161:6379>

在这里插入图片描述
在这里插入图片描述

3.2 redis-cli命令行工具

获取命令帮助

help @<group>:获取<group>中的命令列表
help <command>:获取某个命令的帮助
help <tab>:获取可能帮助的主题列表

在这里插入图片描述
在这里插入图片描述

3.3 redis-cli命令行工具

  • set:存放数据
  • get:获取数据
[root@localhost ~]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> set teacher zhanglong
OK
127.0.0.1:6379> get teacher
"zhanglong"

在这里插入图片描述
在这里插入图片描述

3.4 key相关命令

●keys:获取符合规则的键值列表
●exists: 判断键值是否存在
●del:删除当前数据库的指定key
●type: 获取key对应的value值类型
●rename(覆盖) 1 renamenx (不覆盖) :对已有的key进行
重命名
●dbsize:查看当前数据库中key的数目
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.5 redis-benchmark测试工具

-h:指定服务器主机名
-p:指定服务器端口
-C: 指定并发连接数
-n:指定请求数
-d:以字节的形式指定SET/GET值的数据大小
-q:强制退出Redis,仅显示query/sec值
  • 向IP地址为192.168.10.161、端口为6379的Redis服务器发送100个并发连接与100000个请求测试性能
 [root@localhost ~]# /s/lacal/edisbin/redis benchmark -h 192.168.10.161 -P 6379 -C 100 -n 100000
  • 测试存取大小为100字节的数据包的性能
[root@localhost ~]# /usrlocal/redis/bin/redis-benchmark -h 192. 168.10.161 -p 6379 -q -d 100

在这里插入图片描述

5. Redis多数据库操作

  • Redis支持多数据库,默认支持16个数据库,0-15命名
  • 多数据库相互独立,互不干扰
  • 多数据库常用命令
    - 多数据库间切换
    - 多数据库间移动数据
    - 清除数据库内数据
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    哈希结构
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

6. Redis持久化

6.1 持久化概述

  • Redis是运行在内存中,内存中的数据断电丢失
  • 为了能够重用Redis数据,或者防止系统故障,需要将Redis中的数据写入到磁盘空间中,即持久化

6.2 持久化分类

  • RDB方式:创建快照的方式获取某-时刻Redis中所有数据的副本
  • AOF方式:将执行的写命令写到文件的末尾,以日志的方式来记录数据的变化

6.3 Redis的默认持久化方式

6.4 默认文件名dump.rdb在这里插入图片描述

6.5 触发条件

  • 在指定的时间间隔内,执行指定次数的写操作(配置文件控制)
  • 执行save或者是bgsave (异步)命令
  • 执行flushall命令,清空数据库所有数据
  • 执行shutdown命令,保证服务器正常关闭且不丢失任何数据

6.6 优缺点

  • 适合大规模的数据恢复
  • 如果业务对数据完整性和一致性要求不高,RDB是很好的选择
  • 数据的完整性和一致性不高
  • 备份时占用内存

RDB缺点 快照只是基于一个时间点,还是会有数据丢失的风险
AOF缺点 恢复工作量大
RDB+AOF

6.7 RDB持久化

  • 通过RDB文件恢复数据
  • 将dump.rdb文件拷贝到redis的安装目录的bin目录下,重启redis服务即可
    配置文件选项
vim /etc/redis/6379.conf       // 900秒之内至少-次写操作、300秒之内至少发生10次写操作,60秒之内发生至少10000次写操作,只要满足其一都会触发快照操作,注释所有的save项表示关闭RDB
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb           // RDB文件名称
dir /var/ib/redis/6379         //    RDB文件路径
rdbcompression yes            // 是否进行压缩

6.8 AOF持久化

Redis默认不开启

弥补RDB的不足(数据的不一致性)

采用日志的形式来记录每个写操作,并追加到文件中

Redis重启会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作

根据AOF文件恢复数据

      -  将appendonly.aof文件拷贝到Redis的安装目录的bin目录下,重启Redis服务即可
配置文件选项
vim /etc/redis/6379.conf
appendonly yes                   开启AOF持久化
appendfilename "appendonly.aof "           AOF文件名称
# appendfsync always                        always:同步持文化.每次发生数据变化会立刻写入磁盘
appendfsync everysec                        everysec:默认推荐,每秒异步记录一次(默认值)
# appendfsync no                            no:不同步,交给操作系统决定如何同步
aof-load-truncated yes                   忽略最后一条可能存在问题的招令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

AOF的重写机制

  • AOF的工作原理是将写操作追加到文件中,文件的冗余内容会越来越多
  • 当AOF文件的大小超过所设定的阈值时,Redis就会对AOF文件的内容压缩

AOF重写的原理

  • Redis会fork出一条新进程,读取内存中的数据(并没有读取旧文件),并重新写到一个临时文件中,最后替换旧的aof文件

AOF的重写配置

vim /etc/redis/6379.conf
#在日志进行BGREWRITEAOF时,如果设置为yes表示新写操作不进
行同步fsync,只是暂存在缓冲区里,避免造成磁盘I0操作冲突,等重
写完成后在写入。Redis中默认为no
no-appendfsync-on-rewrite no
#当前AOF文件大小是上次日志重写时AOF文件大小两倍时,发生
BGREWRITEAOF操作
auto-aof-rewrite-percentage 100
#当前AOF文件执行BGREWRITEAOF命令的最小值,避免刚开始启动
Reids时由于文件尺寸较小导致频繁的BGREWRITEAOF
auto-aof-rewrite-min-size 64mb

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7. Redis性能管理

7.1 查看Redis内存使用

[root@master1 ~]# /usrlocalredis/bin/redis-cli
127.0.0.1:6379> info memory
# Memory                      内存使用总量
used memory:2650536
used memory_ human:2.53M
used_ memory_ rss:12120064
used memory_ rSs_ human:11 .56M
used memory_ peak:2650536
used memory_ peak human:2,53M
used memory_ peak perc: 100.00%
used memory_ overhead:2573336
used memory_ startup:1458272
used memory_ dataset:77200
used_ memory dataset perc:6 48%
total system memory: 1912078336
otal system_ memory. human:1.78G
used memory_ lua:37888
used memory. Tua_ human:37.00K
maxmemory:0
maxmemory human:0B
maxmemory_ policy:noeviction
mem_ fragmentation_ ratio:4.57          内存碎片率
mem allocator:jemallc 4.0.3
active_ _defrag. running:0
lazyfree pending. objects:0

7.2 内存碎片率

  • 操系统分配的内存值used_ memory_ rss除以Redis使用的内存值used_ memory计算得出
  • 内存碎片是由操作系统低效的分配回收物理内存导致的
    - 不连续的物理内存分配
  • 跟踪内存碎片率对理解Redis实例的资源性能是非常重要的
    - 内存碎片率稍大于1是合理的,这个值表示内存碎片率比较低
    - 内存碎片率超过1.5,说明Redis消耗了实际需要物理内存的150%,其中50%是内存碎片率
    - 内存碎片率低于1的,说明Redis内存分配超出了物理内存,操作系统正在进行内存交换

7.3 内存使用率

  • redis实例的内存使用率超过可用最大内存,操作系统将开始进行内存与swap空间交换
  • 避免内存交换
    - 针对缓存数据大小选择
    - 尽可能的使用Hash数据结构
    - 设置key的过期时间

7.4 回收key

  • 保证合理分配redis有限的内存资源
  • 当达到设置的最大阀值时,需选择-种key的回收策略
    - 默认情况下回收策略是禁止删除
    - redis.conf配置文件中修改maxmemory-policy属性值
    - volatile-lru: 使用LRU算法从已设置过期时间的数据集合中淘汰数据
    - voltil-t: 从已设置过期时间的数据集合中挑选即将过期的数据淘汰
    - volatile-random: 从已设置过期时间的数据集合中随机挑选数据淘汰
    - allkeys-lru: 使用L RU算法从所有数据集合中淘汰数据
    - allkeys-random: 从数据集合中任意选择数据淘汰
    - no-enviction: 禁止淘汰数据

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值