高性能内存对象缓存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模型…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...
【1】跨越技术栈鸿沟:字节跳动开源TRAE AI编程IDE的实战体验
2024年初,人工智能编程工具领域发生了一次静默的变革。当字节跳动宣布退出其TRAE项目(一款融合大型语言模型能力的云端AI编程IDE)时,技术社区曾短暂叹息。然而这一退场并非终点——通过开源社区的接力,TRAE在WayToAGI等…...
【阅读笔记】MemOS: 大语言模型内存增强生成操作系统
核心速览 研究背景 研究问题:这篇文章要解决的问题是当前大型语言模型(LLMs)在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色,但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成(RA…...
