我正在面试间里焦急地等待着,突然听到了门外的脚步声,随即门被打开,穿着干净满脸清秀的青年走了进来,一股男士香水的淡香扑面而来。

面试官:“平时在工作中用过Redis吗?”

我:“用的比较多。”我心中暗喜,Redis我熟啊,什么五种数据类型、两种持久化方式倒背如流啊。

面试官:“Redis的共享对象池了解吗?”

“这个。。没有太深入了解。”我支支吾吾的说到,手心已经冒出冷汗。

面试官:“回去等消息吧。”

这句话说的干净利落,然后就没有然后了。失败是成功的妈妈,我不气馁,决定马上恶补一下。

共享对象池

创建大量重复的整数类型势必会耗费大量内存,所以在Redis内部维护了一个从0到9999的整数对象池,这就是共享对象池

为了验证和理解,我们使用object refcount命令查看一下对象引用数,效果如下:

127.0.0.1:6379> set one-more-num1 404
OK
127.0.0.1:6379> object refcount one-more-num1
(integer) 2
172.24.130.22:6379> set one-more-num2 404
OK
127.0.0.1:6379> object refcount one-more-num2
(integer) 3

设置one-more-num1为404后,直接使用共享池中的整数对象,所以引用数为2(另外一个引用在对象池上);再设置one-more-num2为404后,引用数变成了3。

不过需要注意的是:当设置最大内存值(maxmemory)并且启用LRU相关淘汰策略(如:volatile-lru、allkeys-lru)时,共享对象池将会被禁止使用。

为什么没有字符串对象池?

共享对象池中一个关键操作是判断对象是否相等。

Redis中只有整数类型的对象池,是因为整数的比较算法的时间复杂度是O(1),也只保留了10000个整数为了防止对象池的过度浪费。

相对而言,字符串的比较算法的时间复杂度是O(n),特别是长字符串的比较更加消耗性能。

而且,整数类型被重复使用的概率很大,字符串被重复使用的概率相比就会小很多很多,所以在Redis中只用整数类型的对象共享池。


面试官你等着瞧吧,今天你对我爱答不理,明天我让你高攀不起,哈哈哈。。。

参考文献:

《Redis设计与实现》

《Redis开发与运维》

《Redis 深度历险:核心原理与应用实践》


竟然已经看到这里了,你我定是有缘人,留下你的点赞关注,他日必成大器。

微信公众号:万猫学社

微信扫描二维码

关注后回复「电子书」

获取12本Java必读技术书籍

最新文章

  1. gdb可以调试python的pdb么
  2. iptables基本规则配置(二)
  3. solr:快速开始
  4. Java学习-046-日志抓取合并后排序问题解决方案之 --- log4j 二次定制,实现日志输出添加延时10ms
  5. mysql导入导出
  6. java中的排序
  7. Microsoft SQL Server Data Tools - Business Intelligence for Visual Studio 2013 http://www.microsoft.com/en-us/download/details.aspx?id=42313
  8. .Net插件编程模型:MEF和MAF[转载]
  9. libvirt(virsh命令总结)
  10. c语言捕捉异常
  11. BZOJ 4276: [ONTAK2015]Bajtman i Okrągły Robin [线段树优化建边]
  12. 通过Yii来理解MVC
  13. jdk,maven,tomcat 的环境配置
  14. 解决Setting property 'source' to 'org.eclipse.jst.jee.server的问题
  15. react生命周期-新增与替换
  16. CentOS 7 安装 Redis
  17. 属性动画和Activity、Fragment过渡动画等
  18. [web开发] - 一些注解的解释
  19. UVA-12569 Planning mobile robot on Tree (EASY Version) (BFS+状态压缩)
  20. java中的URLConnection和HttpURLConnection有什么区别(因为我自己搜到别人写的区别看下来都没有什么区别)

热门文章

  1. Vue+webpack配置实现多页面应用开发
  2. mycat 简单介绍
  3. JS异步加载AMD和CMD
  4. rust 实战 - 实现一个线程工作池 ThreadPool
  5. 【SCOI2007】组队(单调性)
  6. MySQL语法命令之约束篇
  7. python多版本切换
  8. 04 前端之BOM与DOM
  9. 01网络编程(基础知识+OSI七层协议+TCP与UDP)
  10. Netty核心原理