【Memcached】

news2024/9/28 7:15:50

memcached 有一个很大的缺陷不能持久化,不能存储在硬盘里

1.NoSQL介绍

NoSQL是对 Not Only SQL、非传统关系型数据库的统称。

NoSQL一词诞生于1998年,2009年这个词汇被再次提出指非关系型、分布式、不提供ACID的数据库设计模式。

随着互联网时代的到来,数据爆发式增长,数据库技术发展日新月异,要适应新的业务需求。

而随着移动互联网、物联网的到来,大数据的技术中NoSQL也同样重要。

数据库排名:DB-Engines Ranking - popularity ranking of database management systems

 NoSQL 分类

nosql,表示的是不仅仅是数据库的意思

Key-value Store k/v数据库
    性能好 O(1) , 如: redis、memcached

Document Store 文档数据库
    mongodb、CouchDB

Column Store 列存数据库,Column-Oriented DB
    HBase、Cassandra,大数据领域应用广泛

Graph DB 图数据库
    Neo4j

Time Series 时序数据库
    InfluxDB、Prometheus

2.Memcached

Memcached 只支持能序列化的数据类型,不支持持久化,基于Key-Value的内存缓存系统;memcached 虽然没有像redis所具备的数据持久化功能,比如RDB和AOF都没有,

但memcached可以通过做集群同步的方式实现各服务器的数据同步,集群中只要有一台还活着数据就不会丢失,并且当有新服务器加入时会自动同步数据;★★★

Memcached 借助了操作系统的 libevent 工具做高效的读写。libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥高性能。memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能

Memcached 支持最大的内存存储对象为1M,超过1M的数据可以使用客户端压缩或拆分报包放到多个key中,比较大的数据在进行读取的时候需要消耗的时间比较长,memcached 最适合保存用户的session实现session共享

Memcached存储数据时, Memcached会去申请1MB的内存, 把该块内存称为一个slab, 也称为一个page

Memcached 支持多种开发语言,包括:JAVA,C,Python,PHP,C#,Ruby,Perl等

Memcached 官网:memcached - a distributed memory object caching system

3.Memcached Redis 比较

比较类别RedisMemcached
支持的数据结构哈希、列表、集合、有序集合纯kev-value
持久化支持
高可用支持redis支持集群功能,可以实现主从复制,读写分离官方也提供了sentinel集群管理工具,能够实现主从服务监控,故障自动转移,这一切,对于客户端都是透明的,无需程序改动,也无需人工介入需要二次开发
存储value容量最大512M最大1M
内存分配临时申请空间,可能导致碎片预分配内存池的方式管理内存,能够省去内存分配时间
虚拟内存使用有自己的VM机制,理论上能够存储比物理内存更多的数据,当数据超量时,会引发swap,把冷数据刷到磁盘上所有的数据存储在物理内存里
网络类型非阻塞IO复用模型,提供一些非KV存储之外的排序聚合功能,在执行这些功能时,复杂的CPU计算,会阻塞整个IO调度非阻塞IO复用模型
水平扩展支持redis cluster 可以横向扩展暂无
多线程Redis6.0之前是只支持单线程Memcached支持多线程,CPU利用方面Memcache优于redis

单机QPS

约10W

(QPS:每秒查询率,指服务器单位时间处理多少流量)

约60W
源代码可读性代码清爽简洁可能是考虑了太多的扩展性,多系统的兼容性,代码不清爽
适用场景复杂数据结构、有持久化、高可用需求、value存储内容较大纯KV,数据量非常大,并发量非常大的业务

4.Memcached 工作机制

4.1 内存分配机制

应用程序运行需要使用内存存储数据,但对于一个缓存系统来说,申请内存、释放内存将十分频繁,非常容易导致存在大量内存碎片,最后导致无连续可用内存可用。

tomcat通过分代,memcached通过分格

Memcached采用了Slab Allocator机制来分配、管理内存。

- Page:分配给Slab的内存空间,默认为1MB,分配后就得到一个Slab。
              Slab分配之后内存按照固定字节大小等分成chunk。

- Chunk:用于缓存记录k/v值的内存空间。
                Memcached会根据数据大小选择存到哪一个chunk中,假设chunk有128bytes、64bytes等多种,数据只有100bytes存储在128bytes中,存在少许浪费。

- Chunk最大就是Page的大小(1Mb),即一个Page中就一个Chunk

- Slab Class:Slab按照Chunk的大小分组,就组成不同的Slab Class, 第一个Chunk大小为 96B的Slab为Class1,Chunk 120B为Class 2,如果有100bytes要存,那么Memcached会选择下图中Slab Class 2 存储,因为它是120bytes的Chunk。Slab之间的差异可以使用Growth Factor 控制,默认1.25。

查看Slab Class
#-f, --slab-growth-factor=<num> chunk size growth factor (default: 1.25)
#-f 指定增长因子;-f 2 增长2倍;默认为1.25
memcached -u memcached -f 2 -vv

4.2 懒过期 Lazy Expiration

memcached不会监视数据是否过期,而是在取数据时才看是否过期,如果过期会把数据有效期限标识为0,但并不清除该数据。在以后可以覆盖该位置存储其它数据

4.3 LRU (最近最少使用算法)

当内存不足时,memcached会使用LRU(Least Recently Used)机制来查找可用空间,分配给新记录使用

4.4 集群

Memcached集群,称为基于客户端的分布式集群,即由客户端实现集群功能,即Memcached本身不支持集群

Memcached集群内部并不互相通信,一切都需要客户端连接到Memcached服务器后自行组织这些节点,并决定数据存储的节点。

5.安装和启动

官方安装说明:https://github.com/memcached/memcached/wiki/Install

5.1 yum 安装

查看memcached包的基本信息
[root@test1 ~]# yum info memcached
BDB2053 Freeing read locks for locker 0xe68: 6254/139875865057088
BDB2053 Freeing read locks for locker 0xe6a: 6254/139875865057088
BDB2053 Freeing read locks for locker 0xe6b: 6254/139875865057088
BDB2053 Freeing read locks for locker 0xe6c: 6254/139875865057088
BDB2053 Freeing read locks for locker 0xe6d: 6254/139875865057088
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.nju.edu.cn
 * extras: mirrors.nju.edu.cn
 * updates: mirrors.nju.edu.cn
Available Packages
Name        : memcached
Arch        : x86_64
Version     : 1.4.15
Release     : 10.el7_3.1
Size        : 85 k
Repo        : base/7/x86_64
Summary     : High Performance, Distributed Memory Object Cache
URL         : http://www.memcached.org/
License     : BSD
Description : memcached is a high-performance, distributed memory
            : object caching system, generic in nature, but intended
            : for use in speeding up dynamic web applications by
            : alleviating database load.
安装
[root@test1 ~]# yum -y install memcached
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.nju.edu.cn
 * extras: mirrors.nju.edu.cn
 * updates: mirrors.nju.edu.cn
Resolving Dependencies
--> Running transaction check
---> Package memcached.x86_64 0:1.4.15-10.el7_3.1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

======================================================================
 Package        Arch        Version                   Repository
                                                                 Size
======================================================================
Installing:
 memcached      x86_64      1.4.15-10.el7_3.1         base       85 k

Transaction Summary
======================================================================
Install  1 Package

Total download size: 85 k
Installed size: 176 k
Downloading packages:
memcached-1.4.15-10.el7_3.1.x86_64.rpm           |  85 kB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : memcached-1.4.15-10.el7_3.1.x86_64                 1/1 
  Verifying  : memcached-1.4.15-10.el7_3.1.x86_64                 1/1 

Installed:
  memcached.x86_64 0:1.4.15-10.el7_3.1                                

Complete!
[root@test1 ~]# vim /etc/sysconfig/memcached 
[root@test1 ~]# cat /etc/sysconfig/memcached 
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
配置文件
[root@test1 ~]# cat /etc/sysconfig/memcached 
PORT="11211"     #监听端口
USER="memcached" #启动用户
MAXCONN="1024"  #最大连接数
CACHESIZE="64"  #最大使用内存
OPTIONS=""     #其他选项

例:
OPTIONS="listen 127.0.0.1"    #只监听本机
OPTIONS="listen"    #监听所有

#用户id
[root@test1 ~]# id memcached
uid=990(memcached) gid=985(memcached) groups=985(memcached)
[root@test1 ~]# rpm -ql memcached 
/etc/sysconfig/memcached
/usr/bin/memcached
/usr/bin/memcached-tool
/usr/lib/systemd/system/memcached.service
/usr/share/doc/memcached-1.4.15
/usr/share/doc/memcached-1.4.15/AUTHORS
/usr/share/doc/memcached-1.4.15/CONTRIBUTORS
/usr/share/doc/memcached-1.4.15/COPYING
/usr/share/doc/memcached-1.4.15/ChangeLog
/usr/share/doc/memcached-1.4.15/NEWS
/usr/share/doc/memcached-1.4.15/README.md
/usr/share/doc/memcached-1.4.15/protocol.txt
/usr/share/doc/memcached-1.4.15/readme.txt
/usr/share/doc/memcached-1.4.15/threads.txt
/usr/share/man/man1/memcached-tool.1.gz
/usr/share/man/man1/memcached.1.gz
监听
#开启服务
[root@test1 ~]# systemctl status memcached.service

#看一下11211使用的什么协议
[root@test1 ~]# ss -natul
tcp    LISTEN     0      128          :::11211                    :::*

#关闭memcached机的防火墙和安全机制
[root@test1 opt]# systemctl stop firewalld
[root@test1 opt]# setenforce 0

#在客户机上安装telnet
[root@test2 ~]# yum -y install telnet
#
[root@test2 opt]# telnet 192.168.67.11 11211
Trying 192.168.67.11...
Connected to 192.168.67.11.
Escape character is '^]'.

#写一个set命令玩玩
#set name 描述 超时时间 字节        #0为永不超时
set name 1 10 4
fang
STORED
get name
VALUE name 1 4
fang
END
#quit退出telnet
quit
Connection closed by foreign host.

5.2 编译安装

#安装环境
[root@test2 ~]# yum -y install gcc libevent-devel
#下载安装包
[root@test2 ~]# cd /opt/
[root@test2 opt]# wget http://memcached.org/files/memcached-1.6.6.tar.gz
--2024-03-13 22:57:13--  http://memcached.org/files/memcached-1.6.6.tar.gz
Resolving memcached.org (memcached.org)... 107.170.231.145
Connecting to memcached.org (memcached.org)|107.170.231.145|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 543661 (531K) [application/octet-stream]
Saving to: ‘memcached-1.6.6.tar.gz’

100%[==============================================>] 543,661      584KB/s   in 0.9s   

2024-03-13 22:57:20 (584 KB/s) - ‘memcached-1.6.6.tar.gz’ saved [543661/543661]

[root@test2 opt]# ls
memcached-1.6.6.tar.gz  rh
#解压
[root@test2 opt]# tar xf memcached-1.6.6.tar.gz 
[root@test2 opt]# ls
memcached-1.6.6  memcached-1.6.6.tar.gz  rh

[root@test2 memcached-1.6.6]# cd memcached-1.6.6/
[root@test2 memcached-1.6.6]# ./configure --prefix=/apps/memcached
[root@test2 memcached-1.6.6]# make && make install

#做个软连接或者使用环境变量(二选一)
1.
[root@test2 opt]# ln -s /apps/memcached/bin/memcached /usr/bin/

2.
[root@test2 opt]# echo 'PATH=/apps/memcached/bin:$PATH' > /etc/profile.d/memcached.sh
[root@test2 opt]# . /etc/profile.d/memcached.sh

#创建一个普通用户;-r表示随机生成一个用户
[root@test2 opt]# useradd -r -s /sbin/nologin memcached

#重定向一个memcached文件
[root@test2 opt]# cat >    /etc/sysconfig/memcached    << eof
> PORT="11211"
> USER="memcached"
> MAXCONN="1024"
> CACHESIZE="64"
> OPTIONS=""
> eof
[root@test2 opt]# cat /etc/sysconfig/memcached 
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""


#准备service文件;因为bash环境中没有下面这些变量(${USER}有)识别不了,所以变量前要加\
[root@test2 opt]# cat  > /lib/systemd/system/memcached.service    << eof
> [Unit]
> Description=memcached daemon
> Before=httpd.service
> After=network.target
> [Service]
> EnvironmentFile=/etc/sysconfig/memcached
> ExecStart=/apps/memcached/bin/memcached -p  \${PORT} -u \${USER} -m \${CACHESIZE} -c \${MAXCONN} \$OPTIONS
> [Install]
> WantedBy=multi-user.target
> eof


[root@test2 opt]# systemctl daemon-reload 
[root@test2 opt]# 
[root@test2 opt]# systemctl enable --now memcached.service
Created symlink from /etc/systemd/system/multi-user.target.wants/memcached.service to /usr/lib/systemd/system/memcached.service.
[root@test2 opt]# 
[root@test2 opt]# memcached --version
memcached 1.6.6
[root@test2 opt]# 
[root@test2 opt]# systemctl start memcached
[root@test2 opt]# systemctl status memcached
增长因子的改变
#默认前台执行;默认从96开始;默认1.25倍,-f 2 表示指定两倍;
[root@test1 ~]# memcached -u memcached -m 1024 -c 65536 -f 2 -vv
slab class   1: chunk size        96 perslab   10922
slab class   2: chunk size       192 perslab    5461
slab class   3: chunk size       384 perslab    2730
slab class   4: chunk size       768 perslab    1365
slab class   5: chunk size      1536 perslab     682
slab class   6: chunk size      3072 perslab     341
slab class   7: chunk size      6144 perslab     170
slab class   8: chunk size     12288 perslab      85
slab class   9: chunk size     24576 perslab      42
slab class  10: chunk size     49152 perslab      21
slab class  11: chunk size     98304 perslab      10
slab class  12: chunk size    196608 perslab       5
slab class  13: chunk size    393216 perslab       2
slab class  14: chunk size   1048576 perslab       1
failed to listen on TCP port 11211: Address already in use

#以台方式执行
[root@test1 ~]# memcached -u memcached -m 1024 -c 65536 -d
[root@test1 ~]# 

#注意要确保自己内存够用
[root@test1 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G        668M        150M          9M        1.0G        913M
Swap:          2.0G         16K        2.0G

#清空缓存命令
[root@test1 ~]# echo 3 > /proc/sys/vm/drop_caches
[root@test1 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G        614M        996M          9M        212M        1.0G
Swap:          2.0G         16K        2.0G

5.3 memcached 启动程序说明

修改memcached 运行参数,可以使用下面的选项修改/etc/sysconfig/memcached文件

memcached 常见选项

-u username memcached运行的用户身份,必须普通用户
-p 绑定的端口,默认11211
-m num 最大内存,单位MB,默认64MB
-c num 最大连接数,缺省1024
-d 守护进程方式运行
-f 增长因子Growth Factor,默认1.25
-v 详细信息,-vv能看到详细信息
-M 使用内存直到耗尽,不许LRU
-U 设置UDP监听端口,0表示禁用UDP

6.使用 memcached

6.1 memcached 开发库和工具

与memcached通信的不同语言的连接器。libmemcached提供了C库和命令行工具。

安装工具包
[root@test1 ~]# yum -y install libmemcached
memping 检测连接服务器
[root@test1 ~]# memping --help
memping v1.0
...省略


[root@test1 ~]# memping --servers 192.168.67.12
[root@test1 ~]# echo $?
0

[root@test2 opt]# systemctl stop memcached
Failed to ping 192.168.67.12:11211 CONNECTION FAILURE
[root@test1 ~]# echo $?
1
memstat
[root@test2 opt]# systemctl start memcached
#查看基本信息
[root@test1 ~]# memstat --servers=192.168.67.12
Server: 192.168.67.12 (11211)
	 pid: 14409
	 uptime: 90
	 time: 1710404685
	 version: 1.6.6
	 libevent: 2.0.21-stable
	 pointer_size: 64
...省略

6.2 memcached 操作

memcached 操作命令
[root@test1 ~]# cat /usr/share/doc/memcached-1.4.15/protocol.txt
五种基本操作命令
- set        #重新设置
- add        #新加一个数据
- flush      #清空数据;慎用
- get        #调用数据
- delete     #删除数据

#前三个命令是用于操作存储在 memcached 中的键值对的标准修改命令,都使用如下所示的语法:
command <key> <flags> <expiration time> <bytes>
<value>

#参数说明如下:
command set/add/replace
key     key 用于查找缓存值
flags     可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息
expiration time     在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes     在缓存中存储的字节数
value     存储的值(始终位于第二行)
#增加key,过期时间为秒,bytes为存储数据的字节数
add key flags exptime bytes  
显示服务状态
[root@test1 ~]# telnet 192.168.67.12 11211
Trying 192.168.67.12...
Connected to 192.168.67.12.
Escape character is '^]'.
stats
STAT pid 14409
STAT uptime 938
STAT time 1710405533
STAT version 1.6.6
...省略
END

#显示各个 slab 中 item 的数目和存储时长(最后一次访问距离现在的秒数)。
stats items
END

#显示各个slab的信息,包括chunk的大小、数目、使用情况等
stats slabs
STAT active_slabs 0
STAT total_malloced 0
END
添加数据
add name 1 30 4 
zhao
STORED

##########
add  	添加
name  	键的名字
1    	flages标志  描述信息
30   	超时时间   默认秒  0 代表永久有效
4    	字节数  数据的大小、
zhao 	具体的值
##########

#字节数要按设置的个数输入,多/少都不行
CLIENT_ERROR bad data chunk
ERROR
add name 1 10 4 
abcde
CLIENT_ERROR bad data chunk
ERROR
add name 1 10 4   
abc

CLIENT_ERROR bad data chunk
ERROR
修改数据、调用数据
#添加数据
add name 1 30 4
zhao
STORED
#修改数据
set name 1 60 4
test
STORED
#调用数据
get name
VALUE name 1 4
test
#60秒后就没了
get name
END
删除数据
#添加
add name 1 0 4 
zhao 
STORED
#调用
get name
VALUE name 1 4
zhao
END
#删除数据
delete name
DELETED
get name
END
清空数据
add name 1 0 4
zhao   
STORED
get name
VALUE name 1 4
zhao
END
flush_all
OK
get name
END

7.memcached集群部署架构

7.1 基于 magent 的部署架构

Magent是google开发的项目,应用端通过负载均衡服务器连接到magent,然后再由magent代理用户应用请求到memcached处理,底层的memcached为双主结构会自动同步数据,本部署方式存在magent单点问题,因此需要两个magent做高可用。

项目站点:https://code.google.com/archive/p/memagent/

7.2 Repcached 实现原理

项目站点:repcached - add data replication feature to memcached

在 master上可以通过 -X 选项指定 replication port(默认为11212/tcp),在 slave上通过 -x 指定复制的master并连接,事实上,如果同时指定了 -x/-X, repcached先会尝试连接对端的master,但如果连接失败,它就会用 -X参数来自己 listen(成为master);如果 master坏掉, slave侦测到连接断了,它会自动 listen而成为 master;而如果 slave坏掉,master也会侦测到连接断开,它就会重新 listen等待新的 slave加入。

从这方案的技术实现来看,其实它是一个单 master单 slave的方案,但它的 master/slave都是可读写的,而且可以相互同步,所以从功能上看,也可以认为它是双机 master-master方案

7.3 简化后的部署架构

magent已经有很长时间没有更新,因此可以不再使用magent,直接通过负载均衡连接到memcached,仍然有两台memcached做高可用,repcached版本的memcached之间会自动同步数据,以保持数据一致性,即使其中的一台memcached故障也不影响业务正常运行,故障的memcached修复上线后再自动从另外一台同步数据即可保持数据一致性。

7.4 部署repcached

[root@test1 opt]# yum -y install gcc libevent libevent-devel

[root@test1 opt]# wget  https://jaist.dl.sourceforge.net/project/repcached/repcached/2.2.1-1.2.8/memcached-1.2.8-repcached-2.2.1.tar.gz
[root@test1 opt]# ls
memcached-1.2.8-repcached-2.2.1.tar.gz  rh
[root@test1 opt]# tar xf memcached-1.2.8-repcached-2.2.1.tar.gz 
[root@test1 opt]# ls
fdisk.sh  memcached-1.2.8-repcached-2.2.1  memcached-1.2.8-repcached-2.2.1.tar.gz  rh
[root@test1 opt]# cd memcached-1.2.8-repcached-2.2.1/
[root@test1 memcached-1.2.8-repcached-2.2.1]# 
[root@test1 memcached-1.2.8-repcached-2.2.1]# ./configure --prefix=/apps/repcached --enable-replication

#报错如下(内核版本过高)
[root@test1 memcached-1.2.8-repcached-2.2.1]# make
make  all-recursive
make[1]: Entering directory `/opt/memcached-1.2.8-repcached-2.2.1'
Making all in doc
make[2]: Entering directory `/opt/memcached-1.2.8-repcached-2.2.1/doc'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/opt/memcached-1.2.8-repcached-2.2.1/doc'
make[2]: Entering directory `/opt/memcached-1.2.8-repcached-2.2.1'
gcc -DHAVE_CONFIG_H -I.  -DNDEBUG   -g -O2 -MT memcached-memcached.o -MD -MP -MF .deps/memcached-memcached.Tpo -c -o memcached-memcached.o `test -f 'memcached.c' || echo './'`memcached.c
memcached.c: In function ‘add_iov’:
memcached.c:697:30: error: ‘IOV_MAX’ undeclared (first use in this function)
         if (m->msg_iovlen == IOV_MAX ||
                              ^
memcached.c:697:30: note: each undeclared identifier is reported only once for each function it appears in
make[2]: *** [memcached-memcached.o] Error 1
make[2]: Leaving directory `/opt/memcached-1.2.8-repcached-2.2.1'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/opt/memcached-1.2.8-repcached-2.2.1'
make: *** [all] Error 2
解决办法
[root@test1 memcached-1.2.8-repcached-2.2.1]# vim memcached.c
56 #ifndef IOV_MAX
57 #if defined(__FreeBSD__) || defined(__APPLE__)
58 # define IOV_MAX 1024
59 #endif
60 #endif

删除原57、59行
  55 /* FreeBSD 4.x doesn't have IOV_MAX exposed. */
  56 #ifndef IOV_MAX
  57 # define IOV_MAX 1024
  58 #endif
再次编译安装:
[root@test1 memcached-1.2.8-repcached-2.2.1]# make && make install

[root@test1 memcached-1.2.8-repcached-2.2.1]# yum -y install tree

[root@test1 memcached-1.2.8-repcached-2.2.1]# tree /apps/repcached/
/apps/repcached/
├── bin
│   ├── memcached
│   └── memcached-debug
└── share
    └── man
        └── man1
            └── memcached.1

4 directories, 3 files
做软连接
[root@test1 memcached-1.2.8-repcached-2.2.1]# ln -s /apps/repcached/bin/memcached /usr/bin/
ln: failed to create symbolic link ‘/usr/bin/memcached’: File exists
#前面你如果选的做软连接,这里会提示已存在
使用帮助
[root@test1 memcached-1.2.8-repcached-2.2.1]# memcached -h 
memcached 1.4.15

7.6 启动 memcached

7.6.1 server1 相关操作
#创建用户
[root@test1 opt]# useradd -r -s /sbin/nologin memcached
useradd: user 'memcached' already exists
#这里你如果前面创建过这个用户,也会提示已存在

#这里如果显示报错
[root@test1 opt]# memcached -d -m 1024 -p 11211 -u memcached -c 2048 -x 192.168.67.12
memcached: invalid option -- 'x'
Illegal argument "?"
#就用这个
[root@test1 opt]# cd /apps/repcached/bin/
[root@test1 bin]# ls
memcached  memcached-debug
[root@test1 bin]# ./memcached -d -m 1024 -p 11211 -u memcached -c 2048 -x 192.168.67.12


##########
-d    后台运行
-m    内存最大为
-p    指定端口号
-u    指定用户
-c    最大
-x    指定同步对象
##########

# 查看是否启动
[root@test1 bin]# ss -natl
LISTEN     0      128             :::11211                       :::*  
server2 操作

(最好先将server2上的memcached卸干净再做)

 在server1 上 将整个目录拷贝到  server2上

# apps注意不要加/ 
[root@test1 bin]# rsync -a /apps 192.168.67.12:/
The authenticity of host '192.168.67.12 (192.168.67.12)' can't be established.
ECDSA key fingerprint is SHA256:mwNwnMnbw9oMuRs2NVosCtypIPz0OpkBfpirlpqKSP0.
ECDSA key fingerprint is MD5:8a:42:bd:b4:91:3c:39:64:5d:79:c7:2b:b5:5c:0b:97.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.67.12' (ECDSA) to the list of known hosts.
root@192.168.67.12's password: 

在server2上操作(注意:两台机器memcached版本要相同)

#创建用户;有了跳过
[root@test2 ~]# useradd -r -s /sbin/nologin memcached
useradd: user 'memcached' already exists

#安装库否则起不来;装过了跳过
[root@test2 ~]# yum -y install gcc libevent libevent-devel
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Package gcc-4.8.5-44.el7.x86_64 already installed and latest version
Package libevent-2.0.21-4.el7.x86_64 already installed and latest version
Package libevent-devel-2.0.21-4.el7.x86_64 already installed and latest version
Nothing to do

# 做软连接;有了跳过
[root@test2 ~]# ln -s /apps/repcached/bin/memcached  /usr/bin/
ln: failed to create symbolic link ‘/usr/bin/memcached’: File exists

#报错
[root@test2 ~]# memcached -d -m 1024 -p 11211 -u memcached -c 2048 -x 192.168.67.11
memcached: invalid option -- 'x'
Illegal argument "?"
#就用这个
[root@test2 ~]# cd /apps/repcached/bin/
[root@test2 bin]# ls
memcached  memcached-debug
[root@test2 bin]# ./memcached -d -m 1024 -p 11211 -u memcached -c 2048 -x 192.168.67.11

#查看是否启动
[root@test2 /]# ss -ntl | grep 11211
[root@test2 bin]# ss -ntl | grep 11211
LISTEN     0      128          *:11211                    *:*                  
LISTEN     0      128         :::11211                   :::*            
客户机访问
[root@test3 ~]# telnet 192.168.67.11 11211
Trying 192.168.67.11...
Connected to 192.168.67.11.
Escape character is '^]'.
add test 1 0 4
fang
STORED
get test
VALUE test 1 4
fang
END
quit
Connection closed by foreign host.
[root@test3 ~]# telnet 192.168.67.12 11211
Trying 192.168.67.12...
Connected to 192.168.67.12.
Escape character is '^]'.
get test
VALUE test 1 4
fang
END

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

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

相关文章

Node.js 学习笔记 fs、path、http模块;模块化;包;npm

Node.js学习 Node.js一、定义1.前端工程化2.Node.js 为何能执行 JS&#xff1f;3.安装nodejs、删除之前的nodejs4.使用 Node.js 二、fs模块 \- 读写文件三、path 模块案例 - 压缩前端html四、HTTP相关URL中的端口号常见的服务程序http 模块-创建 Web 服务案例&#xff1a;浏览时…

【Flutter 面试题】Flutter如何处理响应式布局?

【Flutter 面试题】Flutter如何处理响应式布局&#xff1f; 文章目录 写在前面口述回答补充说明完整代码示例运行结果详细说明 写在前面 &#x1f64b; 关于我 &#xff0c;小雨青年 &#x1f449; CSDN博客专家&#xff0c;GitChat专栏作者&#xff0c;阿里云社区专家博主&am…

windows下安装python3.8

一、从官网下载安装包 官网地址&#xff1a;https://www.python.org/downloads/ 华为云地址&#xff1a;https://mirrors.huaweicloud.com/python/ 第三方镜像&#xff1a;https://registry.npmmirror.com/binary.html?pathpython/ 注意&#xff1a;从python3.8.10版本开始…

注意!运用表单流程管理可一起实现提质增效

经常会有客户在我们面前抱怨&#xff1a;到底用什么样的方法和软件&#xff0c;才能实现高效率的办公&#xff1f;其实&#xff0c;大家不必苦恼。因为低代码技术平台服务商流辰信息将会给大家推荐表单流程管理的实用性&#xff0c;它的灵活简便、易操作等优势特点&#xff0c;…

C#文件交互

C#是一种流行的编程语言&#xff0c;广泛应用于开发各种类型的应用程序&#xff0c;包括需要进行文件交互的应用程序。文件交互是指应用程序与计算机文件系统进行交互&#xff0c;包括读取、写入、创建、删除和修改文件等操作。在C#中&#xff0c;文件交互通常通过.NET框架提供…

格子表单GRID-FORM | 必填项检验 BUG 修复实录

格子表单/GRID-FORM已在Github 开源&#xff0c;如能帮到您麻烦给个星&#x1f91d; GRID-FORM 系列文章 基于 VUE3 可视化低代码表单设计器嵌套表单与自定义脚本交互文档网站搭建&#xff08;VitePress&#xff09;与部署&#xff08;Github Pages&#xff09;必填项检验 BUG…

打卡学习kubernetes——了解五种控制器类型

目录 1 Deployment控制器 2 StatefulSet控制器 3 DaemonSet控制器 4 Job控制器 5 CronJob控制器 1 Deployment控制器 Deployment为Pod和Replica Set&#xff08;下一代Replication Controller&#xff09;提供声明式更新。 Deployment运行无状态应用&#xff0c;一般情况…

redis中的zset的原理

一、zset有序集合的原理 如果有序集合元素个数少于128个且元素值小于64字节&#xff0c;使用压缩列表&#xff08;新版本已经废弃压缩列表改用listpack数据结构了&#xff09; 如果不满足上述条件&#xff0c;采用跳表作为redis的底层数据结构 二、压缩列表 1.由连续内存块组…

迄今为止易用 —— 的 “盲水印“ 实现方案

前期回顾 网站的打赏 —— 新一代的思路-CSDN博客https://blog.csdn.net/m0_57904695/article/details/136704914?spm1001.2014.3001.5501 目录 CSDN 彩色之外 &#x1f4dd; 前言&#xff1a; &#x1f6e0;️ vue3-blind-watermark &#x1f916; 安装 ♻️ 引入&am…

【LeetCode热题100】142. 环形链表 II(链表)

一.题目要求 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统…

GEE必须会教程—影像集合的操作方法

影像集合&#xff08;Image Collection&#xff09;&#xff0c;说白了就是把一堆影像打包在一起形成的集合&#xff0c;我们可以用用前文讲过的矢量集合的方法来理解&#xff08;http://t.csdnimg.cn/bRJOT&#xff09;&#xff0c;学习影像集合的过程中&#xff0c;同样需要掌…

【DL经典回顾】激活函数大汇总(八)(Maxout Softmin附代码和详细公式)

激活函数大汇总&#xff08;八&#xff09;&#xff08;Maxout & Softmin附代码和详细公式&#xff09; 更多激活函数见激活函数大汇总列表 一、引言 欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里&#xff0c;激活函数扮演着不…

strcat的模拟实现

一&#xff1a;strcat函数的定义&#xff1a; strcat函数功能的解释&#xff1a; 将源字符串追加&#xff08;连接&#xff09;到目的字符串的后面 strcat函数要点&#xff1a; 源字符串必须以 \0 结束。 目标空间必须有足够的大&#xff0c;能容纳下源字符串的内容。 目…

使用STM32+ESP8266(ESP-01S)+点灯科技(手机端Blinker)实现远程控制智能家居

硬件准备&#xff1a;STM32单片机、ESP8266&#xff08;ESP-01S&#xff09;、CH340C下载烧录器 软件准备&#xff1a;STM32CubeMX、Keil uVision5、Arduino IDE、 点灯科技&#xff08;手机端APP Blinker&#xff09;点灯科技 (diandeng.tech)点击进入 值得注意的是&#x…

NO9 蓝桥杯单片机之串口通信的使用

1 基本概念 简单来说&#xff0c;串口通信是一种按位&#xff08;bit&#xff09;传输数据的通信方式。 其他一些知识就直接贴图吧&#xff08;单工&#xff0c;半双工这些学过通信的同学应该都知道&#xff0c;可以上网查询一下具体概念。&#xff09; 来源还是&#xff1a;…

【CSP试题回顾】201709-3-JSON查询

CSP-201709-3-JSON查询 解题思路 1. 初始化数据结构 map<string, string> strContent: 存储字符串类型属性的内容。键是属性名&#xff08;可能包含通过点.连接的多级属性名&#xff09;&#xff0c;值是属性的字符串值。vector<string> keyVec: 存储当前正在处…

酒店客房管理系统设计与实现(论文+源码)_kaic

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本酒店客房管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

SpringBoot+vue3打造企业级一体化SaaS系统

SpringBootvue3打造企业级一体化SaaS系统 简介&#xff1a;    全面提升前后端技术水平&#xff0c;独立完成全栈项目开发能力&#xff0c;快速进击全栈工程师&#xff0c;最终在面试中脱颖而出。整合后端主流技术&#xff08;Spring Boot、物理数据库隔离、加载动态权限、多…

网络基础 - 预备知识(协议、网络协议、网络传输流程、地址管理)

文章目录 1. 认识 协议2. 了解 网络协议2.1 引入 协议分层2.2 OSI 七层模型 与 TCP/IP 四层模型 3. 网络传输 流程&#xff01;&#xff01;&#xff01;3.1 网络传输流程图3.2 关于报头3.3 实例解释 传输过程&#xff08;封装与解包&#xff09; 4. 网络中的地址管理4.1 认识 …

力扣串题:字符串中的第二大数字

此题的精妙之处在于char类型到int类型的转化&#xff0c;需要运算来解决 int secondHighest(char * s) {int max1-1;int max2-1;int szstrlen(s);int i 0 ;for(i0;i<sz;i){if(s[i]>0&&s[i]<9){if((s[i]-0)>max1){max2max1;max1s[i]-0;}else if((s[i]-0)&l…