阶段一:非关系型数据库Redis基础

背景描述及其方案设计

业务背景描述

时间:2021.9.-2022.6

发布产品类型:互联网动态站点 商城

用户数量: 60000(用户量猛增)

PV : 200000-300000(24小时访问次数总和)

DAU: 20000(每日活跃用户数)

模拟运维设计方案

根据以上业务需求,准备加入Redis缓存中间件服务器,可以使用到redis更加丰富的功能

在商城业务中实现:

① 实现活跃用户数的统计(使用set集合)

② session存储到redis

③ openresty(nginx+lua)动态限制IP访问waf(web application firewalld)

Redis概述

什么是Redis

Nosql 非关系数据库 key => value 键值对

Redis是Remote Dictionary Server(远程数据服务)的缩写

由意大利人 antirez(Salvatore Sanfilippo萨尔瓦托桑菲利波) 开发的一款 内存高速缓存数据库

该软件使用C语言编写,它的数据模型为 key-value

它支持丰富的数据结构,比如 string list(双向链表) hash(哈希) set(集合) sorted set(zset有序集合)

可持久化(保存数据到磁盘中),保证了数据安全

业务使用场合

① [Sort Set]排行榜应用,取top n操作,例如sina微博热门话题(取最热的前10个话题)

② [List]获得最新N个数据 或 某个分类的最新数据

③ [String]计数器应用

④ [Set]sns(social network site)获得共同好友

⑤ [Set]防攻击系统(ip判断)黑白名单等等

安装与配置Redis

官方网址:https://redis.io/

github: https://github.com/antirez/redis

安装方式

可以通过yum方式在线安装,也可以通过源码编译方式安装

这里,采用源码编译方式安装:

第一步:找到对应的安装包资源,使用wget命令下载,这里安装的7.4.0版本。
安装包资源地址:https://download.redis.io/releases/

第二步:上传Redis到Linux系统中

wget https://download.redis.io/releases/redis-7.4.0.tar.gz

第二步:配置=>编译=>安装
tar -zxvf redis-7.4.0.tar.gz
cd redis-7.4.0
make
make PREFIX=/usr/local/redis install

命令作用:

执行结果:

关键参数:

注意事项:


测试结果:查看dump.rdb文件大小的变化

![](/assets/feishu-images/42458477482ef0852ae1aa2e.png)

不会触发,仍使用上一次的快照文件。
**总结**
image

这个操作是子进程在后台完成的,这就允许父进程同时还可以修改数据。

image

可以通过lastsave命令获取最后一次成功的执行快照时间。

运行效果:

![](/assets/feishu-images/e56c8b34ad92e737d34e1b7f.png)

获取一个看不懂的时间戳,需要转换一下


比如
image
image

默认:yes

image

默认:yes。对于存储到磁盘中的快照,可以进行压缩存储。

如果是的话,redis会采用LZF算法进行压缩。

如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能。

image

默认:yes

在存储快照后,还可以让redis使用CRC64算法来进行数据校验。

但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能。

image

**注意事项:**



![](/assets/feishu-images/a24f78fa57b34389ecf3b6da.png)




它**不记录数据快照**,而是记录所有**写操作**命令(读操作不记录)​​,就像数据库的“操作日志”。



**核心特点:**



![](/assets/feishu-images/9f2e3861dcd1809b16882209.png)

| **步骤** | **详解** |
|---|---|
| ①命令接收 | 客户端发送的写操作(如 SET name "redis")先到达 Redis 服务端。 |
| ②缓存写入 | 命令不会直接写入磁盘,而是先存入 AOF 缓冲区(内存区域)​​,避免频繁磁盘 I/O。 |
| ③策略同步 | AOF缓冲会根据AOF缓冲区 **同步文件的三种写回策略** 将命令写入磁盘上的AOF文件。 |
| ④文件优化 | 随着 AOF 文件变大,Redis 会根据规则进行命令的合并( **又称AOF重写** ),从而起到AOF文件压缩的目的。 |
| **⑤重启恢复** | **Redis 重启时,读取 AOF 文件 并 按顺序执行所有写命令,重建原始数据集。** |



注意事项:

image

三种写回策略小结:

image
image

...

...

1426 1428 1432


**注意事项:**



![](/assets/feishu-images/1485d9ac6006410128320271.png)

添加一些数据,查看测试结果

image

**注意事项:**




![](/assets/feishu-images/0cfde5823efa736bb1afab90.png)


![](/assets/feishu-images/2e126ec2c00a576fcb5871f4.png)







**核心价值:**
![](/assets/feishu-images/b025c10cdcc5e887781cd133.png)

**翻译如下:**
![](/assets/feishu-images/260a9b5feba0795d4740a62d.png)




![](/assets/feishu-images/d58d28f27458c4355d3f658d.png)

简单来说:
![](/assets/feishu-images/e3ac4b87b1977604152f0a6e.png)







**概括:**
| 编号 | IP | Redis版本 | 角色 |
|---|---|---|---|

准备redis02,需要提前安装Redis



修改配置文件redis.conf

或者通过主节点把编译好的同步过来,在mysql01服务器上面执行同步文件

#过量使用内存设置为0!在低内存环境下,后台保存可能失败

注意事项:


**注意事项:**

重启redis服务,在slave服务器测试密码是否可用

或者


**注意事项:**

命令说明:

源码安装LNMP,要参考下面的代码,手工编译安装redis.so扩展

第一步:安装redis.so扩展

https://pecl.php.net/package/redis


**注意事项:**


缓存设计:减少Web对MySQL的访问,减轻数据库压力

与之前session存储到file文件的方式不同,将session存储到redis中,可以实现session的共享以及单点登录(sso)的操作。

www.baidu.com

pan.baidu.com

image.baidu.com

music.baidu.com

Another-Redis-Desktop-Manager软件

双击安装即可

使用Another-Redis-Desktop-Manager连接Redis服务器(88.111)

注意事项:

], ], ], ];



https://doc.thinkphp.cn/v6_1/Session.html

注意事项:

<?php // | 会话设置

];





#安装依赖

注意事项:

--释放连接(连接池实现)

red:set_timeout(1000)

close_redis(red)


**命令拆解:**

| 命令部分 | 重要程度 | 详细解释 |
|---|---|---|
| `-p` | 【核心】 | 递归创建目录;父目录不存在时一并创建,目录已经存在也不报错。 |

**注意事项:**





}









        }


        #
        }

        #
        #}

        #
        #}

        #
        #}
    }

    #

    #}

    #




    #}

}

bin/openresty

注意事项:

或者修改/usr/local/openresty/nginx/conf/nginx.conf端口

} } 启动服务


**注意事项:**




修改配置文件,
        #ip_hash;
    }
        }

        }
        }
    }

#主配置文件修改






#修改lua脚本访问频率
    --释放连接(连接池实现)


red:set_timeout(1000)







close_redis(red)

启动服务

注意事项:

本文由飞书云文档同步生成。涉及命令、SQL、配置示例时,请以飞书源文档和实际环境执行结果为准。