前言

你可曾面临这种问题,高并发条件下数据必须99%cache命中才能满足性能需求?

你可曾面对这种场景,对cache集群不断扩容是否让你感到厌烦?

那么是否有一种办法在提高缓存命中率的同时,又能提高缓存集群键个数,甚至于提高整个集群的吞吐?

本文将从实践出发,对编码方式及压缩算法进行介绍,并分享了在真实项目中使用缓存压缩对性能的影响。

(想自学习编程的小伙伴请搜索圈T社区,更多行业相关资讯更有行业相关免费视频教程。完全免费哦!)

探索篇

提高缓存命中率有很多种方法:选择好的缓存淘汰算法。固然有一些本地缓存支持LFU或者更新的Tiny LFU算法。不过对于分布式缓存而言,memcached和redis底层都使用了LRU算法,并不支持淘汰算法的替换。

由此,我们想到第二个思路:提升集群item数量。

在不扩容、不拆分item的前提下,便理所应当的想到了对item进行压缩存储。

那么接下来需要确定的就是具体的压缩方案:即对何种数据进行压缩才是最有效的?采用何种压缩算法才是最适合我们的系统的?

编码方式

不同的压缩算法之间区别最大的即在于编码方式。所谓编码其本质即把信息进行某种方式的转换,以便让信息能够装载进目标载体。从信息论的角度来说,编码的本意并非改变信息的熵密度,而只是改变信息的表现形式。

游程编码:最易理解的编码方式

该算法的实现是用当前数据元素以及该元素连续出现的次数来取代字符串中连续出现的数据部分。

aaaaaaaaaabbbaxxxxyyyzyx

字符串长度为24,使用游程算法,我们用较短的字符串后加一个计数值来替换游程对象。

a10b3a1x4y3z1y1x1

通过游程编码编码后的字符串长度为17,只有原先的71%,但仍有优化的余地,比如对于只出现一次的字符,不在后面追加1.

a10b3ax4y3zyx

这样编码得来的字符串只有13,只有原先的51%

熵编码

熵编码被人所熟知的一种即是Huffman编码,它的原理是根据字符在原始串中出现的概率。通过构造一颗二叉树来为每个字符产生对应的码字,又称最佳编码。

算术编码

算术编码同样是一种熵编码,它同样是基于字符在原始

一花一世界,一树一菩提:编码压缩探索与实践相关推荐

  1. 一花一世界 一树一菩提

    一花一世界 一树一菩提 王尔德曾说:"一花一世界,一树一菩提",是一个西方人对禅意的的理解. 花作为一个纯粹的实体,本身无任何含义,这就是它的空之所在,所以他能被人赋予一个世界的含 ...

  2. [思语]_一花一世界,一树一菩提

    一花一世界,一树一菩提 作者:洪尚飞 写于 2005月 11 月 30 日        人类所有的信仰.理想和精神寄托,都包含在那个字里面.爱,涵盖了人类所有的思想和行为.每个人都需要被爱,每个人都 ...

  3. 一花一世界,一树一菩提

    很多时候,人会钻牛角尖,一个念想,一份固执,或许到头来,伤的自己体无完肤,但正如所看到的一句话"一花一世界,一树一菩提",人最终为的是内心的一份交待,一份自己的成全.世界很大,因为放眼望去,无法穷尽: ...

  4. 一花一世界,一叶一菩提

    娇花暮红,绿叶朝舒,赞花惊艳群芳.落红纷下,枯叶终萎,叹叶暗遮芬芳. --题记 阳春三月,群芳争艳,朵朵芬芳皆向阳,唯遮新叶阴影下:酷夏六月,繁花犹盛,片片花瓣沐朝阳,只留密叶笼夕阳:金秋九月,残花始 ...

  5. huffman树和huffman编码

    不知道为什么,我写的代码都是又臭又长. 直接上代码: #include <iostream> #include <cstdarg> using namespace std; c ...

  6. 树的Prufer 编码和最小生成树计数

    Prufer数列 Prufer数列是无根树的一种数列.在组合数学中,Prufer数列由有一个对于顶点标过号的树转化来的数列,点数为n的树转化来的Prufer数列长度为n-2.它可以通过简单的迭代方法计 ...

  7. 数据结构实验三:Huffman树及Huffman编码的算法实现

    Exp03 Huffman树及Huffman编码的算法实现 Author: Maskros 实验目的 了解该树的应用实例,熟悉掌握Huffman树的构造方法及Huffman编码的应用, 了解Huffm ...

  8. 心若无尘,一花一世界,一鸟一天堂

    心若无尘,一花一世界,一鸟一天堂 貌似很美的样子,可是不管怎么看,我确是怎么也读不懂这句话的意思,或许只能意会,不能言传? 照我的理解,拥有这样心态的人,应该是想法很简单的人了吧,那么生活,是不是就会 ...

  9. deflate树与deflate编码

    http://www.cnblogs.com/zengzy/p/5156130.html 关于deflate树,能搜到的资料非常少,这个概念来自gzip的压缩算法,是由huffman树转变过来的.这里 ...

最新文章

  1. 物联网安全领域都有哪些机会?来看看这19家公司都是怎么玩的
  2. 用python写脚本看什么书-终于知晓python编写脚本入门教程
  3. Citrix各系列产品安装光盘资源下载链接
  4. 075_JSON.parse()
  5. Java中使用mysqldump实现mysql数据库备份并将sql文件打成zip压缩包
  6. http://www.ybtsoft.com/
  7. Arthas 3.1.2 版本发布 | 增加 logger/heapdump/vmoption 命令
  8. Pytest标记用例失败之xfail
  9. 在Ubuntu Linux下安装Tomcat
  10. tomcat下配置ssl
  11. 鏖战九载,Google 是否会因 Oracle 而弃用 Java?
  12. 不看好的Android火了,看好的WebOS死了
  13. 基于Python实现socket远程木马
  14. 创业案例:如何调整股权,才不伤害合伙人感情?
  15. 计算机专业女生节祝福语,大学女生节简短祝福语
  16. 分类问题中正负样本分布不均衡问题的解决方法
  17. win10下实现PyAudio持续监听并录音(麦克风/扬声器)
  18. Ring3无敌进程让你的进程变得和smss.exe一样支持64
  19. 数据库引擎和引擎的特点
  20. 工作常用工作管理软件介绍

热门文章

  1. Android安全之DM-verity中的Device Mapper机制分析
  2. 从亿级数据量的url中找出出现次数最多的前十个url
  3. spring的redirect和foward
  4. 【开源分享】基于Python+OpenCV+PyQt5车牌识别(GUI界面)
  5. frameworks/base/Android.mk:135: *** commands commence before first target. Stop.
  6. 修改Ubuntu镜像源
  7. 太强了!GitHub上白嫖的SpringCloud微服务进阶宝典,啃完感觉能吊锤面试官!
  8. “假量/刷量”江湖的初入秘籍
  9. S7-1500T 飞锯(追剪应用)
  10. 算法提高 棋盘多项式