Redis(三)节省内部空间优化
总体原则:key的名称不易过长,剩下的所有 能用纯数字表示的尽量用
Redis的每一个键值都是用一个redisObject结构体表示的
结构体中有:
键值的类型(string/list/hash/set/zset)
内部编码方式(下面重点讲)
该键值被多少次引用
内容指针
若内容指针指的是字符串,则内容指针指向sdshdr的结构体
(该结构体中 字符串长度、buf中剩余空间、buf字符数组[存字符串])
存储键值空间 = redisObject大小 + sdshfr大小 + 字符串大小
若内容指针指的是数字,则内容指针直接就是数字
存储键值空间 = redisObject大小
redis内部预先存有键值为0~9999的数字键值
字符串(编码方式RAW、INT):
RAW redisObject内容指针指“纯字符串”
INT redisObject内容指针指“数字”
散列表(两种编码方式 HT ZIPLIST)
配置文件 hash-max-ziplist-entries 512
hash-max-ziplist-value 64
当键值的字段个数小于第一个值且字段名、字段值的字节数小于第二个值时用ZIPLIST
ZIPLIST:牺牲“读性能”(O(n))换取极高的“空间利用率”,适合表在较小时使用
HT:字段名和字段值 都是 redisObject ;读性能为O(1)
列表(编码方式 LinkedList ziplist)
ziplist:同上
LinkedList:每个节点都是redisObject的双向列表
集合(编码方式 HT INTSET)
INTSET:集合中全是数字,且数字的个数小于指定值时使用
每个数字占位可变的动态数组
HT:字段值为nil,在集合缩小时,不会倒退到INSET
有序集合(编码方式 SkipList ziplist)
ziplist:同上
SkipList:(由散列表和跳跃表组成)
散列表存储元素、分数映射
跳跃表 排序
Redis(三)节省内部空间优化的更多相关文章
- 《闲扯Redis三》Redis五种数据类型之List型
一.前言 Redis 提供了5种数据类型:String(字符串).Hash(哈希).List(列表).Set(集合).Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要. ...
- DB2支持的三种表空间SMS、DMS、DMS的自动存储
DB2支持的三种表空间SMS.DMS.DMS的自动存储 DB2中,表空间是数据库与这个数据库中存储的表之间的逻辑层.表空间在数据库中创建,表在表空间中创建.容器是一个物理存储设备.它可以由目录名.设备 ...
- 关于tarjan算法的空间优化
最近随着对tarjan算法理解的加深,我发现用另外一种途径实现tarjan的方法,且可以省去DFN数组,大大节省了空间.经过大量测试,已经无误.以下将分阶段阐述进行优化的过程. 第一阶段 下面来说一下 ...
- 第三章 Java程序优化(待续)
字符串优化处理 String对象及其特点 String对象是java语言中重要的数据类型,但它并不是Java的基本数据类型.在C语言中,对字符串的处理最通常的做法是使用char数组,但这种方式的弊端是 ...
- [SHOI2007] 书柜的尺寸 思维题+Dp+空间优化
Online Judge:Luogu-P2160 Label:思维题,Dp,空间优化 题面: 题目描述 给\(N\)本书,每本书有高度\(Hi\),厚度\(Ti\).要摆在一个三层的书架上. 书架的宽 ...
- Redis 入门到分布式 (七)Redis复制的原理与优化
一.目录 Redis复制的原理与优化 什么是主从复制 全量复制和部分复制 复制的配置 故障处理 开发运维常见问题 二. 什么是主从复制 1.单机有什么问题? 单机如果机器故障,那么久无法及时提供服务: ...
- Redis慢查询配置和优化
目录 一.介绍 二.参数配置 sql动态配置 配置文件设置 三.sql操作 四.优化 一.介绍 慢查询只记录redis执行时间,并不记录redis服务到客户端之间的网络问题. 超过多少毫秒的才被记录 ...
- centos 安装oracle 11g r2(三)-----表空间创建
centos 安装oracle 11g r2(三)-----表空间创建 创建表空间前要保证监听与数据库实例已经启动 1.启动监听 [oracle@localhost ~]$ lsnrctl start ...
- OO第三次电梯作业优化
目录 第三次电梯作业个人优化 前言 优化思路 一.调度器 二.电梯 第三次电梯作业个人优化 前言 由于个人能力有限,第二次电梯作业只能完成正确性设计,没能进行优化,也因此损失了强测分数,于是第三次电梯 ...
随机推荐
- Codeforces 732D [二分 ][贪心]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: n天进行m科考试,每科考试需要a的复习时间,n天每天最多可以考一科.并且指定哪天考哪科. 注意考试那天不能复习. 问最少需要多少天可全部通过考试. ...
- 搭建fedora开发环境 common lisp, c++, go
第三方软件库: http://download1.rpmfusion.org/free/fedora/releases/25/Everything/x86_64/os/repoview/index.h ...
- chrome livestyle插件
1.sublime 安装 >step1: ctrl+shift+p >step2:ip >step3:livestyle >step4:配置ho ...
- jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示
类似的文章园子里已有,请看这里,个人感觉稍显复杂,日前也打算写一个简单的给项目用,一些关键点记录于此.最终效果如下: 后端使用Asp.net mvc5,前端框架有:jquery.validate.jq ...
- Zepto 使用过程中遇到的问题总结
简言之,zepto 是移动端的 jQuery,虽然很多地方不完全相同,不过详细的内容就不介绍了,主要把使用 zepto 时遇到过的问题总结一下. zepto 是分成多个模块的,最基础的文件不包含 to ...
- ZeroC Ice 暂记
摘自: http://weibo.com/p/1001603869896789339575 原文地址: http://www.oschina.net/question/865233_242146 吴治 ...
- 关于conky
- NHibernate系列文章二十四:NHibernate查询之Linq查询(附程序下载)
摘要 NHibernate从3.0开始支持Linq查询.写Linq to NHibernate查询就跟写.net linq代码一样,非常灵活,可以很容易实现复杂的查询.这篇文章使用Linq to NH ...
- 关于char的定义语句,正确的有()
A.char c = "a"; 不对,char只能是单引号 B.char c = '\''; 对,\'是转义字符,为'单引号 C.chae c='cafe' ...
- 监听JVM的几个命令(可用于linux 本机)
1. jstat 这个命令对于查看Jvm的堆栈信息很有用.能够查看eden,survivor,old,perm等heap的capacity,utility信息 对于查看系统是不是有能存泄漏以及参数设置 ...