我想存储一些用户'信息到每个用户的redis。数据类型使用键值。
例如:
$redis.set("user_info:12345", #{some data})
有没有办法评估内存占用?
我认为redis键和值都会消耗内存,如何知道消耗了多少内存?
答案 0 :(得分:1)
您可以使用DEBUG OBJECT
命令获取密钥值的序列化长度:
$redis.set("hello", "world")
$redis.debug("object", "hello")
# => "Value at:0x7f86f350a8d0 refcount:1 encoding:raw serializedlength:6 lru:2421685 lru_seconds_idle:13"
如果您想提取该数字,可以使用此正则表达式:/serializedlength:(\d+)/
size = $redis.debug("object", "hello").match(/serializedlength:(\d+)/)[1].to_i
# => 6
答案 1 :(得分:0)
从 v4 开始,我们的 MEMORY USAGE 命令做得更好,反映了键名、它们的值和内部数据结构的所有相关开销的整个 RAM 消耗。
$redis.memory :usage, key_name
DEBUG OBJECT 输出不是衡量 Redis 中键的内存消耗的可靠方法 - serializedlength
字段以持久化对象所需的字节为单位给出,而不是包含各种管理开销的内存中的实际占用空间在数据本身之上。
为了说明这一点,我创建了一组 250 万个整数并比较了每个整数的输出:
> r.memory :usage, 'testkey'
=> 132003825
> r.debug :object, 'testkey'
=> "Value at:0x7fe739e09a00 refcount:1 encoding:hashtable serializedlength:12404474 lru:729393 lru_seconds_idle:68"
MEMORY USAGE
报告 132,003,825 字节 (126 MiB)DEBUG OBJECT
仅报告 12,404,474 字节 (12 MiB) ?