第六十六集 Redis缓存代理`(*>﹏<*)′


Redis数据库的概念

Redis是一个开源的、使用c语言编写的NosQL数据库。
Redis基于内存运行并支持持久化(支持存储在磁盘),采用key-value(键值对)的存储形式,是目前分布式架构中不可或缺的一环
Redis服务器程序默认是单进程模型
Redis服务在一台服务器上可以同时启动多个Redis进程,Redis的实际处理速度则是完全依靠于主进程的执行效率
若在服务器上只运行一个Redis进程,当多个客户端同时访问时,服务器的处理能力是会有一定程度的下降;若在同一台服务器开启多个Redis进程,Redis在提高并发处理能力的同时会给服务器的CPU造成很大压力。即:在实际生产环境中,需要根据实际的需求来决定开启多少个Redis进程。建议可以开2个进程,好处如下:

备份
抗高并发的同时尽量不给CPU造成太大的压力;
若对高并发要求更高一些,可能会考虑在同一台服务器上开启多个进程。若CPU资源比较紧张,采用单进程即可

Redis数据库的优点

具有极高的数据读写速度
数据读取的速度最高可达到110000 次/s,数据写入速度最高可达到81000 次/s
支持丰富的数据类型
支持key-value、 Strings、 Lists、Hashes ( 散列值)、Sets 及Ordered Sets等数据类型操作

string 字符串(可以为整形、浮点和字符型,统称为元素)
list 列表(实现队列,元素不唯一-,先入先出原则)
set 集合(各不相同的元素)
hash hash散列值( hash的key必须是唯一的 )
set /ordered sets 集合/有序集合

支持数据的持久化
可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
原子性
Redis所有操作都是原子性的:一起成功,一起失败
事务是一个完整的操作,事务的各元素是不可分的
事务中的所有元素必须作为一个整体提交或回滚
如果事务中的任何元素失败,则整个事务将失败
支持数据备份
即master-salve 模式的数据备份
Redis作为基于内存运行的数据库,缓存是其最常应用的场景之一
除此之外,Redis常见应用场景还包括获取最新N个数据的操作、排行榜类应用、计数器应用、存储关系、实时分析系统、日志记录

编译安装squid

安装依赖环境

[root@localhost ~]# yum -y install gcc gcc-c++ make
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
软件包 gcc-4.8.5-44.el7.x86_64 已安装并且是最新版本
软件包 gcc-c++-4.8.5-44.el7.x86_64 已安装并且是最新版本
软件包 1:make-3.82-24.el7.x86_64 已安装并且是最新版本
无须任何处理

解压软件包

[root@localhost opt]# tar xf squid-3.5.27.tar.gz 
[root@localhost opt]# ls
rh  squid-3.5.27  squid-3.5.27.tar.gz

编译安装


[root@localhost squid-3.5.27]# ./configure --prefix=/usr/local/squid                 			//安装目录
--sysconfdir=/etc/                                              //单独将配置文件修改到/etc目录下
--enable-arp-acl                                                //可在ACL中设置通过MAC地址进行管理,防止IP欺骗
--enable-linux-netfilter                                        //使用内核过滤
--enable-linux-tproxy                                           //支持透明模式
--enable-async-io=100                                       	//异步I/O,提升储存性能,值可修改
--enable-err-language="Simplify_Chinese"      					//错误信息的显示语言
--enable-underscore                                             //允许URL中有下划线
--enable-poll                                                   //使用Poll()模式,提升性能
--enable-gnuregex                                               //使用GNU正则表达式

[root@localhost squid-3.5.27]# make && make install

优化squid管理


[root@localhost squid-3.5.27]# ln -s /usr/local/squid/sbin/* /usr/local/sbin   //创建链接文件,优化路径
[root@localhost squid-3.5.27]# useradd -M -s /sbin/nologin squid   //创建程序用户
[root@localhost squid-3.5.27]# chown -R squid:squid /usr/local/squid/var/  //改变目录属主
[root@localhost squid-3.5.27]# ll /usr/local/squid/var/  //查看目录属主
总用量 0
drwxr-xr-x 3 squid squid 19 728 15:53 cache
drwxr-xr-x 2 squid squid  6 728 15:53 logs
drwxr-xr-x 3 squid squid 19 728 15:53 run

编写squid服务脚本


[root@localhost squid-3.5.27]# cat /etc/init.d/squid 
#!/bin/bash
#chkconfig: 35 90 25
#config: /etc/squid.conf
#pidfile: /usr/local/squid/var/run/squid.pid
#Description: Squid - Internet Object Cache

PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"

case "$1" in
        start)
                netstat -utpln | grep squid &>/dev/null
                if [ $? -eq 0 ]
                        then
                                echo "Squid is running"
                else
                        $CMD
                fi
        ;;
        stop)
                $CMD -k kill &>/dev/null
                rm -rf $PID &>/dev/null
        ;;
        status)
                [ -f $PID ] &>/dev/null
                        if [ $? -eq 0 ]
                          then
                                netstat -utpln | grep squid
                        else
                                echo "Squid is not running"
                        fi
	;;
        restart)
                $0 stop &>/dev/null
                echo "正在关闭Squid..."
                $0 start &>/dev/null
                echo "正在启动Squid..."
        ;;
        reload)
                $CMD -k reconfigure
        ;;
        check)
                $CMD -k parse
        ;;
        *)
                echo "用法:{start | stop | restart | 
[root@localhost squid-3.5.27]# chmod +x /etc/init.d/squid  //赋予执行权限
[root@localhost squid-3.5.27]# chkconfig --add squid       //加入系统服务
[root@localhost squid-3.5.27]# chkconfig squid on          //指定squid在各等级为on
[root@localhost squid-3.5.27]# systemctl status squid      //查看服务状态
● squid.service - SYSV: Squid - Internet Object Cache
   Loaded: loaded (/etc/rc.d/init.d/squid; bad; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:systemd-sysv-generator(8)

搭建传统代理

环境
squid   192.168.30.7
web     192.168.30.8
client  192.168.30.200

更新squid配置文件

修改防火墙规则

[root@localhost ~]# iptables -F   //清空规则
[root@localhost ~]# systemctl restart firewalld.service  //重启防火墙
[root@localhost ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT  //允许来自tcp3128的流量进入

启动squid服务

[root@localhost ~]# systemctl restart squid
[root@localhost ~]# netstat -antp | grep squid
tcp6       0      0 ::

配置web服务器

[root@localhost ~]# yum -y install httpd
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
软件包 httpd-2.4.6-97.el7.centos.x86_64 已安装并且是最新版本
无须任何处理
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# netstat -antp | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      76232/httpd         

测试

搭建透明代理

环境

squid   192.168.30.7   192.168.10.7
web     192.168.30.8
client  192.168.10.10

开启squid服务器路由转发

[root@localhost ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1

更新配置文件
添加防火墙规则,
将来源为10网段:80/443端口的流量重定向到3128端口

[root@localhost ~]# iptables -t nat -I PREROUTING -i ens37 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
[root@localhost ~]# iptables -t nat -I PREROUTING -i ens37 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
[root@localhost ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

启动squid服务

[root@localhost ~]# systemctl restart squid
[root@localhost ~]# netstat -antp |grep squid
tcp        0      0 192.168.10.7:3128       0.0.0.0:*               LISTEN      19994/(squid-1) 

测试

ACL控制访问

在配置文件/etc/squid.conf 中,ACL访问控制通过以下两个步骤来实现:

① 使用acl 配置项定义需要控制的条件;

② 通过http_access配置项对已定义的列表做“允许”或“拒绝”访问的控制。

格式:
acl 列表名称 列表类型 列表内容
列表名称:名称自定义,相当于给acl起个名字(也会被http_access 调用)
列表类型:必须使用squid预定义的值,对应不同类别的控制条件
列表内容:是要控制的具体对象,不同类型的列表所对应的内容也不一样,可以有多个值(以空格为分隔,为“或”的关系)

Squid 日志分析

安装图像处理软件

[root@localhost ~]# yum install -y gd gd-devel pcre-devel 
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
软件包 gd-2.0.35-27.el7_9.x86_64 已安装并且是最新版本
软件包 gd-devel-2.0.35-27.el7_9.x86_64 已安装并且是最新版本
软件包 pcre-devel-8.32-17.el7.x86_64 已安装并且是最新版本
无须任何处理

安装squid日志分析工具

[root@localhost ~]# mkdir /usr/local/sarg  //创建工作目录
[root@localhost ~]# cd /opt
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# tar xf sarg-2.3.7.tar.gz 
[root@localhost opt]# cd sarg-2.3.7/
[root@localhost sarg-2.3.7]# ./configure --prefix=/usr/local/sarg 
--sysconfdir=/etc/sarg \     #配置文件目录,默认是/usr/loca/etc
--eenable-xtraprotection       #额外安全防护

更新配置文件

--7行--取消注释
access_log /usr/local/squid/var/logs/access.log  #指定访问日志文件
--25行--取消注释
title "Squid User Access Reports"     	#网页标题
--120行--取消注释,修改
output_dir /var/www/html/sarg      		#报告输出目录
--178行--取消注释
user_ip no           					#使用用户名显示
--184行--取消注释,修改
topuser_sort_field connect reverse     	#top排序中,指定连接次数采用降序排列,升序是normal
--190行--取消注释,修改
user_sort_field connect reverse      	#对于用户访问记录,连接次数按降序排序
--206行--取消注释,修改
exclude_hosts /usr/local/sarg/noreport  #指定不计入排序的站点列表的文件
--257行--取消注释
overwrite_report no         #同名同日期的日志是否覆盖
--289行--取消注释,修改
mail_utility mailq.postfix       #发送邮件报告命令
--434行--取消注释,修改
charset UTF-8          #指定字符集UTF-8
--518行--取消注释
weekdays 0-6          #top排行的星期周期
--525行--取消注释
hours 0-23           #top排行的时间周期
--633行--取消注释
www_document_root /var/www/html      #指定网页根目录

启动

[root@localhost sarg-2.3.7]# touch /usr/local/sarg/noreport
[root@localhost sarg-2.3.7]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
[root@localhost sarg-2.3.7]# sarg
SARG: 纪录在文件: 8, reading: 100.00%
SARG: 成功的生成报告在 /var/www/html/squid-reports/2021Jul28-2021Jul28

安装httpd

[root@localhost ~]# yum -y install httpd
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
软件包 httpd-2.4.6-97.el7.centos.x86_64 已安装并且是最新版本
无须任何处理
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# netstat -antp | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      76232/httpd    

测试

小结

squid 有三种模式:

传统代理(需要指向squid)
需要客户端指向squid 代理服务器,客户端能感知到squid 代理服务器的存在
透明代理(常用,不需要指向squid)
客户端不需要配置,只要直接访问即可,服务端,借助了防火墙规则及静态路由的方式,完成透明代理
反向代理(需要指向squid)
做为类似与Nginx服务器的反向代理功能,但自身不需要一个首页,基于虚拟的IP:端口、以及虚拟的域名进行反向代理给后端真实服务器的IP:端口,并且以权重的方式完成反向代理(负载均衡)
Squid 自身的管理/功能

ACL:主要做的是http_access(基于http协议,access访问)的允许和拒绝管理
sarg:日志分析功能,可以以天的方式指定将access_log中的内容输出到一个web页面中(借助了httpd)展示出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Spring Boot 项目中,可以在 application.properties 或 application.yml 文件中配置 Redis 连接信息。以下是一个示例: ``` # Redis spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.database=0 spring.redis.password= spring.redis.timeout=5000 ``` 这里配置了 Redis 服务器的地址、端口号、数据库、密码和超时时间等参数。如果你的 Redis 服务器没有设置密码,则 `spring.redis.password` 可以不配置。 在非 Spring Boot 项目中,你需要手动配置 Redis 连接信息。以下是一个示例: ```java @Configuration public class RedisConfig { @Bean public RedisConnectionFactory redisConnectionFactory() { RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(); configuration.setHostName("127.0.0.1"); configuration.setPort(6379); configuration.setDatabase(0); configuration.setPassword(RedisPassword.of("")); LettuceConnectionFactory factory = new LettuceConnectionFactory(configuration); return factory; } @Bean public RedisTemplate<String, Object> redisTemplate() { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory()); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return template; } } ``` 这里使用了 Lettuce 作为 Redis 客户端,通过 `RedisStandaloneConfiguration` 对象设置 Redis 服务器的地址、端口号、数据库、密码等参数,然后创建 `LettuceConnectionFactory` 对象进行连接,最后创建 `RedisTemplate` 对象并设置连接工厂、key 和 value 的序列化方式等参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值