Memory 获取内存中的redis键值大小
我试图在redis中获取一个键值或一个键或一个值的大小 使用Memory 获取内存中的redis键值大小,memory,redis,redis-cli,Memory,Redis,Redis Cli,我试图在redis中获取一个键值或一个键或一个值的大小 使用debug object key命令返回要写入磁盘的键值的序列化大小,而不是它在内存中使用的实际字节数 这可以通过检查源代码来确认(基于此) 查看源代码: /* Save a string object as [len][data] on disk. If the object is a string * representation of an integer value we try to save it in a speci
debug object key
命令返回要写入磁盘的键值的序列化大小,而不是它在内存中使用的实际字节数
这可以通过检查源代码来确认(基于此)
查看源代码:
/* Save a string object as [len][data] on disk. If the object is a string
* representation of an integer value we try to save it in a special form */
ssize_t rdbSaveRawString(rio *rdb, unsigned char *s, size_t len) {
int enclen;
ssize_t n, nwritten = 0;
/* Try integer encoding */
if (len <= 11) {
unsigned char buf[5];
if ((enclen = rdbTryIntegerEncoding((char*)s,len,buf)) > 0) {
if (rdbWriteRaw(rdb,buf,enclen) == -1) return -1;
return enclen;
}
}
/* Try LZF compression - under 20 bytes it's unable to compress even
* aaaaaaaaaaaaaaaaaa so skip it */
if (server.rdb_compression && len > 20) {
n = rdbSaveLzfStringObject(rdb,s,len);
if (n == -1) return -1;
if (n > 0) return n;
/* Return value of 0 means data can't be compressed, save the old way */
}
/* Store verbatim */
if ((n = rdbSaveLen(rdb,len)) == -1) return -1;
nwritten += n;
if (len > 0) {
if (rdbWriteRaw(rdb,s,len) == -1) return -1;
nwritten += len;
}
return nwritten;
}
所有不同的CLI工具都在报告对象的序列化大小,而不是有趣而重要的内存大小。从Redis v4开始,该命令在猜测键的占用空间及其值方面做得更好。它似乎没有考虑键。例如:127.0.0.1:6379>设置a OK 127.0.0.1:6379>内存使用量a(整数)52 127.0.0.1:6379>设置b RandomLongTringWithLots删除器OK 127.0.0.1:6379>内存使用量b(整数)83 127.0.0.1:6379>设置RandomLongTringWithLots删除器b OK 127.0.0.1:6379>内存使用RandomLongTringWithLots删除器(整数)52 127.0.0.1:6379>您使用的是哪个版本?127.0.0.1:6379>信息#服务器redis_版本:4.0.1升级到新版本-我已亲自提交了您描述的问题的修复:)
127.0.0.1:6379> set a aaaaaaaaaaaaaaaaaaa
OK
127.0.0.1:6379> debug object a
Value at:0x7f985822f168 refcount:1 encoding:embstr serializedlength:20 lru:11611136 lru_seconds_idle:2
127.0.0.1:6379> set a aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
OK
127.0.0.1:6379> debug object a
Value at:0x7f985827c428 refcount:1 encoding:embstr serializedlength:12 lru:11611147 lru_seconds_idle:1