memcached的基本使用

embedded/2025/1/9 1:32:00/

memcached是一种基于键值对的内存数据库,一般应用于缓存数据,提高数据访问速度,减轻后端数据库压力。

安装

这里以Ubuntu为例,其他系统安装方法请看官方文档。

sudo apt-get update
sudo apt-get install memcached

启动

memcached -d

查看帮助

memcached -h

1

netcat(nc)网络请求

查看配置

$ echo "stats settings" | nc localhost 11211
STAT maxbytes 67108864
STAT maxconns 1024
STAT tcpport 11211
...

查看值

$ echo "get runoob" | nc localhost 11211
VALUE runoob 0 5
value
END

telnet连接

telnet 127.0.0.1 11211

Ctrl + ]组合键退出。
telnet>命令行里,输入quit

查看所有slab

$stats items
STAT items:1:number 2

这里items有2个,编号是1。

查看编号为1的slab的所有key:

$stats cachedump 1 0
ITEM runoob [5 b; 0 s]
ITEM peter [11 b; 0 s]

这里cachedump读取slab_id为1的slab,0表示数量不限制,类似sql的limit。

add新增

参数说明:

<command name>set/add/replace
<key>查找关键字
<flags>客户机使用它存储关于键值对的额外信息
<exptime>该数据的存活时间,0表示永远
<bytes>存储字节数
<data block>存储的数据块(可直接理解为key-value结构中的value)
$add id 1 0 4
1234
STORED

set设置

$set id 1 0 4
5678
STORED

replace替换

$replace id 1 0 4
2345
STORED

delete删除

$delete id
DELETED

get查看value

$add id 1 0 4
aaaa
STORED
$get id
VALUE id 1 4
aaaa
END

这里id是key,aaaa是值,1表示flag标记,4表示数据长度。

gets

gets id
VALUE id 1 4 14
aaaa
END

gets比get多一个参数,用来检查数据是否发生变化。

cas

cas即checked and set的意思,只有当最后一个参数和gets所获取的参数匹配时才能存储,否则返回“EXISTS”。

$add id 100 0 5
abcde
STORED
$gets id
VALUE id 100 5 17
abcde
END
$cas id 100 0 5 17
bbbbb
STORED
$gets id
VALUE id 100 5 18
bbbbb
END

append 后面追加

get id
VALUE id 100 5
bbbbb
END
append id 100 0 5
ccccc
STORED
get id
VALUE id 100 10
bbbbbccccc
END

prepend 前面追加

get id
VALUE id 100 10
bbbbbccccc
END
prepend id 100 0 10
dddddddddd
STORED
get id
VALUE id 100 20
ddddddddddbbbbbccccc
END

清空数据

$flush_all
OK
get id
END

查看运行状态

$stats
STAT pid 2711     //进程id
STAT uptime 2453  //总的运行时间,单位描述
STAT time 1344856333  //当前时间
STAT version 1.5.22 //版本
STAT pointer_size 32    //服务器指针位数,一般32位操作系统是32
STAT rusage_user 0.002999  //进程的累计用户时间 
STAT rusage_system 1.277805  //进程的累计系统事件
STAT curr_connections 1  //当前连接数
STAT total_connections 11  //服务器启动后,总连接数
STAT connection_structures 11  //连接结构的数量
STAT cmd_get 17   //总获取次数
STAT cmd_set 1  //总写入次数
STAT cmd_flush 1   //总的的清空次数
STAT get_hits 1  //总的命中次数
STAT get_misses 7   //获取没有命中次数
STAT delete_misses //删除没有命中次数
STAT delete_hits 4   //删除命中次数
STAT incr_misses //递增操作没有命中次数 
STAT incr_hits //递增操作命中次数
STAT decr_misses //递减操作没有命中的次数
STAT decr_hits //递减操作命中的次数
STAT cas_misses //cas设置没有命中次数
STAT cas_hits //cas命中次数
STAT cas_badval //cas操作找到key,但版本过期,没有设置成功
STAT bytes_read 455    //总共获取数据量
STAT bytes_written 1175  //总共写入数据量
STAT limit_maxbytes 1048576  //最大允许使用内存,单位字节
STAT accepting_conns 1    
STAT listen_disabled_num 0
STAT threads 5   //当前线程数
STAT conn_yields 0
STAT bytes 56      //已用缓存空间
STAT curr_items 1  //当前缓存的keyvalue数
STAT total_items 7 //总共缓存的keyvalue数,包括过期删除的
STAT evictions //通过删除keyvalue,释放内存次数
END

查看STAT slabs信息

$stats slabs
STAT 1:chunk_size 96
STAT 1:chunks_per_page 10922
STAT 1:total_pages 1
STAT 1:total_chunks 10922
STAT 1:used_chunks 4
STAT 1:free_chunks 10918
STAT 1:free_chunks_end 0
STAT 1:get_hits 25
STAT 1:cmd_set 30
STAT 1:delete_hits 4
STAT 1:incr_hits 0
STAT 1:decr_hits 0
STAT 1:cas_hits 3
STAT 1:cas_badval 0
STAT 1:touch_hits 0
STAT active_slabs 1
STAT total_malloced 1048576
END

Python读写memcache

from pymemcache.client import baseclient = base.Client(server='127.0.0.1')
client.set('runoob', 'value')value = client.get('runoob')
print(value)

memcachedtool__269">memcached-tool 导出数据

$memcached-tool 127.0.0.1:11211 dump > /tmp/1.txt
Dumping memcache contentsNumber of buckets: 1Number of items  : 2
Dumping bucket 1 - 2 total items$cat /tmp/1.txt   // 导出的数据是带有时间戳的,这个时间戳就是该条数据的过期时间
add name 0 1551489491 3  // 如果当前系统时间超过了时间戳,那么是导入不进去的
Tom
add age 0 1551489491 2
18

相关链接

https://docs.memcached.org/


http://www.ppmy.cn/embedded/151782.html

相关文章

【OceanBase】利用 OceanBase 向量检索能力构建文档智能问答小助手

文章目录 一、实验环境说明二、前期准备工作2.1 安装 Python 3.9 和 pip2.2 安装 Poetry2.3 安装并启动Docker(可选)2.4 安装 MySQL 客户端2.5 注册阿里云百炼账号并开通服务获取 API Key 三、构建智能问答小助手3.1 部署 OceanBase 集群3.1.1 方式一&#xff1a;使用 OBCloud …

C++ 设计模式:迭代器模式(Iterator Pattern)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 组合模式 链接&#xff1a;C 设计模式 - 职责链模式 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;它提供了一种方法顺序访问一个聚合对象中的各个元素&#xff0c;而又不需…

Verilog语法之文件读写

摘要&#xff1a;本文主要介绍了Verilog语法中关于文件操作的内容&#xff0c;在仿真中我们可以利用文件来存储测试数据或者将测试结果写入相应的文件中&#xff0c;下面介绍了如何操作文件以及给出了相应的例子。 1.文件打开$fopen 系统任务$fopen用于打开指定文件名的文件&a…

风控算法开发过程中常用评估指标

最近整理了一下风控算法开发过程中常用的模型层面指标。模型指标的选择和评估不仅直接关系到算法性能&#xff0c;还影响到模型在实际业务场景中的适配性和稳定性。因此&#xff0c;这里主要聚焦于模型层面的评估指标&#xff0c;如 KS、Lift、PSI 和 KL 散度&#xff0c;以及它…

【微服务】【Sentinel】认识Sentinel

文章目录 1. 雪崩问题2. 解决方案3. 服务保护技术对比4. 安装 Sentinel4.1 启动控制台4.2 客户端接入控制台 参考资料: 1. 雪崩问题 微服务调用链路中的某个服务故障&#xff0c;引起整个链路中的所有微服务都不可用&#xff0c;这就是雪崩。动图演示&#xff1a; 在微服务系统…

使用 `llama_index` 构建智能问答系统:多种文档切片方法的评估

使用 llama_index 构建智能问答系统&#xff1a;多种文档切片方法的评估 代码优化与解析1. **代码结构优化**2. **日志管理**3. **环境变量管理**4. **模型初始化**5. **提示模板更新**6. **问答函数优化**7. **索引构建与查询引擎**8. **节点解析器测试** 总结 在现代自然语言…

EPS32基础篇开发

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 开发 EPS32基础篇 前言一、GPIO输入输出GPIO可设置一下4种状态代码示例&#xff1a;检测按键&#xff0c;按下时&#xff1a;LED亮&#xff0c;松开时&#xff0c;LED灭 二、…

面试场景题系列:设计搜索自动补全系统

当我们在谷歌上搜索或者在亚马逊上购物时,只要在搜索框中打字,网页上就会展示一个或者更多的与搜索词匹配的结果。这个功能叫作自动补全(Autocomplete)、提前输入(Typeahead)、边输边搜(Search-as-you-type)或者增量搜索(Incremental Search)。图-1展示了一个谷歌搜索的示例,…