haproxy keepalived_Haproxy+KeepAlived+Mycat实现高可用集群

1.什么是Haproxy

HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。

HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上

2.什么是KeepAlived

keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived是自动完成,不需人工干涉。

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器

3.什么是Mycat

MyCat 是目前最流行的基于 java 语言编写的数据库中间件,是一个实现了 MySQL 协议 的服务器,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问, 而其后端可以用 MySQL 原生协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数 主流数据库服务器通信,其核心功能是分库分表。配合数据库的主从模式还可实现读写分离。 MyCat 是基于阿里开源的 Cobar 产品而研发,Cobar 的稳定性、可靠性、优秀的架构和 性能以及众多成熟的使用案例使得 MyCat 变得非常的强大。

4.Haproxy+KeepAlived+Mycat结构图

3596429df06bcb20a5e617e72b5fbd6a.png

5.搭建 xinetd 服务

配置 MyCat 状态检查服务 在所有 MyCat(192.168.199.184/192.168.199.116)服务所在主机中增加状态检查服务脚 本。此操作为 HaProxy 提供对 MyCat 服务状态检查的依据。通过 xinetd,HAProxy 可以用 httpchk 来检测 Mycat 的存活状态。(xinetd 即 extended internet daemon,xinetd 是新一代的网络守护进程服务程序,又叫超级 Internet 服务器。经常用来管 理多种轻量级 Internet 服务。xinetd 提供类似于 inetd+tcp_wrapper 的功能,但是更加强大和 安全。xinetd 为 linux 系统的基础服务)

1.安装 xinetd

yum install -y xinetd

2.检查/etc/xinetd.conf 的末尾是否有 includedir /etc/xinetd.d ,没有就加上

vi /etc/xinetd.conf

e427e5428f78c56c3bc2f7a645e76216.png

3.创建/etc/xinetd.d 目录

检查 /etc/xinetd.d 目录是否存在,不存在则创建

mkdir /etc/xinetd.d/

4.增加 Mycat 存活状态检测服务配置

vi /etc/xinetd.d/mycat_status

service 

4e32afcccc8bd99536819087d317cc8c.png

说明:

service 

6.添加 /usr/local/bin/mycat_status 服务脚本

vi /usr/local/bin/mycat_status

!

6a1156a8316ac08d98127c9708b62bb3.png

7. 给新增脚本赋予可执行权限

chmod 755 /usr/local/bin/mycat_status

8.在 /etc/services 中加入 mycat_status 服务

vi /etc/services

在末尾加入:

mycat_status 48700/tcp # mycat_status

1347118ac92239959ec0271ada522677.png

保存后,重启 xinetd 服务 service xinetd restart

9.验证 mycat_status 服务是否成功启动

netstat -antup|grep 48700

84ca6d05714edccd832161521eb94420.png

10.测试脚本是否有效

/usr/local/bin/mycat_status

fe01bd855c677d71a1d153adc9ab12da.png

6.安装 HAProxy

1.上传 haproxy-1.7.1.tar.gz 到 Linux 并解压安装包

tar -zxf haproxy-1.7.1.tar.gz
2.安装编译依赖
yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
3.编译
cd haproxy-1.7.1
make TARGET=linux2628 ARCH=x86_64 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1
PREFIX=/usr/local/haproxy
注意:TARGET 是指定内核版本,高于 2.6.28 的建议设置为 linux2628,Linux 操作系统
内核版本查看命令# uname -r, ARCH 指定系统架构,openssl pcre zlib 这三个包需要安装不然不支持
4.创建安装目录
mkdir /usr/local/haproxy
5.执行安装
make install PREFIX=/usr/local/haproxy
6.创建配置文件目录
mkdir -p /usr/local/haproxy/conf
mkdir -p /etc/haproxy/
7.添加配置文件并创建软连接
vi /usr/local/haproxy/conf/haproxy.cfg

global

e4b75ceb7e2744a470f03cdd03ff3fa2.png

ln -s /usr/local/haproxy/conf/haproxy.cfg /etc/haproxy/haproxy.cfg

8.拷贝错误页面资源并创建软连接(可选)
cp -r /root/upload/haproxy-1.7.1/examples/errorfiles /usr/local/haproxy/
ln -s /usr/local/haproxy/errorfiles /etc/haproxy/errorfiles
9.拷贝开机启动文件,并赋予权限
cp /root/upload/haproxy-1.7.1/examples/haproxy.init /etc/rc.d/init.d/haproxy
chmod +x /etc/rc.d/init.d/haproxy
10.添加 HAProxy 命令脚本软连接
ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin
11.设置 HAProxy 开机启动
chkconfig --add haproxy
chkconfig haproxy on

HAProxy 配置 MyCat 负载均衡集群:

haproxy.cfg说明:

vi /usr/local/haproxy/conf/haproxy.cfg

## global 配置中的参数为进程级别的参数,通常与其运行的操作系统有关
global
log 127.0.0.1 local0 info ## 定义全局的 syslog 服务器,最多可以定义 2 个
### local0 是日志设备,对应于/etc/rsyslog.conf 中的配置,默认回收 info 的日志级别
#log 127.0.0.1 local1 info
chroot /usr/share/haproxy ## 修改 HAProxy 的工作目录至指定的目录并在放弃权限之前
执行
### chroot() 操作,可以提升 haproxy 的安全级别
group haproxy ## 同 gid,不过这里为指定的用户组名
user haproxy ## 同 uid,但这里使用的为用户名
daemon ## 设置 haproxy 后台守护进程形式运行
nbproc 1 ## 指定启动的 haproxy 进程个数,
### 只能用于守护进程模式的 haproxy;默认为止启动 1 个进程,
### 一般只在单进程仅能打开少数文件描述符的场中中才使用多进程模式
maxconn 4096 ## 设定每个 haproxy 进程所接受的最大并发连接数,
### 其等同于命令行选项"-n","ulimit-n"自动计算的结果正式参照从参数设定的
# pidfile /var/run/haproxy.pid ## 进程文件(默认路径 /var/run/haproxy.pid)
node haproxy1 ## 定义当前节点的名称,用于 HA 场景中多 haproxy 进程共享同一个 IP
地址时
description haproxy1 ## 当前实例的描述信息
## defaults:用于为所有其他配置段提供默认参数,这默认配置参数可由下一个"defaults" 所重新设定
defaults
log global ## 继承 global 中 log 的定义
mode http ## mode:所处理的模式 (tcp:四层 , http:七层 , health:状态检查,只会返回 OK)
### tcp: 实例运行于纯 tcp 模式,在客户端和服务器端之间将建立一个全双工的连接,
#### 且不会对 7 层报文做任何类型的检查,此为默认模式
### http:实例运行于 http 模式,客户端请求在转发至后端服务器之前将被深度分析,
#### 所有不与 RFC 模式兼容的请求都会被拒绝
### health:实例运行于 health 模式,其对入站请求仅响应“OK”信息并关闭连接,
#### 且不会记录任何日志信息 ,此模式将用于相应外部组件的监控状态检测请求
option httplog
retries 3
option redispatch ## serverId 对应的服务器挂掉后,强制定向到其他健康的服务器
maxconn 2000 ## 前端的最大并发连接数(默认为 2000)
### 其不能用于 backend 区段,对于大型站点来说,可以尽可能提高此值以便让 haproxy
管理连接队列,
### 从而避免无法应答用户请求。当然,此最大值不能超过“global”段中的定义。
### 此外,需要留心的是,haproxy 会为每个连接维持两个缓冲,每个缓存的大小为 8KB,
### 再加上其他的数据,每个连接将大约占用 17KB 的 RAM 空间,这意味着经过适当优
化后 ,
### 有着 1GB 的可用 RAM 空间时将维护 40000-50000 并发连接。
### 如果指定了一个过大值,极端场景中,其最终所占据的空间可能会超过当前主机的
可用内存,
### 这可能会带来意想不到的结果,因此,将其设定一个可接受值放为明智绝对,其默
认为 2000
timeout connect 5000ms ## 连接超时(默认是毫秒,单位可以设置 us,ms,s,m,h,d)
timeout client 50000ms ## 客户端超时
timeout server 50000ms ## 服务器超时
## HAProxy 的状态信息统计页面
listen admin_stats
bind :48800 ## 绑定端口
stats uri /admin-status ##统计页面
stats auth admin:admin ## 设置统计页面认证的用户和密码,如果要设置多个,另起一
行写入即可
mode http
option httplog ## 启用日志记录 HTTP 请求
## listen: 用于定义通过关联“前端”和“后端”一个完整的代理,通常只对 TCP 流量有用
listen mycat_servers
bind :3307 ## 绑定端口
mode tcp
option tcplog ## 记录 TCP 请求日志
option tcpka ## 是否允许向 server 和 client 发送 keepalive
option httpchk OPTIONS * HTTP/1.1rnHost: www ## 后端服务状态检测
### 向后端服务器的 48700 端口(端口值在后端服务器上通过 xinetd 配置)发送
OPTIONS 请求
### (原理请参考 HTTP 协议) ,HAProxy 会根据返回内容来判断后端服务是否可用. ### 2xx 和 3xx 的响应码表示健康状态,其他响应码或无响应表示服务器故障。
balance roundrobin ## 定义负载均衡算法,可用于"defaults"、"listen"和"backend"中,默
认为轮询方式
server mycat_01 192.168.199.184:8066 check port 48700 inter 2000ms rise 2 fall 3 weight
10
server mycat_02 192.168.199.116:8066 check port 48700 inter 2000ms rise 2 fall 3 weight
10
## 格式:server <name> <address>[:[port]] [param*]
### serser 在后端声明一个 server,只能用于 listen 和 backend 区段。
### <name>为此服务器指定的内部名称,其将会出现在日志及警告信息中
### <address>此服务器的 IPv4 地址,也支持使用可解析的主机名,但要在启动时需要
解析主机名至响应的 IPV4 地址
### [:[port]]指定将客户端连接请求发往此服务器时的目标端口,此为可选项
### [param*]为此 server 设定的一系列参数,均为可选项,参数比较多,下面仅说明几
个常用的参数:
#### weight:权重,默认为 1,最大值为 256,0 表示不参与负载均衡
#### backup:设定为备用服务器,仅在负载均衡场景中的其他 server 均不可以启用此
server
#### check:启动对此 server 执行监控状态检查,其可以借助于额外的其他参数完成更精
细的设定
#### inter:设定监控状态检查的时间间隔,单位为毫秒,默认为 2000,
##### 也可以使用 fastinter 和 downinter 来根据服务器端专题优化此事件延迟
#### rise:设置 server 从离线状态转换至正常状态需要检查的次数(不设置的情况下,默
认值为 2)
#### fall:设置 server 从正常状态转换至离线状态需要检查的次数(不设置的情况下,默
认值为 3)
#### cookie:为指定 server 设定 cookie 值,此处指定的值将会在请求入站时被检查,
##### 第一次为此值挑选的 server 将会被后续的请求所选中,其目的在于实现持久连接
的功能
#### maxconn:指定此服务器接受的最大并发连接数,如果发往此服务器的连接数目高
于此处指定的值,
#####其将被放置于请求队列,以等待其他连接被释放

注意:多节点部署时 node 、 description 的值要做相应调整

2.为 HAProxy 添加 Linux 系统用户

groupadd haproxy

useradd -g haproxy haproxy

3.创建 chroot 运行的路径

mkdir /usr/share/haproxy

4.开启 rsyslog 的 haproxy 日志记录功能

默认情况下 haproxy 是不记录日志的,如果需要记录日志,还需要配置系统的 syslog,
在 linux 系统中是 rsyslog 服务。syslog 服务器可以用作一个网络中的日志监控中心,rsyslog
是一个开源工具,被广泛用于 Linux 系统以通过 TCP/UDP 协议转发或接收日志消息。安装配
置 rsyslog 服务:
yum install -y rsyslog ## 没安装的情况下执行安装
vi /etc/rsyslog.conf

把 $ModLoad imudp 和 $UDPServerRun 514 前面的 # 去掉
$ModLoad imudp ## 是模块名,支持 UDP 协议
$UDPServerRun 514
##允许 514 端口接收使用 UDP 和 TCP 协议转发过来的日志,
##而 rsyslog 在默认情况下,正是在 514 端口监听 UDP
确认 #### GLOBAL DIRECTIVES #### 段中是否有 $IncludeConfig /etc/rsyslog.d/*.conf 没
有则增加上此配置。
rsyslog 服务会来此目录加载配置

b0158ce6f1837d20e81143a204a5d2b7.png

cd /etc/rsyslog.d/
创建 haproxy 的日志配置文件
vi /etc/rsyslog.d/haproxy.conf

local0.* /var/log/haproxy.log
&~

870df0ba04bb947e6aab30cf8d4e8236.png

注意:如果不加上面的的"&~"配置则除了在/var/log/haproxy.log 中写入日志外,也会 写入/var/log/message 文件中

配置保存后重启 rsyslog 服务 service rsyslog restart 等到 HAProxy 服务启动后,就能在/var/log/haproxy.log 中看到日志了

5.配置系统内核 IP 包转发规则

vi /etc/sysctl.conf

net.ipv4.ip_forward = 1

dd8f8aed29d57a2ead15f99fb2c68686.png

使配置生效

sysctl -p

6.启动 HAProxy

service haproxy start

ps -ef | grep haproxy

e842677ebd556358f0b98cf5687d17c8.png

查看 HAProxy 提供的 WEB 统计应用

http://192.168.199.157:48800/admin-status
http://192.168.199.102:48800/admin-status
用户名和密码都是 admin,参考/usr/local/haproxy/conf/haproxy.cfg 配置文件。
注意:安装完一个 HAProxy 之后,可以通过 mysql 命令控制台直接测试访问 HAProxy。
命令为:mysql -uroot -p123456 -h192.168.199.157 -P3307

7.安装 Keepalived

官网: http://www.keepalived.org/

1.上传 Keepalived 到 Linux 服务器

2.安装依赖

yum install -y curl gcc openssl-devel libnl3-devel net-snmp-deve

3.解压并安装

tar -zxf keepalived-1.2.18.tar.gz
cd keepalived-1.2.18

mkdir /usr/local/keepalived
./configure --prefix=/usr/local/keepalived
make && make install

4.将 Keepalived 安装成 Linux 系统服务

因为没有使用 keepalived 的默认路径安装(默认是/usr/local) ,安装完成之后,需要做
一些工作复制默认配置文件到默认路径
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
复制 keepalived 服务脚本到默认的地址
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
设置 keepalived 服务开机启动
chkconfig keepalived on

5.修改 Keepalived 配置文件

5.1修改 haproxy1 服务器中的配置文件

vi /usr/local/keepalived/etc/keepalived/keepalived.conf
vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {router_id haproxy1
}
vrrp_script chk_haproxy {script "/etc/keepalived/haproxy_check.sh"interval 2weight 2
}
vrrp_instance VI_1 {state BACKUP interface eth0 virtual_router_id 35 priority 120nopreempt advert_int 1 authentication {auth_type PASSauth_pass 1111 }track_script {chk_haproxy}virtual_ipaddress {192.168.199.190}
}

5dfa65484aacaab3e54f509f69796896.png

说明:

! Configuration File for keepalived
global_defs {
## keepalived 自带的邮件提醒需要开启 sendmail 服务。建议用独立的监控或第三方
SMTP
router_id haproxy1 ## 标识本节点的字符串,通常为 hostname,需要修改/etc/hosts
}
## keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance
的优先级。
## 如果脚本执行结果为 0,并且 weight 配置的值大于 0,则优先级相应的增加。
## 如果脚本执行结果非 0,并且 weight 配置的值小于 0,则优先级相应的减少。
## 其他情况,维持原本配置的优先级,即配置文件中 priority 对应的值。
vrrp_script chk_haproxy {
script "/etc/keepalived/haproxy_check.sh" ## 检测 haproxy 状态的脚本路径
interval 2 ## 检测时间间隔
weight 2 ## 如果条件成立,权重+2
}
## 定义虚拟路由, VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
state BACKUP ## 默认主设备(priority 值大的)和备用设备(priority 值小的)都
设置为 BACKUP,
## 由 priority 来控制同时启动情况下的默认主备,否则先启动的为主设备
interface eth0 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同,
我的是 eth0
virtual_router_id 35 ## 虚拟路由的 ID 号,两个节点设置必须一样,可选 IP 最后
一段使用,## 相同的 VRID 为一个组,他将决定多播的 MAC 地址
priority 120 ## 节点优先级,值范围 0-254, MASTER 要比 BACKUP 高
nopreempt ## 主设备(priority 值大的)配置一定要加上 nopreempt,否则非抢占
也不起作用
advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样,默认 1s
## 设置验证信息,两个节点必须一致
authentication {
auth_type PASS
auth_pass 1111 ## 真实生产,按需求对应该过来
}
## 将 track_script 块加入 instance 配置块
track_script {
chk_haproxy ## 检查 HAProxy 服务是否存活
}
## 虚拟 IP 池, 两个节点设置必须一样
virtual_ipaddress {
192.168.199.190 ## 虚拟 ip,可以定义多个,每行一个
}
}

5.2修改 haproxy2 服务器中的配置文件

vi /usr/local/keepalived/etc/keepalived/keepalived.conf
vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {router_id haproxy2
}
vrrp_script chk_haproxy {script "/etc/keepalived/haproxy_check.sh"interval 2weight 2
}
vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 35priority 110advert_int 1authentication {auth_type PASSauth_pass 1111}track_script {chk_haproxy}virtual_ipaddress {192.168.199.190}
}

注意: 如果非抢占模式不生效, 在 Keepalived 的故障节点恢复后会再次导抢占
vip,从而因 vip 切换而闪断带来的风险(视频解说)。 按以上配置,配置了 Keepalived 非
抢占模式, 配置及注意点如下:
(1) 主设备、 从设备中的 state 都设置为 BACKUP
(2) 主设备、从设备中都不要配置 mcast_src_ip (本机 IP 地址)
(3) 默认主设备(priority 值大的 Keepalived 节点) 配置一定要加上 nopreempt,否
则非抢占不起作用
(4) 防火墙配置允许组播(主、备两台设备上都需要配置, keepalived 使用 224.0.0.18
作为 Master 和 Backup 健康检查的通信 IP)

6.提供 HAProxy 状态检查脚本

如果 haproxy 停止运行,尝试启动,如果无法启动则杀死本机的 keepalived 进 程,keepalied 将虚拟 ip 绑定到 BACKUP 机器上。

mkdir -p /usr/local/keepalived/log
vi /etc/keepalived/haproxy_check.sh

#!/bin/bash
START_HAPROXY="/etc/rc.d/init.d/haproxy start" STOP_HAPROXY="/etc/rc.d/init.d/haproxy stop"LOG_FILE="/usr/local/keepalived/log/haproxy-check.log" HAPS=`ps -C haproxy --no-header |wc -l` date "+%Y-%m-%d %H:%M:%S" >> $LOG_FILE
echo "check haproxy status" >> $LOG_FILE
if [ $HAPS -eq 0 ];then
echo $START_HAPROXY >> $LOG_FILE
$START_HAPROXY >> $LOG_FILE 2>&1
sleep 3
if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
echo "start haproxy failed, killall keepalived" >> $LOG_FILE
killall keepalived
fi
fi

300204ebaa591ceef4e23ccaa73e1389.png

chmod +x /etc/keepalived/haproxy_check.sh

7.启动 Keepalived

service keepalived start

关闭后,Keepalived 会自动启动 HAProxy。
关闭 Keepalived 命令 : service haproxy stop
查看 vip 命令: ip add
查看进程命令: ps -ef | grep haproxy

b7f80113808f58da3fe973cc09c17881.png

通过 VIP 访问 MYSQL:

e955d30d7894e37389140fc029142ded.png

8.MyCat 配置数据库集群

fc6e02053d19dda12843a48cbbd106d0.png

数据库集群负载策略:

第一种配置方案:

schema.xml

<?xml version="1.0"?>

缺陷:可能有 IO 延迟问题。

d1fb5075c9bc49dcf37204299f5ca87c.png

第二种配置方案:

<?xml version="1.0"?>

属性说明:

1.balance 属性
balance=”0”, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上
balance=”1”,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡
balance=”2”,所有读操作都随机的在 writeHost、 readhost 上分发。
balance=”3”, 所有读请求随机的分发到 writeHost 对应的 readhost 执行,writerHost
不负担读压力
2 writeType 属性
writeType=”0”, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第
二个 writeHost,重新启动后已切换后的为准,切换记录在配置文件中:conf/dnindex.properties
(datanode index)
writeType=”1”,所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐
3 switchType 属性
也涉及到读写分离问题,可以解决 IO 延迟问题。
switchType='-1' 表示不自动切换
switchType='1' 默认值,表示自动切换
switchType='2' 基于 MySQL 主从同步的状态决定是否切换读写主机,心跳语句为 show
slave status。 当心跳监测获取的数据发现了 IO 的延迟,则读操作自动定位到 writeHost
中。如果心跳监测获取的数据没有 IO 延迟,则读操作自动定位到 readHost 中。建议为
不同的表格定位不同的 dataHost 节点。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IO与NIO

1、阻塞与非阻塞 阻塞与非阻塞是描述进程在访问某个资源时&#xff0c;数据是否准备就绪的的一种处理方式。当数据没有准备就绪时&#xff1a; 阻塞&#xff1a;线程持续等待资源中数据准备完成&#xff0c;直到返回响应结果。非阻塞&#xff1a;线程直接返回结果&#xff0c…

java spark wordcount_提交任务到spark(以wordcount为例)

1、首先需要搭建好hadoopspark环境&#xff0c;并保证服务正常。本文以wordcount为例。2、创建源文件&#xff0c;即输入源。hello.txt文件&#xff0c;内容如下&#xff1a;tom jerryhenry jimsuse lusy注&#xff1a;以空格为分隔符3、然后执行如下命令&#xff1a;hadoop fs…

redis的四大特性和原理

一、redis的过期 A.应用场景 cookie自动过期&#xff0c;限时优惠价格&#xff0c;限制每分钟的访问次数 B.实现方式 setex(String key, int seconds, String value) expire key time #秒 pexpire key time #毫秒 expireat key time #秒 pexpireat key time #毫秒 C.实…

默认文献工具_工具分享??超好用的SCI外文文献下载工具

第一步&#xff1a;打开工具第二步&#xff1a;查找目标文献的DOI号&#xff08;知网、谷歌学术等等...&#xff09;&#xff0c;然后复制。第三步&#xff1a;粘贴到工具里面&#xff0c;然后点击「立即下载」第四步&#xff1a;点击立即下载之后&#xff0c;会自动打开默认浏…

Redis之Redis的事务

1.Redis的事务是什么 Redis 事务的本质是一组命令的集合,事务支持一次执行多个命令&#xff0c;一个事务中所有命令都会被序列化。(redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令). 1.1reids事务的特点 事务同命令一样都是Redis最小的执行单位&#xff0…

idea 设置内存_IDEA新特性:提前知道代码怎么走!

作者&#xff1a;简简单单OnlineZuozuo原文链接&#xff1a;https://blog.csdn.net/qq_15071263/article/details/104186309新特性IDEA - 2020.1 版本针对调试器和代码分析器的改进&#xff0c;值得期待1、对于调试器的加强&#xff1a;数据流分析辅助2、调试加强&#xff1a;属…

Redis的内部运作机制——Redis详解

本文将分五个部分来分析和总结Redis的内部机制&#xff0c;分别是&#xff1a;Redis数据库、Redis客户端、Redis事件、Redis服务器的初始化步骤、Redis命令的执行过程。 首先介绍一下Redis服务器的状态结构。Redis使用一个类型为“redisServer”的数据结构来保存整个Redis服务…

selenium之 chromedriver与chrome版本映射表_NLP实战篇之tf2训练与评估

本文是基于tensorflow2.2.0版本&#xff0c;介绍了模型的训练与评估。主要介绍了tf.keras的内置训练过程&#xff0c;包括compile、fit&#xff0c;其中compile中包含优化器、loss与metrics的使用&#xff0c;内置api中还包含了很多辅助工具&#xff0c;在Callback中进行介绍&a…

java会被rust替代吗_自从尝了 Rust,Java 突然不香了

Rust 是软件行业中相对而言比较新的一门编程语言&#xff0c;如果从语法上来比较&#xff0c;该语言与 C 其实非常类似&#xff0c;但从另一方面而言&#xff0c;Rust 能更高效地提供许多功能来保证性能和安全。而且&#xff0c;Rust 还能在无需使用传统的垃圾收集系统的情况下…

redis单线程原理___Redis为何那么快-----底层原理浅析

redis单线程原理 redis单线程问题 单线程指的是网络请求模块使用了一个线程&#xff08;所以不需考虑并发安全性&#xff09;&#xff0c;即一个线程处理所有网络请求&#xff0c;其他模块仍用了多个线程。 1. 为什么说redis能够快速执行 (1) 绝大部分请求是纯粹的内存操作…

asm 查看 数据文件 修改 时间_Oracle的ASM介绍及管理

Oracle的ASM介绍及管理Oracle经历过的文件系统历史操作系统--逻辑卷管理器(LVM)&#xff1a;管理文件相对容易&#xff0c;性能较差裸设备:管理文件相对困难&#xff0c;性能好OCFS(Oracle Cluster File System)&#xff1a;是ORACLE数据库文件系统ASM(Automatic Storage Manag…

深入理解 Redis Template及4种序列化方式__spring boot整合redis实现RedisTemplate三分钟快速入门

概述 使用Spring 提供的 Spring Data Redis 操作redis 必然要使用Spring提供的模板类 RedisTemplate&#xff0c; 今天我们好好的看看这个模板类 。 RedisTemplate 看看4个序列化相关的属性 &#xff0c;主要是 用于 KEY 和 VALUE 的序列化 。 举个例子&#xff0c;比如说我们…

java仿聊天室项目总结_Java团队课程设计-socket聊天室(Day4总结篇)

Java团队课程设计-socket聊天室(Day4总结篇)团队名称&#xff1a;ChatRoom项目git地址&#xff1a;git提交记录(仅截取部分)&#xff1a;面向对象设计包图、类图包图UML类图总结&#xff1a;首先总结一下这几天遇到的问题和解决方案使用ObjectInputStream/ObjectOutputStream的…

python基础代码技巧_Python 代码优化技巧(二)

Python 是一种脚本语言&#xff0c;相比 C/C 这样的编译语言&#xff0c;在效率和性能方面存在一些不足&#xff0c;但是可以通过代码调整来提高代码的执行效率。本文整理一些代码优化技巧。 代码优化基本原则代码正常运行后优化。 很多人一开始写代码就奔着性能优化的目标&…

rpm 讲解

CentOS7主要有rpm和yum这两种包软件的管理。两种包的管理各有用处&#xff0c;其中主要区别是&#xff1a;YUM使用简单但需要联网&#xff0c;YUM会去网上的YUM包源去获取所需要的软件包。而RPM的需要的操作经度比较细&#xff0c;需要我们做的事情比较多。 软件包的安装和卸是…

java顺序表冒泡排序_冒泡排序就这么简单 - Java3y的个人空间 - OSCHINA - 中文开源技术交流社区...

冒泡排序就这么简单在我大一的时候自学c语言和数据结构&#xff0c;我当时就接触到了冒泡排序(当时使用的是C语言编写的)。现在大三了&#xff0c;想要在暑假找到一份实习的工作&#xff0c;又要回顾一下数据结构与算法的知识点了。排序对我们来说是一点也不陌生了&#xff0c;…

python 多线程和协程结合_如何让 python 处理速度翻倍?内含代码

阿里妹导读&#xff1a;作为在日常开发生产中非常实用的语言&#xff0c;有必要掌握一些python用法&#xff0c;比如爬虫、网络请求等场景&#xff0c;很是实用。但python是单线程的&#xff0c;如何提高python的处理速度&#xff0c;是一个很重要的问题&#xff0c;这个问题的…

python批量生成图_利用Python批量生成任意尺寸的图片

实现效果 通过源图片&#xff0c;在当前工作目录的/img目录下生成1000张&#xff0c;分别从1*1到1000*1000像素的图片。 效果如下&#xff1a;目录结构 实现示例 # -*- coding: utf-8 -*- import threading from PIL import Image image_size range(1, 1001) def start(): for…

Mysql 如果有多个可选条件怎么加索引_MySQL|mysql-索引

1、索引是什么 1.1索引简介 索引是表的目录&#xff0c;是数据库中专门用于帮助用户快速查询数据的一种数据结构。类似于字典中的目录&#xff0c;查找字典内容时可以根据目录查找到数据的存放位置&#xff0c;以及快速定位查询数据。对于索引&#xff0c;会保存在额外的文件…

Spring-bean的循环依赖以及解决方式___Spring源码初探--Bean的初始化-循环依赖的解决

本文主要是分析Spring bean的循环依赖&#xff0c;以及Spring的解决方式。 通过这种解决方式&#xff0c;我们可以应用在我们实际开发项目中。 什么是循环依赖&#xff1f;怎么检测循环依赖Spring怎么解决循环依赖Spring对于循环依赖无法解决的场景Spring解决循环依赖的方式我们…