• redis 如何做内存优化?


    1.设置内存上限

    使用maxmemory参数限制最大可用内存,当超出内存上限maxmemory时使用LRU等删除策略释放空间以及防止所用内存超过服务器物理内存。

    2.配置内存回收策略

    Redis使用内存达到maxmemory上限时会触发相应的回收策略。具体策略受maxmemory-policy参数控制,Redis支持6种策略,如下所示:

    • noeviction:默认策略,不会删除任何数据,拒绝所有写入操作并返回客户端错误信息(error)OOM command not allowed when used memory,此 时Redis只响应读操作。

    volatile-lru:根据LRU算法删除具有过期时间的键,直到腾出足够空间为止。如果没有可删除的键对象,回退到noeviction策略。

    allkeys-lru:根据LRU算法删除所有键, 直到腾出足够空间为止。

    • allkeys-random:随机删除所有键,直到腾出足够空间为止。

    • volatile-random:随机删除过期键,直到腾出足够空间为止。

    volatile-ttl:根据键值对象的ttl属性,删除最近将要过期数据。如果 没有,回退到noeviction策略

    3.键值对优化

    缩减键(key)和值(value)的长度,

    • key长度:在设计键时,在完整描述业务情况下,键值越短越好。

    • value长度:值对象缩减比较复杂,常见需求是把业务对象序列化成二进制数组放入Redis。首先应该在业务上精简业务对象,去掉不必要的属性避免存储无效数据。其次在序列化工具选择上,应该选择更高效的序列化工具来降低字节数组大小。以JAVA为例,内置的序列化方式无论从速度还是压缩比都不尽如人意,这时可以选择更高效的序列化工具,如: protostuff,kryo等

    4.共享对象池

    Redis内存维护一个[0-9999]的整数对象池,用于节约内存。 除了整数值对象,其他类型如list,hash,set,zset内部元素也可以使用整数对象池。因此开发中在满足需求的前提下,尽量使用整数对象以节省内存。

    5.字符串优化

    字符串对象是Redis内部最常用的数据类型。所有的键都是字符串类 型,值对象数据除了整数之外都使用字符串存储。在使用过程中应当尽量优先使用整数,比字符串类型更节省空间

    6.编码优化

    Redis对外提供了多种数据类型,但是Redis内部对于不同类型的数据使用的内部编码不一样。内部编码不同将直接影响数据的内存占用和读写效率。

    7.控制键的数量

    当使用Redis存储大量数据时,通常会存在大量键,过多的键同样会消 耗大量内存。同一key,多个value时,使用hash代替string类型

    https://www.cnblogs.com/jxxblogs/p/12248245.html

  • 相关阅读:
    关于大型网站技术演进的思考(二)--存储的瓶颈(2)[转]
    根据 Sourcemap 调试打包后的js
    webpack 中某些配置
    Javascript 中的数组
    浮动元素的display属性
    安装升级npm依赖
    锚点定位
    我所认识的java泛型(主要讨论通配符的使用)
    快速排序的递归非递归实习java
    java 选择排序
  • 原文地址:https://www.cnblogs.com/brxHqs/p/13588583.html
Copyright © 2020-2023  润新知