9_企业架构队列缓存中间件分布式Redis

企业架构队列缓存中间件分布式Redis

学习目标和内容

1、能够描述Redis作用及其业务适用场景

2、能够安装配置启动Redis

3、能够使用命令行客户端简单操作Redis

4、能够实现操作基本数据类型

5、能够理解描述Redis数据持久化机制

6、能够操作安装php的Redis扩展

7、能够操作实现Redis主从模式

一、背景描述及其方案设计

1、业务背景描述

时间:2016.9.-2017.6

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

⽤户数量: 10000-12000(⽤户量猛增)

PV : 100000-500000(24小时访问次数总和)

QPS: 50-100*(每秒访问次数)

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

2、模拟运维设计方案

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

在商城业务中实现:

①session共享存储到redis

②openresty(nginx+lua)动态限制IP访问

二、Redis介绍

1、介绍

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

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

由意大利人 antirez(Salvatore Sanfilippo) 开发的一款 内存高速缓存数据库

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

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

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

2、业务使用场合

①[Sort Set]排行榜应用,取top n操作,例如sina微博热门话题

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

③[String]计数器应用

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

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

3、对比memcached

①Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

②Redis支持master-slave(主—从)模式应用。

③Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

④Redis单个value存储string的最大限制是512MB, memcached只能保存1MB的数据

⑤redis是单核,memcached是多核

由于redis只能使用单核,而memcached可以使用多核,所以在比较上,平均每一个核上redis在储存小数据时比memcached性能更高。而却100K以上数据中,memcached性能要高于redis,虽然redis最近也在储存大数据的性能上进行优化,但是比起memcached还是有点逊色。结论是无论你使用那个,每秒处理请求的次数都不会成为瓶颈。

你需要关注内存使用率。对于key-vlaue这样简单的数据储存,memcached的内存使用率更高,如果采用hash结构,redis的内存使用率会更高,当然这都依赖于具体的应用场景。

三、安装和配置

官方网址:Redis

github: GitHub - redis/redis: Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs, Bitmaps.

1、源码编译安装

①上传软件到目录中

redis-4.3.0.tgz php扩展 server01和server03安装

redis-5.0.5.tar.gz redis软件 server08安装

②解压编译安装

shell > tar xvf redis-5.0.5.tar.gz
shell > cd redis-5.0.5
shell > make PREFIX=/usr/local/redis install

使用文件/usr/local/redis/bin

redis-cli 命令行客户端

redis-server 服务端

③测试启动

shell > cd /usr/local/redis/bin
shell > ./redis-server

2、后台启动配置

①复制配置文件到软件目录下

②修改编辑配置文件

shell > vim /usr/local/redis/bin/redis.conf

③启动redis-server加入redis.conf参数

shell > cd /usr/local/redis/bin
shell > ./redis ./redis-server

3、命令行客户端简单使用

telnet可以连接redis,没有本身redis-cli更加好用

①简单的数据操作

②查看操作语法帮助

③系统状态信息

四、数据结构类型操作

数据结构 存储数据的方式

数据类型

算法 取数据的方式 代码就把数据进行组合、计算、存储、取出

排序算法 冒泡 堆排序 二分

1、key

key的命名规则不同于一般语言,键盘上除了空格、\n换行外其他的大部分字符都可以使用

像“my key”和“mykey\n”这样包含空格和换行的key是不允许的。

我们在使用的时候可以自己定义一个Key的格式。

例如 object-type🆔field

Key不要太长。占内存,查询慢。

Key不要太短。像u:1000:pwd:123456 就不如 user:1000:password:123456 可读性好

默认在redis中,提供了16库

查看配置文件

2、String

string是redis最基本的类型

redis的string可以包含任何数据。包括jpg图片 base64或者序列化的对象

单个value值最大上限是512MB

如果只用string类型,redis就可以被看作加上持久化特性的memcached

3、List

key value(value1,value2,value3)

list类型其实就是一个双向链表。通过push,pop操作从链表的头部或者尾部添加删除元素

这使得list既可以用作栈,也可以用作队列

同一端进出 先进后出 栈

一端 另外一端出 先进先出 队列

首部(左 left) 尾部(右right)

需求:显示最后登录的几个用户

设计实现:

①登录一个用户,把用户名称或者id存储在list中

②从头部(左部)存,从头部取(左部)

用户:xiaoming xiaohua xiaobaitu

Key名称:lastlogin

实现:

①最后登录的用户

②第一个登录的用户

栈操作

队列操作

4、set

redis的set是string类型的无序集合。集合里不允许有重复的元素

set元素最大可以包含(2的32次方-1)个元素。

关于set集合类型除了基本的添加删除操作,其他常用的操作还包含集合的取==并集(union),交集(intersection),差集(difference)==。通过这些操作可以很容易的实现sns中的好友推荐功能。

Tip:mysql连表文氏图

https://www.cnblogs.com/sunjie9606/p/4167190.html

需求:实现朋友圈的存储和共同好友的计算

设计:

key value

xiaomingFR xiaohong xiaoqiang xiaogang xiaohei xiaobai

xiaohongFR xiaoming xiaolv xiaolan xiaobai xiaohei

实现:

交集 查看xiaohong和xiaoming的共同好友

并集 计算所有的朋友数量

差集 互相介绍好友

使用set建立黑名单(白名单)

5、zset

和set一样sorted set也是string类型元素的集合,有序集合,元素不允许重复

不同的是每个元素都会关联一个权。

通过权值可以有序的获取集合中的元素,可以通过score值进行排序

需求:实现手机APP市场的软件排名

设计:

Key : hotTop

id Score name

1 2 QQ

2 3 wechat

3 5 alipay

4 7 taobao

5 10 king

6 8 jd

score从小到大,jd排第5位,超过第4位taobao的排名

①获取jd的score,taobao的score

②score从小到大排,jd的score调整到比taobao的score小

8 +(-2) = 6

6、Hash

使用redis做缓存,可以使用hash结构,压缩效率和使用效率更高,比string

Hash存储数据和关系型数据库(mysql),存储的一条数据的结构极为相似

Key:value(field:value)

devops:(username:devops,phone:15313131313,email:123456@qq.com)

17301296261:(username:17301296261,phone:17301296261,email:devops@qq.com)

五、数据持久化操作

数据 持久化(数据在服务或者软件重启之后不丢失)

如果数据只存在内存中,肯定会丢失,实现持久化,就需要把数据存储到磁盘中(hdd ssd)

1、snappshoting(快照)

默认snappshoting是开启的,有一个备份的频率

通过查看配置文件可以看到

备份文件

测试备份频率

在5分钟内,进行10key的改变,查看备份效果

手动数据备份

127.0.0.1:6379> SAVE

数据恢复 需要先停掉redis服务

如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可

2、append only file

aof的备份频率

①开启aof

开启aof后,之前的redis里的数据会丢失

重启redis服务

②查看aof效果

总结:

snappshoting 一般的数据持久化使用,效率高,数据迁移方便

aof 适合于备份、数据实时性备份要求更高的情况

六、企业案例使用

1、主从模式

缓存集群架构示意图

server08 master 192.168.17.107

server09 slave 192.168.17.108

①master配置

shell > vim /usr/local/redis/bin/redis.conf

开启监听,在网络中与其他服务器进行网络交互的网卡,默认eth0

bind的ip指的是其他的主机需要和这个主机通讯的ip(这个的主机)

重启服务器并查看是否启动成功

②slave配置

shell > vim /usr/local/redis/bin/redis.conf

redis5.0之后的版本修改为参数replicaof

重启服务器并查看是否启动成功

③查看效果

Tip:

slave不允许写操作

是因为配置文件里进行了slave read-only设置,也是符合业务的使用需求

2、安全限制

==IP限制登录==

①打开配置IP限制

注意如果有防火墙,先关闭防火墙,或者开启端口限制

bind ip 监听绑定网卡的IP

shell > vim /usr/local/redis/bin/redis.conf

重启服务,检测是否启动成功

②远程连接测试

==密码验证==

①修改配置文件

shell > vim /usr/local/redis/bin/redis.conf

重启服务并检查是否启动成功

②测试密码登录

Tip:如果开启了密码限制,搭建主从需要在slave配置中填写master密码

4、PHP扩展安装

server01和server03上安装redis扩展

①解压编译安装

shell > tar xvf redis-4.3.0.tgz
shell > cd redis-4.3.0
shell > phpize
shell > ./configure && make && make install

②配置文件php.ini开启

shell > vim /usr/local/php/etc/php.ini

③重启php-fpm服务器查看phpinfo

shell > service php-fpm restart

查看phpinfo,需要编写一个php文件内容如下

<?php
 	phpinfo();

通过浏览器访问编写的php文件页面,ctrl+f在搜索框里输入并查看

5、session存入redis

与之前session存储到memcached的方式一样,将session存储到redis中,也可以实现session的共享和实现单点登录(sso)的操作。

下面就是配置thinkphp框架存储session到redis中的示例配置文件。

##6、Nginx+lua+redis 实现访问攻击黑名单 WAF

https://www.cnblogs.com/huligong1234/p/4163832.html

①安装openresty 和之前安装一致

②配置文件

③lua脚本文件

④测试效果

超过访问计数之后,就禁止访问

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/223905.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI跨界学习,不再是梦!

大家好&#xff01;今天给大家推荐的 GPTs 是【行业知识脉络】&#xff0c;帮助大家快速了解某个领域的脉络&#xff0c;并提供足够的学习资料和建议。 在AI时代&#xff0c;从小白到专家的1万小时定律即将失效&#xff0c;用少于1千小时掌握行业知识树和其核心概念是如何学习的…

内核无锁队列kfifo

文章目录 1、抛砖引玉2、内核无锁队列kfifo2.1 kfifo结构2.2 kfifo分配内存2.3 kfifo初始化2.4 kfifo释放2.5 kfifo入队列2.6 kfifo出队列2.7 kfifo的判空和判满2.8 关于内存屏障 1、抛砖引玉 昨天遇到这样一个问题&#xff0c;有多个生产者&#xff0c;多个消费者&#xff0c…

使用Java网络编程,窗口,线程,IO,内部类等实现多人在线聊天1.0

1.整体思路 思路图 整体思路如上: 涉及知识点:线程网络编程集合IO等 TCP 协议 2.代码实现过程 服务端 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import jav…

SQL手工注入漏洞测试(Sql Server数据库)-墨者

———靶场专栏——— 声明&#xff1a;文章由作者weoptions学习或练习过程中的步骤及思路&#xff0c;非正式答案&#xff0c;仅供学习和参考。 靶场背景&#xff1a; 来源&#xff1a; 墨者学院 简介&#xff1a; 安全工程师"墨者"最近在练习SQL手工注入漏洞&#…

大模型应用设计的10个思考

技术不是万能的&#xff0c;但没有技术却可能是万万不能的&#xff0c;对于大模型可能也是如此。基于大模型的应用设计需要聚焦于所解决的问题&#xff0c;在自然语言处理领域&#xff0c;大模型本身在一定程度上只是将各种NLP任务统一成了sequence 到 sequence 的模型。利用大…

使用 Webshell 访问 SQL Server 主机并利用 SSRS

本文将指导您使用RDS SQL Server实例的主机账号登录和管理SQL Server Reporting Services&#xff08;SSRS&#xff09;数据库。 背景信息 RDS SQL Server提供Webshell功能&#xff0c;用户可以通过Web界面登录RDS SQL Server实例的操作系统。通过Webshell&#xff0c;用户可…

一次重新加载所有 maven 项目产生的 OOM

1、解决什么问题&#xff1f; 忘了截图了&#xff0c;用文字描述就是由于Reload All Maven Projects导致的 OOM 异常。 2、尝试与解决 2.1、尝试 2.1.1、尝试清理idea缓存&#xff08;无效&#xff09; 2.1.2、重启idea&#xff08;无效&#xff09; 2.1.3、重启电脑&am…

硬件连通性测试对象与实施过程

硬件连通性测试是一种系统性的测试方法&#xff0c;用于验证硬件设备之间的连接、通信和协作是否正常。这包括各种硬件组件&#xff0c;如计算机、网络设备、传感器、打印机等。测试的目的是确保硬件设备在其设计和运行环境中能够正确地交互和通信。 一、硬件连通性测试对象 网…

Slurm集群管理系统

Slurm集群管理系统 Slurm&#xff08;Simple Linux Utility for Resource Management&#xff0c;https://slurm.schedmd.com/&#xff09;是一个开源的、容错的、高度可扩展的集群管理和作业调度系统&#xff0c;适用于大型和小型高性能计算&#xff08;HPC&#xff09;集群。…

憋了个大招_群发版

大家好&#xff0c;我是良许。 憋了个大招&#xff0c;兄弟们&#xff01;我花了两个月的时间&#xff0c;搭建了一个自己的网站啦&#xff5e; 不卖关子&#xff0c;网站链接为&#xff1a; www.lxlinux.net/e/ 网站首页截图如下&#xff1a; 这个网站全部都是关于嵌入式及…

【JavaWeb学习笔记】6 - Tomcat

项目代码 零、在线文档 Apache Tomcat 8 (8.0.53) - Documentation Index WEB开发 1. WEB,在英语中web表示网/网络资源(页面&#xff0c;图片,css,js)意思&#xff0c;它用于表示WEB服务器(主机)供浏览器访问的资源 2. WEB服务器(主机)上供外界访问的Web资源分为: 静态web…

动手学习深度学习-跟李沐学AI-自学笔记(3)

一、深度学习硬件-CPU和GPU 芯片&#xff1a;Intel or AMD 内存&#xff1a;DDR4 显卡&#xff1a;nVidia 芯片可以和GPU与内存通信 GPU不能和内存通信 1. CPU 能算出每一秒能运算的浮点运算数&#xff08;大概0.15左右&#xff09; 1.1 提升CPU利用率 1.1.1 提升缓存…

Vite4、Vue3、Axios 针对请求模块化封装搭配自动化导入(简单易用)

针对请求模块化封装搭配自动化导入&#xff08;简单易用&#xff09; 目标目录目标代码前提步入正题src / utils / index.jssrc /api / index.jssrc /api / request.jssrc /api / service.jssrc /api / utils.jssrc /api / modules / demo.js 自动化配置vite.config.jseslint 校…

2023中医药国际传承传播大会暨中医药图片和非遗艺术展隆重揭幕

由世界针灸学会联合会、中新社国际传播集团、中国新闻图片网、中国民族医药学会、中国针灸学会联合主办的“2023中医药国际传承传播大会”3日在广东省深圳市举办&#xff0c;“中医药国际传承传播图片展”与“非遗艺术展”在大会举办期间开展迎客。会议聚焦非遗健康、非遗传承等…

案例049:基于微信小程序的校园外卖平台设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

【vue】点击导航菜单切换局部页面,打开展示默认栏目,页面刷新等问题

非专业前端&#xff0c;局限性较高&#xff0c;有些问题看起来很小&#xff0c;但是初次接触很棘手&#xff0c;需要查找很多博客&#xff0c;内容也很杂。以下只是过程中总结下来的&#xff0c;要解决的就是标题中的三个问题。 这是我需要达成的效果。 1.第一个是进入导航菜单…

LeetCode:2646. 最小化旅行的价格总和(dfs + 树形dp C++、Java)

目录 2646. 最小化旅行的价格总和 题目描述&#xff1a; 实现代码与解析&#xff1a; DFS DP 原理思路&#xff1a; 2646. 最小化旅行的价格总和 题目描述&#xff1a; 现有一棵无向、无根的树&#xff0c;树中有 n 个节点&#xff0c;按从 0 到 n - 1 编号。给你一个整数…

团队git操作流程

项目的开发要求&#xff1a;&#xff08;1&#xff09;项目组厉员代码提交不少于20次 &#xff08;2&#xff09;项目组厉员每天提交不少于20次 &#xff08;3&#xff09;企业项目开发代码的每天的提交一般提交3-5次 &#xff08;4&#xff09;代码仓库的管理 git的基础操作流…

案例042:基于微信小程序的居住证申报系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

OpenCV-python numpy和基本作图

文章目录 一、实验目的二、实验内容三、实验过程Numpy1.NumPy 操作2.NumPy Ndarray 对象3.NumPy 基本类型4.NumPy 数组属性ndarray.ndimndarray.shapendarray.itemsizendarray.flags 5.NumPy 创建数组numpy.emptynumpy.zerosnumpy.ones 6.NumPy 从已有的数组创建数组numpy.asar…