Redis面试题-value超过限制会怎样?

Redis的value超过限制会怎样?

一、面试题

  • 问:Redis的key和value限制是多少?

  • 答:512MB

  • 问:保存一个超过512MB的value会怎么样?

  • 答:额…,我没试过,应该会报错吧,

  • 你可以动手试试…

二、验证

  • 代码
public static void main(String[] args) {
        Jedis jedis = JedisFactory.getJedis();
        jedis.set("test", "123");
        byte[] bytes = new byte[1024 * 1024];
        String str = new String(bytes);
        //每次append 1MB的内容,尝试512次
        for (int i = 0; i < 512; i++) {
            jedis.append("test", str);
        }
    }
    
输出:
Exception in thread "main" redis.clients.jedis.exceptions.JedisDataException: ERR string exceeds maximum allowed size (512MB)
	at redis.clients.jedis.Protocol.processError(Protocol.java:153)
	at redis.clients.jedis.Protocol.process(Protocol.java:187)
	at redis.clients.jedis.Protocol.read(Protocol.java:241)
	at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:309)
	at redis.clients.jedis.Connection.getIntegerReply(Connection.java:260)
	at redis.clients.jedis.Jedis.append(Jedis.java:689)
	at com.intellif.mozping.data.HashRedis.setValue(HashRedis.java:30)
	at com.intellif.mozping.data.HashRedis.main(HashRedis.java:21)
  • 从输出我们看到,它提示我们value超过512MB的限制了:JedisDataException: ERR string exceeds maximum allowed size (512MB)

三、结论

  • 因此,之前的答案是会抛出异常,下次遇到这个问题我们可以给与肯定的回复了。我们再看看redis的内存情况:
192.168.xx.xx:6379> INFO memory
# Memory
used_memory:537773302
used_memory_human:512.86M
used_memory_rss:557494272
used_memory_rss_human:531.67M
used_memory_peak:634557234
used_memory_peak_human:605.16M
used_memory_peak_perc:84.75%
used_memory_overhead:902569
used_memory_startup:852779
used_memory_dataset:536870733
used_memory_dataset_perc:99.99%
total_system_memory:134898106368
total_system_memory_human:125.63G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:1.04
mem_allocator:libc
active_defrag_running:0
lazyfree_pending_objects:0
  • 我们看到 used_memory:537773302,大概在计算在512.86MB左右,因此是符合基本情况的,redis没有保存其他key。
  • 另外我们在使用redis的时候key尽量短小精悍会比较好,vaule也不宜太大,保存这么大的字符串也比较浪费内存资源,而且光是网络IO就得好长时间了吧。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值