`
m635674608
  • 浏览: 5043058 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Redis学习手册(内存优化)

 
阅读更多

一、特殊编码:

    自从Redis 2.2之后,很多数据类型都可以通过特殊编码的方式来进行存储空间的优化。其中,Hash、List和由Integer组成的Sets都可以通过该方式来优化存储结构,以便占用更少的空间,在有些情况下,可以省去9/10的空间。
    这些特殊编码对于Redis的使用而言是完全透明的,事实上,它只是CPU和内存之间的一个交易而言。如果内存使用率方面高一些,那么在操作数据时消耗的CPU自然要多一些,反之亦然。在Redis中提供了一组配置参数用于设置与特殊编码相关的各种阈值,如:
    #如果Hash中字段的数量小于参数值,Redis将对该Key的Hash Value采用特殊编码。
    hash-max-zipmap-entries 64
    #如果Hash中各个字段的最大长度不超过512字节,Redis也将对该Key的Hash Value采用特殊编码方式。
    hash-max-zipmap-value 512
    #下面两个参数的含义基本等同于上面两个和Hash相关的参数,只是作用的对象类型为List。
    list-max-ziplist-entries 512
    list-max-ziplist-value 64
    #如果set中整型元素的数量不超过512时,Redis将会采用该特殊编码。
    set-max-intset-entries 512
    倘若某个已经被编码的值再经过修改之后超过了配置信息中的最大限制,那么Redis会自动将其转换为正常编码格式,这一操作是非常快速的,但是如果反过 来操作,将一个正常编码的较大值转换为特殊编码,Redis的建议是,在正式做之前最好先简单测试一下转换效率,因为这样的转换往往是非常低效的。
   
二、BIT和Byte级别的操作:

    从Redis 2.2开始,Redis提供了GETRANGE/SETRANGE/GETBIT/SETBIT四个用于字符串类型Key/Value的命令。通过这些命 令,我们便可以像操作数组那样来访问String类型的值数据了。比如唯一标识用户身份的ID,可能仅仅是String值的其中一段子字符串。这样就可以 通过GETRANGE/SETRANGE命令来方便的提取。再有就是可以使用BITMAP来表示用户的性别信息,如1表示male,0表示female。 用这种方式来表示100,000,000个用户的性别信息时,也仅仅占用12MB的存储空间,与此同时,在通过SETBIT/GETBIT命令进行数据遍 历也是非常高效的。
   
三、尽可能使用Hash:

    由于小的Hash类型数据占用的空间相对较少,因此我们在实际应用时应该尽可能的考虑使用Hash类型,比如用户的注册信息,这其中包括姓名、性别、 email、年龄和口令等字段。我们当然可以将这些信息以Key的形式进行存储,而用户填写的信息则以String Value的形式存储。然而Redis则更为推荐以Hash的形式存储,以上信息则以Field/Value的形式表示。
    现在我们就通过学习Redis的存储机制来进一步证明这一说法。在该篇博客的开始处已经提到了特殊编码机制,其中有两个和Hash类型相关的配置参 数:hash-max-zipmap-entries和hash-max-zipmap-value。至于它们的作用范围前面已经给出,这里就不再过多的 赘述了。现在我们先假设存储在Hash Value中的字段数量小于hash-max-zipmap-entries,而每个元素的长度又同时小于hash-max-zipmap-value。 这样每当有新的Hash类型的Key/Value存储时,Redis都会为Hash Value创建定长的空间,最大可预分配的字节数为:
    total_bytes = hash-max-zipmap-entries * hash-max-zipmap-value
    这样一来,Hash中所有字段的位置已经预留,并且可以像访问数组那样随机的访问Field/Value,他们之间的步长间隔为hash-max- zipmap-value。只有当Hash Value中的字段数量或某一新元素的长度分别超过以上两个参数值时,Redis才会考虑将他们以Hash Table的方式进行重新存储,否则将始终保持这种高效的存储和访问方式。不仅如此,由于每个Key都要存储一些关联的系统信息,如过期时间、LRU等, 因此和String类型的Key/Value相比,Hash类型极大的减少了Key的数量(大部分的Key都以Hash字段的形式表示并存储了),从而进 一步优化了存储空间的使用效率。

 

ziplist的最大的好处就是相比skiplist节约大量内存,但是在插入、删除、查询等操作上的时间复杂度与skiplist都是无法比拟的,当保存的数据比较少时,操作的时间自然可以接受,内存就是关键因素。

ziplist在Redis中主要用于Hash Table、List、Sorted Set数据类型小范围数据的存储,本文描述的ziplist的存储都是无序的,如何实现在Sorted Set中的有序存储待以后分析,无序变有序无疑又增加的时间复杂度。

总之,ziplist就是一种用时间换空间的策略。

 

http://www.cnblogs.com/stephen-liu74/archive/2012/04/11/2370521.html

http://www.searchtb.com/2011/05/redis-storage.html

分享到:
评论

相关推荐

    Redis学习指南 Redis学习手册

    Redis,全称Remote Dictionary Server,是一款高性能的键值存储系统,常被用于...通过阅读"Redis学习手册",你将能够深入了解Redis的工作原理,熟练使用其各种功能,从而在你的IT职业生涯中发挥出Redis的强大效能。

    redis,phpredis中文手册

    PHPRedis是Redis的一个PHP扩展模块,提供了丰富的API接口用于与Redis实例交互,该模块效率高,支持链表排序等功能,非常适合用于创建内存级别的模块业务关系。 phpredis的使用方法相对直观,用户可以通过phpredis...

    redis使用手册官方文档(中文)

    Redis,全称Remote Dictionary Server,是一款高性能的键值存储系统,常被用于数据库、缓存以及消息中间件的角色。...通过深入学习和实践,你可以熟练掌握Redis,将其应用到各种场景中,提升系统的效率和可靠性。

    Redis 3.2 手册-英文原站 CHM

    在并发控制方面,Redis使用单线程模型处理客户端请求,通过优化内存管理和I/O操作,实现了高效的性能。然而,这意味着Redis不支持多线程并发写入,开发者需要在应用层面解决这类问题。 在安全性方面,Redis支持连接...

    redis入门手册(中文)

    10. **性能优化**:学习如何调整Redis的性能,如调整内存使用、避免阻塞操作、使用合适的数据结构等。 通过《Redis中文入门手册》,读者将能够逐步建立起对Redis的整体认识,熟练掌握其基本操作,并能根据实际需求...

    Redis实战手册

    总的来说,《Redis实战手册》是一本全面且深入的Redis学习资料,无论是初学者还是经验丰富的开发者,都能从中受益。通过阅读本书,你可以了解到Redis的全貌,掌握其核心功能,以及如何在实际开发中充分发挥Redis的...

    redis学习pdf手册

    优化Redis性能的方法包括合理设置内存限制、避免大key、利用数据结构特性、减少网络延迟等。 十二、应用案例 1. 缓存:Redis常用于网站动态数据的缓存,提高响应速度。 2. 计数器:如统计文章浏览次数。 3. 消息...

    redis详细使用手册

    9. **性能优化**:Redis的性能优化包括内存管理、网络调优、命令优化等方面,比如设置合适的内存限制、禁用不必要的持久化、使用连接池等。 10. **安全策略**:了解如何配置Redis的访问控制,如设置密码认证、限制...

    redis中文参考手册.pdf

    首先,Redis中文参考手册是学习Redis的基础,它详细介绍了Redis的所有命令、数据类型和配置选项。在手册中,你会了解到Redis支持的基本数据结构,如字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)和有序...

    redis使用中文参考手册

    性能优化涉及内存管理、客户端缓存、命令限制等方面,手册会给出实用的建议和最佳实践。 八、发布/订阅(Pub/Sub) Redis的发布/订阅功能允许不同客户端之间通过频道进行异步通信,常用于实现消息队列。手册会阐述...

    Redis命令参考手册完整版(PDF)

    Redis是一款开源的、高性能的键值存储系统,广泛应用于数据缓存、消息中间件、数据库等领域。本PDF手册详尽地介绍了Redis的所有命令及其用法,...通过深入学习和实践,你可以更好地掌握Redis,提高应用的性能和可靠性。

    阿里云开发手册-Redis,全面介绍redis开发规范

    这包括但不限于内存管理、网络优化、命令设计和使用策略,以及如何有效地利用Redis的数据结构(如哈希、列表、集合、有序集合等)来提高应用程序的性能。此外,还可能涉及了如何监控和分析Redis的运行状态,以便在...

    redis的学习手册

    在性能优化方面,Redis手册会指导如何调整配置参数,如内存管理、最大连接数、客户端超时等,以适应不同的应用场景。同时,还会讨论如何监控Redis的运行状态,使用`INFO`命令查看各项指标,以及利用第三方工具进行更...

    redis使用文档手册

    Redis是一款高性能的键值对数据库,它以内存存储为主,数据持久化为辅,提供高速的数据读写操作。Redis在很多场景下被广泛应用于缓存、消息队列、计数系统以及作为数据存储等用途。以下是对Redis使用文档手册中的...

    redis手册.zip

    通过阅读Redis手册.chm,你可以深入理解Redis的各个概念、命令及最佳实践,包括但不限于如何设置Redis服务器、如何操作各种数据类型、如何配置持久化、复制和集群,以及如何解决常见的问题和优化性能。这个手册是...

    Oracle\tomcat\redis部署手册

    在本篇"Oracle\tomcat\redis部署手册"中,我们将主要关注Oracle数据库、Tomcat应用服务器以及Redis缓存服务的部署过程。首先,我们从Oracle 11g的安装和配置开始。 1. Oracle 11g 安装与配置: Oracle 11g是一款...

    Redis参数配置和命令使用手册

    本手册将详细阐述Redis的主要参数配置以及常用命令的使用方法。 首先,我们来看Redis的参数配置。Redis的配置文件通常命名为`redis.conf`,在该文件中,你可以调整各种参数以满足特定的性能和安全性需求。例如: 1...

    redis开发运维完整版本

    - 性能优化:包括内存管理、客户端优化、网络优化等,以提高Redis的响应速度和处理能力。 - 日常运维:监控、备份策略、安全措施等,确保Redis的稳定运行。 通过这些知识的学习,开发者和运维人员可以有效地利用...

    HAP框架-Redis入门手册.docx

    本文档是《HAP框架-Redis入门手册》的1.0版本,由DongHongAn和WuSheng于2016年7月12日创建,并在2016年7月24日进行了最后更新。主要目标是为HAP框架的使用者提供关于Redis数据库的基础知识、常用命令、客户端工具...

Global site tag (gtag.js) - Google Analytics