`

Redis优化

 
阅读更多
redis公认内存管理成本比较高,即占用了过多的内存,redis的作者对这点也很清楚,所以提供了一系列的参数和手段来控制和节省内存:
1.首先最重要的一点是不要开启redis的vm选项,即虚拟内存功能。这个本来是作为redis存储超出物理内存数据的一种数据在内存与磁盘换入换出的一个持久化策略,但是其内存管理成本也很高,并且我们后续会分析此种持久化策略并不成熟,所以关闭vm功能,所以请设置redis.conf文件中 的vm-enabled 为no。

2.其次,最好设置下redis.conf中的maxmemory选项,该选项告诉redis当使用了多少物理内存后就开始拒绝后续的写入请求,该参数能很好的保护好你的redis不会因为使用过多的物理内存而导致swap,最红严重影响性能甚至崩溃。

3.另外redis为不同数据类型分别提供了一组参数来控制内存使用,我们前面详细分析过redis hash是value内部为一个hashmap,如果该map 的成员比较少,则会采用类似一维线性的紧凑格式来存储该map,即省去了大量指针的内存开销,这个从拿书控制对应在redis.conf配置文件中下面两项:
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
hash-max-zipmap-entres

含义是当value这个map内部不超过多少成员时会采用线性紧凑格式存储,默认是64,即 alue内部有64个以下的成员就是使用线性紧凑存储,超过该值就自动转成真正的hashMap。
hash-max-zipmap-value 含义是当alue 这个map内部的每个成员值长度不超过多少字节就会采用线性紧凑存储来节省空间。
以上两个条件,任意一条超过设置就会转成真正的hashmap,也就不会再节省内存了,那么这个值是不是设置的越大越好呢。答案当然是否定的,hashmap的优势就是查找和操作的时间复杂度都是o(1)的,而放弃hash采用一维存储则是o(n)的时间复杂度,如果成员数量很少,则影响不大,否则严重影响性能,所以要权衡这个值的设置。总体上是最根本的时间成本和空间成本上的权衡。

同类参数还有:
list-max-ziplist-entries 512
说明:list数据类型多少节点以下会采用去指针的紧凑存储格式。

list-max-ziplist-value 64
说明:list数据类型节点值大小系哦啊与多少字节会采用紧凑存储格式。
set-max-inset-entries 512
说明set数据类型内部数据如果全部是数值型,且包含多少字节点以下,会采用紧凑存储格式。

redis内部实现没有对内存分配方面做过多的优化,一定程度上回存在内存碎片,不过大多数的情况下,这个不会成为redis的性能瓶颈。不过如果在redis内部存储的大部分是数值型的话,redis内部采用了一个shared integer的方式来省去分配内存的开销,即在系统启动是先分配一个从1~n那么多个数值对象放在一个池子中,如果存储的数据恰好是这个数值范围内的数据,则直接诶从池子里取出对象。并且通过引用技术的方式来分享。这样在系统存储了大量数值下,也能在一定程度上节省内存并且提高ixngneng,这个参数值n的设置需要修改源代码中的一行宏定义:REDIS_SHARED_INTERGERS,该值默认为10000,可以根据自己的需要进行修改,修改后重新编译就可以了。

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    redis优化配置

    完整详细的redis优化配置,目前已经在生产环境使用

    redis集群, tomcat优化以及 MySQL5.6优化

    以上是关于 Redis 集群、Tomcat 优化及 MySQL 5.6 优化的核心知识点和优化策略,这些内容对于提升系统的稳定性和性能具有重要作用。在实际应用中,需要根据具体环境和业务需求进行针对性的调整。

    Redis硬核性能优化

    二、Redis优化策略: 1. 慢查询优化:通过`slowlog`追踪并优化耗时命令,避免使用复杂操作。 2. 集中过期优化:分散过期时间,减少瞬间压力。 3. 内存上限优化:合理设置最大内存限制,避免全盘淘汰策略。 4. fork...

    Redis优化经验总结(必看篇)

    内存管理优化 Redis Hash是value内部为一个HashMap,如果该Map的成员数比较少,则会采用类似一维线性的紧凑格式来存储该Map, 即省去了大量指针的内存开销,这个参数控制对应在redis.conf配置文件中下面2项: hash-...

    redis-windows-Redis7.0.0.zip

    Redis,全称Remote Dictionary Server,是一款开源的、高性能的键值存储系统,广泛应用于...通过理解其数据类型、命令操作、持久化机制以及复制与高可用性策略,开发者可以充分利用Redis优化应用程序,提升系统性能。

    redism秒杀系统优化

    综上,利用Redis优化秒杀系统,结合Java实现分布式Session和用户登录功能,能够有效提升系统性能,应对高并发场景。在实际应用中,还需结合业务需求和服务器资源进行调整和优化,以达到最佳效果。

    Redis基本原理、优化和应用示例.pdf

    2. Redis优化 - **内存优化**:Redis的内存管理很重要,可以通过设置最大内存限制、使用LRU(Least Recently Used)或LFU(Least Frequently Used)策略淘汰不常用数据,以及合理设计数据结构减少内存占用。另外,...

    CentOS7安装redis

    **Redis在CentOS7上的安装指南** Redis是一个高性能的键值数据库,广泛应用于缓存、消息中间件等领域。...了解Redis的数据类型、事务、持久化机制以及主从复制等特性,可以帮助你更好地利用Redis优化应用程序。

    windows下redis操作

    Redis是一款高性能的键值对...理解Redis的基本概念和命令,以及如何在Windows上配置和管理Redis服务,对于在Windows环境中利用Redis优化应用性能至关重要。通过实践和学习,你可以熟练掌握这一强大的内存数据存储系统。

    Redis配置详解.pdf

    本文将详细讲解 Redis 配置,包括官方配置分类、常用的 Redis 配置、如何优化 Redis 配置等内容。 官方配置分类 ---------------- Redis 的官方配置可以分为多个类别,包括 GENERAL、NETWORK、SNAPSHOTTING、...

    Node + Redis 接口性能优化实战

    为什么要使用Redis优化接口性能? -----?原因很简单,快!非常快! 如果遇到大并发,高负载的网站中你是必须要考虑redis的,redis数据库中的所有数据都存储在内存中。由于内存的读写速度远快于硬盘,因此Redis的的的...

    Redis学习笔记-安装、性能、复制等

    ### Redis介绍 Redis是一种开源的键值存储系统,属于NoSQL数据库的一种,它与Memcached相似,但提供了数据持久化的能力。这意味着即使服务重启后,数据也不会丢失。不同于传统的关系型数据库,Redis采用键值对的...

    详谈redis优化配置和redis.conf说明(推荐)

    Redis是一款高性能的键值存储...此外,针对大key小value的情况,使用VM可能更有效,但通常建议保持键和值的大小均衡,以优化Redis的性能。在实际使用中,应根据具体应用场景调整这些配置参数,以达到最佳性能和稳定性。

    redis各个版本.rar

    综上所述,这个压缩包提供了Redis在Linux和Windows平台的不同版本,用户可以根据系统环境和需求选择合适的版本进行安装和配置,同时了解Redis的核心特性和应用场景,有助于更好地利用Redis优化系统性能和设计分布式...

    高并发的优化lua + openresty+redis (实现多级缓存)+限流(掌握)

    高并发的优化lua + openresty+redis (实现多级缓存)+限流(掌握)

    redis-6.2.6编译版本

    首先,Redis 6.2.6 是 Redis 的一个稳定版本,它在前一个版本的基础上进行了性能优化和功能增强。这个编译好的版本省去了用户自行下载源码、配置环境和编译的过程,使得部署更加便捷。以下是一些关键的Redis特性: ...

    redis的windows安装包及可视化工具

    **Redis在Windows环境下的安装与可视化管理** Redis是一款开源、高性能、无模式的键值对存储数据库,常用于缓存、...通过深入理解Redis的数据结构和命令,配合可视化工具,我们可以更好地利用Redis优化应用程序性能。

    springMVC注解+ security + redis 实例

    通过这个实例,你可以了解到如何在Spring MVC应用中使用注解简化开发,如何配置和使用Spring Security进行权限控制,以及如何利用Redis优化数据访问和会话管理。这样的实践对于提升个人技能和理解现代企业级应用的...

Global site tag (gtag.js) - Google Analytics