面试官让我滚,因为我这样回答:谈谈Redis String类型~

Posted 浪飞yes

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试官让我滚,因为我这样回答:谈谈Redis String类型~相关的知识,希望对你有一定的参考价值。

一、简介

1.1 基本介绍

String是Redis最常用的数据类型,其中key值为字符串,value值可以为字符串或者数值类型。

对外呈现结构类似Java中Map<String,String>/Map<String, Number>集合

其中的value值,有种实现(类型内部编码)

int:8个字节的长整型

embstr:小于等于39个字节的字符串

raw:大于39个字节的字符串

 Redis会根据当前值的类型和长度决定使用哪种内部编码实现,比如:

#存短字符串
127.0.0.1:6379> set name dafei
OK
#查看类型真实编码
127.0.0.1:6379> object encoding name
"embstr"

#存int类型
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> object encoding age
"int"

#存长字符
127.0.0.1:6379> set content 11111111111111.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
OK
12

无情,面试官又让我滚,因为我这样Redis hash类型~

一、简介

1.1 介绍

Hash类型也是一个高频的数据类型,key值为字符串,value值为hash类型(即KV对),一般用于存储对象。

对外呈现数据结构类似Java的Map<String, Map<String, Objct>>集合

hash类型它在redis中内部编码:

listpack(压缩列表):当value中的field个数小于 hash-max-listpack-entries 配置(默认512个)同时所有的filed对应的value值都小于hash-max-listpack-value配置(默认64个字节)时,Redis会使用ziplist作为hash的内部实现。listpack使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方面比hashtable更加优秀。

hashtable(哈希表):当value中kv对无法满足listpack的条件时,Redis会使用hashtable作为hash的内部实现。因为此时ziplist的读写效率下降,而hashtable的读写时间复杂度为O(1)。

小提示

1>Redis 5之前使用的是ziplist,因为致命的缺陷-连锁更新,在极端条件下会有着极差的性能ÿ

以上是关于面试官让我滚,因为我这样回答:谈谈Redis String类型~的主要内容,如果未能解决你的问题,请参考以下文章

因为我说:volatile 是轻量级的 synchronized,面试官让我回去等通知!

面试官让我利用哈希算法布隆过滤器设计一个短链系统

因为我说:volatile 是轻量级的 synchronized,面试官让我回去等通知!

小米Android岗二面:面试官让我说说对Zygote的理解!

因为不太了解JVM,面试官让我先回去等通知...

面试官让我手写一个平衡二叉树,我当时就笑了