面试官让我滚,因为我这样回答:谈谈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,面试官让我回去等通知!