高性能内存对象缓存Memcached原理与部署
目录
一:Memcached
1:Memcached的概述
2:数据存储方式与数据过期方式
(1)数据存储方式:Slab Allocation
(2)数据过期方式:LRU、Laxzy Expiration
3.Memcached 缓存机制
4.Memcached 分布式
5.Memcached 路由算法
(1)求余数 hash 算法
(2)一致性 hash 算法
二,单memcached节点缓存系统
1:设置各节点的主机名:192.168.10.101
2:安装libevent-2.1.8-stable.tar.gz
3:安装memcached-1.5.1.tar.gz
4:设置Memcached服务脚本
5:在103主机安装gcc*,httpd,mariadb,mariadb-server,php,php-devel,php-mysql
6:测试服务是否正常
7:安装 libmemcached-1.0.18.tar.gz
8:安装 memcached-2.2.0.tgz
9:添加模块
10:查看模块是否存在
11:测试
12:连接Memcached
13:Memcached命令
三,Memcached 实现主主复制和高可用的方式
1:设置各节点的主机名:192.168.10.101
2:关闭防火墙
3:安装开发环境
4:安装 libevent-2.1.8-stable.tar.gz
5:安装 memcached-1.2.8-repcached-2.2.tar.gz
6:做个函数链接
7:在101启动memcached并连接102
8:在102启动memcached并连接101
9:测试102和101是否同步
10:下载keepalived并修改配置
11:查看是否配置成功
12 :修改103客户端连接mamcached的ip
13:测试故障切换
一:Memcached
1:Memcached的概述
- 一套开源的高性能的分布式内存对象缓存系统
- 所有的数据都存储在内存中
- 支持任意存储类型的数据
- 提高网站的访问速度
2:数据存储方式与数据过期方式
(1)数据存储方式:Slab Allocation
按组分配内存,每次先分配一个Slab,相当于一个大小为1m的页然后在1M的空间里根据数据划分大小相同的Chunk
(2)数据过期方式:LRU、Laxzy Expiration
LRU 和 Laxzy Expiration 是数据过期的两种方式。
LUR 是指追加的数据空间不足时,会根据LRU的情况淘汰最近最少使用的记录。Laxzy Expiration 即惰性过期,是指使用 get 时查看记录时间,从而检查记录是否已经过期。
3.Memcached 缓存机制
缓存是常驻在内存的数据,能够快速进行读取,而Memcached 就是这样一款非常出色的缓存软件。当程序写入缓存数据请求时,Memcached 的API接口将 Key 输入路由算法模块并路由到集群中的一台服务器,之后由API接口与服务器进行通信,完成一次分布式缓存写入,如图 所示。
4.Memcached 分布式
Memcached 分布式部署主要依赖于Memcached的客户来端实现,多个Memcached 服务器是独立的。分布式数据如何存储是由路由算法所决定。当数据到达客户端程序库,客户端的算法就依据路由算法来决定保存的Memcached 服务器。读取数据时,客户端依据使用保存数据时相同的路由算法选中和存储数据时相同的服务器来读取数据,如图所示。
5.Memcached 路由算法
(1)求余数 hash 算法
求余数 hash 算法先用 key 做 hash 运算得到一个整数,再去做 hash 算法,根据余数进行路由,这种算法适合大多数据需求。但是不适合用在动态变化的环境中,比如有大量机器添加或者删除,这样会导致大量的对象存储位置失效。
(2)一致性 hash 算法
一致性 hash 算法适合在动态变化的环境中使用。原理是按照 hash 算法把对应的 key 通过一定的 hash 算法处理后映射形成一个首尾相接闭合循环,然后通过使用与对象存储一样的hash算法将机器也映射到环中,顺时针方向计算将所有对象存储到离自己最近的机器中,如图所示。
案例一
二,单memcached节点缓存系统
1:设置各节点的主机名:192.168.10.101
[root@localhost ~]# hostnamectl set-hostname Memcache1
[root@localhost ~]# bash
主机:192.168.10.103
[root@localhost ~]# hostnamectl set-hostname Memcached-API
[root@localhost ~]# bash
2:安装libevent-2.1.8-stable.tar.gz
[root@memcache1 ~]# ll
总用量 1008
-rw-------. 1 root root 1603 5月 28 01:57 anaconda-ks.cfg
-rw-r--r--. 1 root root 1026485 8月 19 2019 libevent-2.1.8-stable.tar.gz
[root@memcache1 ~]# tar -zxvf libevent-2.1.8-stable.tar.gz
[root@memcache1 ~]# yum -y install gcc*
[root@memcache1 ~]# cd libevent-2.1.8-stable
[root@memcache1 libevent-2.1.8-stable]# ./configure --prefix=/usr/local/libevent
[root@memcache1 libevent-2.1.8-stable]# make && make install
3:安装memcached-1.5.1.tar.gz
[root@memcache1 ~]# ll
总用量 1420
-rw-------. 1 root root 1603 5月 28 01:57 anaconda-ks.cfg
drwxr-xr-x. 10 1000 1000 8192 8月 15 20:18 libevent-2.1.8-stable
-rw-r--r--. 1 root root 1026485 8月 19 2019 libevent-2.1.8-stable.tar.gz
-rw-r--r--. 1 root root 407282 8月 19 2019 memcached-1.5.1.tar.gz
[root@memcache1 ~]# tar -zxvf memcached-1.5.1.tar.gz
[root@memcache1 ~]# cd memcached-1.5.1
[root@memcache1 memcached-1.5.1]# ./configure --prefix=/usr/local/memcached
--with-libevent=/usr/local/libevent/
[root@memcache1 memcached-1.5.1]# make && make install
4:设置Memcached服务脚本
root@memcache1 ~]# vim memcached_service.sh
#!/bin/bash
CMD="/usr/local/memcached/bin/memcached"
start(){$CMD -d -m 128 -u root
}
stop(){killall memcached;
}ACTION=$1case $ACTION in'start')start;;'stop')stop;;
'restart')stopsleep 2start;;
*)echo 'Usage:{start|stop|restart}'
esac
[root@memcache1 ~]# chmod +x memcached_service.sh
[root@memcache1 ~]# ./memcached_service.sh start
[root@memcache1 ~]# netstat -anpt | grep memcached
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 10144/memcached
tcp6 0 0 :::11211 :::* LISTEN 10144/memcached
[root@memcache1 ~]#
5:在103主机安装gcc*,httpd,mariadb,mariadb-server,php,php-devel,php-mysql
[root@memcached-api ~]# yum -y install gcc*
[root@memcached-api ~]# rm -rf /etc/yum.repos.d/*
[root@memcached-api ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed
100 2523 100 2523 0 0 444 0 0:00:05 0:00:05 --:--:-- 606
[root@memcached-api ~]# curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed
100 664 100 664 0 0 3058 0 --:--:-- --:--:-- --:--:-- 3059
[root@memcached-api ~]# yum clean all
已加载插件:fastestmirror
正在清理软件源: base epel extras updates
Cleaning up list of fastest mirrors
Other repos take up 39 M of disk space (use --verbose for details)
[root@memcached-api ~]# yum -y install httpd mariadb mariadb-server php php-devel php-mysql
6:测试服务是否正常
[root@memcached-api ~]# systemctl start mariadb
[root@memcached-api ~]# mysqladmin -uroot password 'pwd123'
[root@memcached-api ~]# systemctl start httpd
[root@memcached-api ~]# systemctl stop firewalld
[root@memcached-api ~]# setenforce 0
[root@memcached-api ~]# cd /var/www/html/[root@memcached-api html]# vim test1.php
<?php
phpinfo()
?>
用浏览器访问看看是否能够访问到
7:安装 libmemcached-1.0.18.tar.gz
[root@memcached-api ~]# ll
总用量 1024
-rw-------. 1 root root 1603 5月 28 01:57 anaconda-ks.cfg
drwxr-xr-x. 24 800 800 4096 8月 15 20:59 libmemcached-1.0.18
-rw-r--r--. 1 root root 1039649 8月 24 2018 libmemcached-1.0.18.tar.gz
[root@memcached-api ~]# tar -zxvf libmemcached-1.0.18.tar.gz
[root@memcached-api ~]# cd libmemcached-1.0.18
[root@memcached-api libmemcached-1.0.18]# ./configure --prefix=/usr/local/libmemcached
--with-memcached=/usr/local/memcached
[root@memcached-api libmemcached-1.0.18]# make && make install
8:安装 memcached-2.2.0.tgz
[root@memcached-api ~]# ll
总用量 1096
-rw-------. 1 root root 1603 5月 28 01:57 anaconda-ks.cfg
drwxr-xr-x. 24 800 800 4096 8月 15 20:59 libmemcached-1.0.18
-rw-r--r--. 1 root root 1039649 8月 24 2018 libmemcached-1.0.18.tar.gz
-rw-r--r--. 1 root root 70449 8月 19 2019 memcached-2.2.0.tgz
[root@memcached-api ~]# tar -zxvf memcached-2.2.0.tgz
[root@memcached-api ~]# cd memcached-2.2.0
[root@memcached-api memcached-2.2.0]# ll
总用量 268
-rw-r--r--. 1 501 games 5720 4月 1 2014 ChangeLog
-rw-r--r--. 1 501 games 14595 4月 1 2014 config.m4
-rw-r--r--. 1 501 games 532 4月 1 2014 config.w32
-rw-r--r--. 1 501 games 59 4月 1 2014 CREDITS
drwxr-xr-x. 2 root root 53 8月 15 21:02 fastlz
-rw-r--r--. 1 501 games 2297 4月 1 2014 g_fmt.c
-rw-r--r--. 1 501 games 1181 4月 1 2014 g_fmt.h
-rw-r--r--. 1 501 games 3218 4月 1 2014 LICENSE
-rw-r--r--. 1 501 games 5770 4月 1 2014 memcached-api.php
-rw-r--r--. 1 501 games 4067 4月 1 2014 memcached.ini
-rw-r--r--. 1 501 games 1649 4月 1 2014 php_libmemcached_compat.c
-rw-r--r--. 1 501 games 2330 4月 1 2014 php_libmemcached_compat.h
-rw-r--r--. 1 501 games 138353 4月 1 2014 php_memcached.c
-rw-r--r--. 1 501 games 1810 4月 1 2014 php_memcached.h
-rw-r--r--. 1 501 games 5269 4月 1 2014 php_memcached_private.h
-rw-r--r--. 1 501 games 24437 4月 1 2014 php_memcached_server.c
-rw-r--r--. 1 501 games 1471 4月 1 2014 php_memcached_server.h
-rw-r--r--. 1 501 games 12543 4月 1 2014 php_memcached_session.c
-rw-r--r--. 1 501 games 1407 4月 1 2014 php_memcached_session.h
-rw-r--r--. 1 501 games 730 4月 1 2014 README.markdown
drwxr-xr-x. 2 root root 4096 8月 15 21:02 tests
[root@memcached-api memcached-2.2.0]# php
php php-cgi php-config phpize
[root@memcached-api memcached-2.2.0]# phpize
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
[root@memcached-api memcached-2.2.0]# ls
acinclude.m4 config.sub install-sh php_libmemcached_compat.c php_memcached_session.h
aclocal.m4 configure LICENSE php_libmemcached_compat.h README.markdown
autom4te.cache configure.in ltmain.sh php_memcached.c run-tests.php
build config.w32 Makefile.global php_memcached.h tests
ChangeLog CREDITS memcached-api.php php_memcached_private.h
config.guess fastlz memcached.ini php_memcached_server.c
config.h.in g_fmt.c missing php_memcached_server.h
config.m4 g_fmt.h mkinstalldirs php_memcached_session.c[root@memcached-api memcached-2.2.0]# yum -y install zlib zlib-devel
[root@memcached-api memcached-2.2.0]# ./configure
--with-php-config=/usr/bin/php-config
--with-libmemcached-dir=/usr/local/libmemcached/
--disable-memcached-sasl
--with-zlib-dir[root@memcached-api memcached-2.2.0]# make[root@memcached-api memcached-2.2.0]# make install
Installing shared extensions: /usr/lib64/php/modules/
9:添加模块
10:查看模块是否存在
[root@memcached-api memcached-2.2.0]# systemctl restart httpd
11:测试
[root@memcached-api memcached-2.2.0]# cd /var/www/html/
[root@memcached-api html]# vim test2.php
<?php
$memcache = new Memcached();
$memcache->addServer('192.168.10.101', 11211);
$memcache->set('key', 'Memcache test successful!', 0, 60);
$result = $memcache->get('key');
unset($memcache);
echo $result;
?>
12:连接Memcached
[root@memcache1 ~]# yum -y install telnet
[root@memcache1 ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get key
VALUE key 3932160 25
Memcache test successful! //刚刚浏览器访问的那句话
END
13:Memcached命令
命令 | 描述 | 实例 |
set | 添加或更新一个键值对。如果键已存在,则更新其值;如果不存在,则添加新键值对。 | set mykey 0 0 5hello |
add | 仅当键不存在时添加新键值对。如果键已存在,则操作失败。 | add newkey 0 0 5world |
replace | 仅当键已存在时替换其值。如果键不存在,则操作失败。 | replace mykey 0 0 6hello2 |
get | 检索一个或多个键的值。如果键存在,则返回其值;如果不存在,则不返回任何内容。 | get mykey |
delete | 删除一个键值对。如果键存在,则删除;如果不存在,则操作失败。 | delete mykey |
incr | 对一个数值键的值进行自增操作。仅当键存在且其值为整数时有效。 | incr counter(假设counter键已存在且值为1,执行后变为2) |
decr | 对一个数值键的值进行自减操作。同样,仅当键存在且其值为整数时有效。 | decr counter(假设counter键已存在且值为2,执行后变为1) |
stats | 显示Memcached服务器的状态信息,如命中率、连接数、内存使用等。 | stats |
stats reset | 重置Memcached服务器的统计信息。 | stats reset |
stats slabs | 显示各个slab(内存分配区域)的详细信息,包括chunk大小、使用情况等。 | stats slabs |
stats items | 显示各个slab中item的数目和最老item的年龄。 | stats items |
stats cachedump | 显示指定slab中的部分或全部键值对列表。 | stats cachedump 1 100(显示slab 1中的前100个键值对) |
flush_all | 删除Memcached中的所有键值对。可以配置是否立即生效或延迟一段时间。 | flush_all或flush_all 120(延迟120秒删除) |
version | 显示Memcached服务器的版本信息。 | version |
quit | 退出Memcached的telnet会话(如果通过telnet连接)。 | quit |
三,Memcached 实现主主复制和高可用的方式
1:设置各节点的主机名:192.168.10.101
[root@localhost ~]# hostnamectl set-hostname Memcache1
[root@localhost ~]# bash
主机:192.168.10.102
[root@localhost ~]# hostnamectl set-hostname Memcache2
[root@localhost ~]# bash
注意101和102配置一样可以一起做
2:关闭防火墙
[root@memcache1 ~]# systemctl stop firewalld
[root@memcache1 ~]# setenforce 0
3:安装开发环境
[root@memcache1 ~]# yum -y install gcc*
4:安装 libevent-2.1.8-stable.tar.gz
[root@memcache1 ~]# tar -zxvf libevent-2.1.8-stable.tar.gz
[root@memcache1 ~]# cd libevent-2.1.8-stable
[root@memcache1 libevent-2.1.8-stable]# ./configure --prefix=/usr/local/libevent
[root@memcache1 libevent-2.1.8-stable]# make && make install
5:安装 memcached-1.2.8-repcached-2.2.tar.gz
[root@memcache1 ~]# tar -zxvf memcached-1.2.8-repcached-2.2.tar.gz
[root@memcache1 ~]# cd memcached-1.2.8-repcached-2.2
[root@memcache1 memcached-1.2.8-repcached-2.2]# ./configure --prefix=/usr/local/memcached_replication
--enable-replication
--with-libevent=/usr/local/libevent/
[root@memcache1 memcached-1.2.8-repcached-2.2]# vim memcached.c
[root@memcache1 memcached-1.2.8-repcached-2.2]# make && make install
注意先修改memcached.c再make
6:做个函数链接
[root@memcache1 memcached-1.2.8-repcached-2.2]# ln -s /usr/local/libevent/lib/libevent-2.1.so.6 /usr/lib64
注意下面101和102不在同步
7:在101启动memcached并连接102
[root@memcache1 memcached-1.2.8-repcached-2.2]# /usr/local/memcached_replication/bin/memcached -d -u root -m 128 -x 192.168.10.102
[root@memcache1 memcached-1.2.8-repcached-2.2]# netstat -anpt | grep memcached
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 10112/memcached
tcp 0 0 192.168.10.101:51294 192.168.10.102:11212 ESTABLISHED 10112/memcached
tcp6 0 0 :::11211 :::* LISTEN 10112/memcached
8:在102启动memcached并连接101
[root@memcache2 memcached-1.2.8-repcached-2.2]# /usr/local/memcached_replication/bin/memcached -d -u root -m 128 -x 192.168.10.101
[root@memcache2 memcached-1.2.8-repcached-2.2]# netstat -anpt | grep memcached
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 10225/memcached
tcp 0 0 192.168.10.102:60506 192.168.10.101:11212 ESTABLISHED 10225/memcached
tcp6 0 0 :::11211 :::* LISTEN 10225/memcached
9:测试102和101是否同步
[root@memcache1 memcached-1.2.8-repcached-2.2]# yum -y install telnet
[root@memcache1 memcached-1.2.8-repcached-2.2]# telnet 192.168.10.101 11211
Trying 192.168.10.101...
Connected to 192.168.10.101.
Escape character is '^]'.
set username 0 0 8
zhangsan
STORED
get username
VALUE username 0 8
zhangsan
END
quit
Connection closed by foreign host.
[root@memcache1 memcached-1.2.8-repcached-2.2]# telnet 192.168.10.102 11211
Trying 192.168.10.102...
Connected to 192.168.10.102.
Escape character is '^]'.
get username
VALUE username 0 8
zhangsan
END
10:下载keepalived并修改配置
101
[root@memcache1 ~]# yum -y install keepalived! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_01vrrp_skip_check_adv_addr
# vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script check_down {script "/etc/keepalived/memcached.sh"interval 1}
vrrp_instance VI_1 {state BACKUPnopreemptinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.240}track_script {check_down}}
[root@memcache1 ~]# cd /etc/keepalived/
[root@memcache1 keepalived]# vim memcached.sh
#!/bin/bash
#!/bin/bash
#
if [ $(ps -C memcached --no-header | wc -l) -eq 0 ]; thensystemctl stop keepalived
fi
[root@memcache1 keepalived]# systemctl stop NetworkManager
[root@memcache1 keepalived]# systemctl start keepalived
102
[root@memcache1 ~]# yum -y install keepalived! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_02vrrp_skip_check_adv_addr
# vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}
vrrp_script check_down {script "/etc/keepalived/memcached.sh"interval 1}
vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.240}track_script {check_down}}
[root@memcache1 ~]# cd /etc/keepalived/
[root@memcache1 keepalived]# vim memcached.sh
#!/bin/bash
#!/bin/bash
#
if [ $(ps -C memcached --no-header | wc -l) -eq 0 ]; thensystemctl stop keepalived
fi
[root@memcache1 keepalived]# systemctl stop NetworkManager
[root@memcache1 keepalived]# systemctl start keepalived
11:查看是否配置成功
[root@memcache1 keepalived]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:90:61:c1 brd ff:ff:ff:ff:ff:ffinet 192.168.10.101/24 brd 192.168.10.255 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.10.240/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::2f4c:60b5:64be:bc1f/64 scope link noprefixroute valid_lft forever preferred_lft forever
[root@memcache1 keepalived]# ip a
12 :修改103客户端连接mamcached的ip
[root@memcached-api ~]# cd /var/www/html/
[root@memcached-api html]# vim test2.php
[root@memcached-api html]# <?php
$memcache = new Memcached();
$memcache->addServer('192.168.10.240', 11211);
$memcache->set('key', 'Memcache test successful!', 0, 60);
$result = $memcache->get('key');
unset($memcache);
echo $result;
?>
13:测试故障切换
101
[root@memcache1 keepalived]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:90:61:c1 brd ff:ff:ff:ff:ff:ffinet 192.168.10.101/24 brd 192.168.10.255 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.10.240/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::2f4c:60b5:64be:bc1f/64 scope link noprefixroute valid_lft forever preferred_lft forever
[root@memcache1 keepalived]# pkill memcached
[root@memcache1 keepalived]# netstat -anpt | grep memcached
[root@memcache1 keepalived]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:90:61:c1 brd ff:ff:ff:ff:ff:ffinet 192.168.10.101/24 brd 192.168.10.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::2f4c:60b5:64be:bc1f/64 scope link noprefixroute valid_lft forever preferred_lft forever
[root@memcache1 keepalived]#
102
[root@memcache2 keepalived]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:8f:4c:a4 brd ff:ff:ff:ff:ff:ffinet 192.168.10.102/24 brd 192.168.10.255 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.10.240/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::2f4c:60b5:64be:bc1f/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft foreverinet6 fe80::9525:f940:b201:bb12/64 scope link noprefixroute valid_lft forever preferred_lft forever
[root@memcache2 keepalived]# netstat -anpt | grep memcached
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 10225/memcached
tcp 0 0 192.168.10.102:60506 192.168.10.101:11212 ESTABLISHED 10225/memcached
tcp6 0 0 :::11211 :::* LISTEN 10225/memcached 10225/memcached
[root@memcache2 keepalived]#
相关文章:

高性能内存对象缓存Memcached原理与部署
目录 一:Memcached 1:Memcached的概述 2:数据存储方式与数据过期方式 (1)数据存储方式:Slab Allocation (2)数据过期方式:LRU、Laxzy Expiration 3.Memcached 缓存机制 4.Memcached 分布式 5.Memcac…...

【C++进阶】map与set的封装实践
文章目录 map和setmapmap的框架迭代器operator()operator--()operator()和operator!()operator*()operator->() insertbegin()end()operator[] ()map的所有代码: set的封装迭代器的封装总结 map和set 通过观察stl的底层我们可以看见,map和set是通过红…...

可视化编程-七巧低代码入门02
1.1.什么是可视化编程 非可视化编程是一种直接在集成开发环境中(IDE)编写代码的编程方式,这种编程方式要求开发人员具备深入的编程知识,开发效率相对较低,代码维护难度较大,容易出现错误,也需要…...

算法:魔法字典
1️⃣要求: 设计一个使用单词列表进行初始化的数据结构,单词列表中的单词 互不相同 。 如果给出一个单词,请判定能否只将这个单词中一个字母换成另一个字母,使得所形成的新单词存在于你构建的字典中。 实现 MagicDictionary 类…...

html+css 实现hover 翻转按钮
前言:哈喽,大家好,今天给大家分享html+css 绚丽效果!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 一、效果二、原理解析1.这是一个,hover翻转按钮的效果。这其实是用==一个元素==实现的。…...
ETL程序员如何平衡日常编码工作与提升式学习
在快速发展的科技行业中,程序员面临着不断更新的技术和工具,尤其是数据领域的从业者,如ETL(抽取、转换、加载)工程师。如何在日常繁重的编码工作中找到时间进行提升式学习,成为了许多ETL工程师的共同挑战。…...

被嫌弃的35岁程序员,竟找到了职业的新出路:PMP项目管理
35岁,本应是事业发展的高峰期。更多听到的却是35岁职场天花板,特别是IT从业者,35岁就好像是一道迈不过的坎:多年的工作经验,在35岁的生理年龄面前,一文不值。 IT从业者若想安然度过“35岁危机”࿰…...
跟李沐学AI:目标检测、锚框
边缘框 用于表示物体的位置,一个边缘框通过四个数字定义:(坐上x, 左上y, 右下x, 右下y)或(左上x, 左上y, 宽, 高) 通常物体检测或目标检测的数据集比图片分类的数据集小很多,因为物体检测数据集标注成本高很多。 目…...

【鸿蒙学习】HarmonyOS应用开发者基础 - 构建更加丰富的页面(一)
学完时间:2024年8月14日 一、前言叨叨 学习HarmonyOS的第六课,人数又成功的降了500名左右,到了3575人了。 二、ArkWeb 1、概念介绍 ArkWeb是用于应用程序中显示Web页面内容的Web组件,为开发者提供页面加载、页面交互、页面调…...

机器学习深度学习中的Warmup技术是什么?
机器学习&深度学习中的Warmup技术是什么? 在机器学习&深度学习模型的训练过程中,优化器的学习率调整策略对模型的性能和收敛性至关重要。Warmup是优化器学习率调整的一种技术,旨在改善训练的稳定性,特别是在训练的初期阶…...
ECMAScript6中的模块:export导出、import导入
1、模块概述 早期的 JavaScript 程序很小,通常被用来执行独立的脚本任务,在 Web 页面中需要的地方提供一定的交互。随着 Web 应用程序变得越来越复杂,有必要考虑提供一种将 JavaScript 程序拆分为可按需导入的单独模块的机制,这就…...

mysql写个分区表
因为表量已经达到1个亿了。现在想做个优化,先按照 create_time 时间进行分区吧。 create_time 是varchar类型。 CREATE TABLE orders (id varchar(40) NOT NULL ,order_no VARCHAR(20) NOT NULL,create_time VARCHAR(20) NOT NULL,amount DECIMAL(10,2) NOT NULL,…...

Hystrix——服务容错保护库
熔断机制是解决微服务架构中因等待出现故障的依赖方响应而形成任务挤压,最终导致自身服务瘫痪的一种机制,它的功能类似电路的保险丝,其目的是为了阻断故障,从而保护系统稳定性。Hystrix作为Spring Cloud中实现了熔断机制的组件&am…...

【区块链+金融服务】河北股权交易所综合金融服务平台 | FISCO BCOS应用案例
区域性股权市场是我国资本市场的重要组成部分,是多层次资本市场体系的基石。河北股权交易所(简称:河交所) 作为河北省唯一一家区域性股权市场运营机构,打造河北股权交易所综合金融服务平台,将区块链技术与区…...

[图解]需要≠需求-《分析模式》漫谈
1 00:00:00,760 --> 00:00:02,910 今天的《分析模式》漫谈 2 00:00:02,920 --> 00:00:04,180 我们来说一下 3 00:00:04,490 --> 00:00:06,490 需要不等于需求 4 00:00:10,490 --> 00:00:11,760 还是第一章 5 00:00:13,120 --> 00:00:15,020 这里 6 00:00:1…...

刷到好听的音频怎么办
在短视频平台上,我们常常会刷到那些好听得让人陶醉的视频,可却无法直接下载保存其中的音频,是不是感觉很遗憾? 比如刷到林俊杰这首前奏超好听的《江南》,却禁止下载无法直接下载保存。 别担心,下面就为您揭…...

怎么在网络攻击中屹立不倒
在当今蓬勃发展的网络游戏产业中,服务器安全无疑是企业生存与发展的基石。面对互联网环境中无处不在的DDoS(分布式拒绝服务)与CC(挑战碰撞)攻击威胁,游戏服务器的防御能力与高效处理能力显得尤为重要。相较…...

详解 Python 中的面向对象编程(2)
引言 面向对象编程(OOP)是一种编程范式,它通过将属性和行为整合到对象中来构建程序。本教程将带你了解Python语言中面向对象编程的基本概念。 想象一下,对象就像是系统中的各个部件。可以把程序比作一条工厂流水线。在流水线的每一…...
数据结构-线性表-顺序表
一. 了解顺序表 顺序表定义: 顺序表(也称为线性数组)是一种线性数据结构,它将数据元素按顺序存储在一块连续的内存空间中。顺序表的基本特征包括: 元素的顺序性:顺序表中的元素具有线性关系,每…...

AI绘画大模型-StableDiffusion最强模型sd3(本地安装方法)
前言/introduction Stable Diffusion 3(简称SD3)是Stability AI最新推出的文本到图像生成模型。相比前代模型,SD3在生成质量、细节表现以及运行效率上有了显著提升,尤其在细腻的图像渲染和复杂的场景构建方面表现出色。SD3模型…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...