Redis默认配置有哪些?怎么优化性能开启高效数据存储?

文章导读
Redis 默认配置主要包括监听端口 6379、绑定本地 localhost、最大内存限制未设置(默认无限制)以及持久化策略关闭等。要优化性能并开启高效数据存储,建议首先修改 bind 地址以允许网络访问,设置合理的 maxmemory 及淘汰策略(如 allkeys-lru)防止内存溢出。其次,选择合适的数据结构(如哈希代替多个字符串),避免大 Key 和大 Value,使用 Pipeline
📋 目录
  1. Redis 基础教程 (一):redis 配置
  2. Redis 性能优化 18 招
  3. Redis 如何做内存优化?
  4. 【redis】部署及参数详解 (吐血整理,建议收藏)
  5. 有了这篇你还说你不会 redis 性能优化、内存分析及优化
  6. FAQ
A A

Redis 默认配置主要包括监听端口 6379、绑定本地 localhost、最大内存限制未设置(默认无限制)以及持久化策略关闭等。要优化性能并开启高效数据存储,建议首先修改 bind 地址以允许网络访问,设置合理的 maxmemory 及淘汰策略(如 allkeys-lru)防止内存溢出。其次,选择合适的数据结构(如哈希代替多个字符串),避免大 Key 和大 Value,使用 Pipeline 批量操作减少网络延迟,并开启连接池复用连接。此外,利用内存压缩编码(如 Ziplist)和定期清理过期键也能显著提升存储效率和响应速度。

Redis 基础教程 (一):redis 配置

一、Redis 基本配置解析 1. 网络配置 bind: 用于指定 Redis 服务器监听的 IP 地址,多个地址之间用空格分隔。默认情况下,Redis 只监听本机 (localhost),若要使其可从网络访问,需要明确指定 IP 地址。port: Redis 服务监听的端口号,默认为 6379。tcp-backlog: 设置待处理连接队列的最大长度。当 Redis 服务器接收到大量连接请求时,此参数决定了等待处理的连接数上限。2. 内存配置 maxmemory: 设置 Redis 实例使用的最大内存限制。当达到此限制时,Redis 可以根据配置的 maxmemory-policy 策略来决定如何处理新数据的写入。maxmemory-policy: 当 maxmemory 被触及时,决定如何处理新数据。有六种策略可供选择,包括 noeviction(拒绝写入并返回错误)、volatile-lru(移除最近最少使用的过期键) 等。3. 持久化配置 save: 配置 RDB 快照保存条件。例如 save 900 1 表示如果 900 秒内至少有一个键被更改,则保存一次快照。appendonly: 开启 AOF 持久化。设置为 yes 后,Redis 会将所有写操作记录到 AOF 文件中,重启后可以从 AOF 文件恢复数据。4. 性能配置 hash-max-zipmap-entries: 控制哈希类型的内部表示形式,当哈希元素数量小于此值时,使用更为节省空间的紧凑表示。activerehashing: 如果设置为 no,可以避免在 CPU 繁忙时执行 rehash 操作,但可能导致内存使用率更高。(2024 年 7 月 2 日)

Redis 性能优化 18 招

1. 选择合适的数据结构 Redis 支持多种数据结构,如字符串、哈希、列表、集合和有序集合。根据实际需求选择合适的数据结构可以提高性能。如果要存储用户信息,考虑使用哈希而不是多个字符串:代码语言:javascript AI 代码解释 jedis.hset("user:1001","name","Alice");jedis.hset("user:1001","age","30"); 这样可以高效地存储和访问多个属性。2. 避免使用过大的 key 和 value 较长的 key 和 value 会占用更多内存,还可能影响性能。保持 key 简短,并使用简洁的命名约定。比如:将"user:1001:profile"简化为"u:1001:p"。还可以做压缩等其他优化。如果对大 key 问题,比较感兴趣可以看看我的另一篇文章《从 2s 优化到 0.1s,我用了这 5 步》,里面有非常详细的介绍。3. 使用 Redis Pipeline 对多个命令的批量操作,使用 Pipeline 可以显著降低网络延迟,提升性能。比如,批量设置 key 可以这样做:代码语言:javascript AI 代码解释 Pipeline p=jedis.pipelined();for(int i=0;i<1000;i++){p.set("key:"+i,"value:"+i);}p.sync(); 这样一次性可以发送多个命令,减少了网络往返时间,能够提升性能。4. 控制连接数量 过多的连接会造成资源浪费,使用连接池可以有效管理连接数量。比如,使用 JedisPool: 代码语言:javascript AI 代码解释 JedisPool pool=newJedisPool("localhost");try(Jedis jedis=pool.getResource()){jedis.set("key","value");} 有了连接池,这样连接就会被复用,而不是每次都创建新连接,使用完之后,又放回连接池。能有效的节省连接的创建和销毁时间。5. 合理使用过期策略 设置合理的过期策略,能防止内存被不再使用的数据占满。例如,缓存热点数据可以设置过期时间。比如,对会话数据设置过期时间:代码语言:javascript AI 代码解释 jedis.setex("session:12345",3600,"data"); Redis 内部会定期清理过期的缓存。6. 使用 Redis 集群 数据量增大时,使用 Redis 集群可以将数据分散到多个节点,提升并发性能。可以将数据哈希分片到多个 Redis 实例。这样可以避免单个 Redis 实例,数据太多,占用内存过多的问题。(截至 2025 年 11 月 17 日)

Redis 如何做内存优化?

Redis 本身提供了一系列配置、算法和工具来实现内存优化。下面将介绍以下几个方面的技术和策略:1、Redis 的内存模型 Redis 的内存处理方式是基于"in-memory data structures"即将所有的数据都存放在内存中。如果到达了内存上限,则会发生 OOM 错误。Redis 会进行周期性的内存回收,包括 - 及不限于以下几个方面:删除过期键值 根据 LRU(Least Recently Used) 算法淘汰长时间未使用的键/值 数据库压缩 2、开启内存压缩 在 Redis 默认的内存回收机制中,虽然会清除过期的键值对,但是只有在访问键值对时才会真正删除。而如果在存储大量短生命期的数据 (比如计数器),就容易出现内存占满的情况。为了防止这种情况,可以开启 Redis 内存压缩功能,让所有键值对占用的内存更加紧凑。通过 Redis 提供的 Ziplist 和 Intset 等编码来压缩字符串和整数类型的数据。这些接口可以有效地减少 Redis 服务器上的内存使用。(2025 年 10 月 31 日的资料)

【redis】部署及参数详解 (吐血整理,建议收藏)

redis 是基于 C 语言开发的内存数据库,也是目前最流行的的 K-V 存储数据库。Redis 在应对高并发、低延迟、海量数据处理的分布式系统中展现了其卓越的性能,它已经成为互联网大型系统的标准配置了。#首先下载安装包:代码语言:javascript AI 代码解释 wget http://download.redis.io/releases/redis-4.0.10.tar.gz #新建 redis 用户 代码语言:javascript AI 代码解释 shell>groupadd redis shell>useradd-g redis-d/home/redis redis #解压编译 代码语言:javascript AI 代码解释 shell>tar-zxvf redis-4.0.10.tar.gz shell>cd redis-4.0.10shell>make shell>make install//install 的时候,redis 的命令会被拷贝到/usr/local/bin 下 #复制执行程序到 bin 目录,主要是为了便于管理,此步骤也可省略。代码语言:javascript AI 代码解释 shell>mkdir bin shell>cp src/redis-server bin/shell>cp src/redis-check-aof bin/shell>cp src/redis-cli bin/shell>cp src/redis-sentinel bin/shell>cp src/redis-trib.rb bin/shell>cp src/redis-check-rdb bin/shell>cp src/redis-benchmark bin/ #新建 conf 配置文件目录 代码语言:javascript AI 代码解释 shell>mkdir conf shell>cp redis.conf conf/ #修改程序的属组 代码语言:javascript AI 代码解释 shell>chown-Rredis.redis redis-4.0.10/ #设置软连接,不把 redis 目录固定到指定的版本上,有利于后续升级 代码语言:javascript AI 代码解释 shell>ln-sv redis-4.0.10/usr/local/redis shell>chown-Rredis.redis/usr/local/redis #启动 redis 服务 #客户端交互 代码语言:javascript AI 代码解释 shell>redis-cli-h127.0.0.1-p6379//不加-h 和-p 的话默认是 127.0.0.1 6379127.0.0.1:6379> #关闭 redis 服务 代码语言:javascript AI 代码解释 shell>redis-cli shutdown 2. 配置文件参数说明 #通用配置 (GENERAL) 1. daemonize no redis 是否作为守护进程的方式运行。2. pidfile /var/run/redis.pid(资料日期为 2024 年 11 月 27 日)

Redis默认配置有哪些?怎么优化性能开启高效数据存储?

有了这篇你还说你不会 redis 性能优化、内存分析及优化

Redis 利用了多路 I/O 复用机制,处理客户端请求时,不会阻塞主线程;Redis 单纯执行 (大多数指令) 一个指令不到 1 微秒,如此,单核 CPU 一秒就能处理 1 百万个指令 (大概对应着几十万个请求吧),用不着实现多线程 (网络才是瓶颈)。1. 优化网络延时 Redis 客户端和服务器的通讯一般使用 TCP 长链接。如果客户端发送请求后需要等待 Redis 返回结果再发送下一个指令,客户端和 Redis 的多个请求就构成下面的关系:❝(备注:如果不是你要发送的 key 特别长,一个 TCP 包完全能放下 Redis 指令,所以只画了一个 push 包) ❞这样这两次请求中,客户端都需要经历一段网络传输时间。但如果有可能,完全可以使用 multi-key 类的指令来合并请求,比如两个 GET key 可以用 MGET key1 key2 合并。这样在实际通讯中,请求数也减少了,延时自然得到好转。如果不能用 multi-key 指令来合并,比如一个 SET,一个 GET 无法合并。怎么办?Redis 中有至少这样两个方法能合并多个指令到一个 request 中,一个是 MULTI/EXEC,一个是 script。前者本来是构建 Redis 事务的方法,但确实可以合并多个指令为一个 request,它到通讯过程如下。至于 script,最好利用缓存脚本的 sha1 hash key 来调起脚本,这样通讯量更小。这样确实更能减少网络传输时间,不是么?但如此以来,就必须要求这个 transaction / script 中涉及的 key 在同一个 node 上,所以要酌情考虑。如果上面的方法我们都考虑过了,还是没有办法合并多个请求,我们还可以考虑合并多个 responses。比如把 2 个回复信息合并:这样,理论上可以省去 1 次回复所用的网络传输时间。这就是 pipeline 做的事情。不是任意多个回复信息都可以放进一个 TCP 包中,如果请求数太多,回复的数据很长 (比如 get 一个长字符串),TCP 还是会分包传输,但使用 pipeline,依然可以减少传输次数。pipeline 和上面的其他方法都不一样的是,它不具有原子性。所以在 cluster 状态下的集群上,实现 pipeline 比那些原子性的方法更有可能。(撰于 2021 年 4 月 19 日)

FAQ

Redis 默认监听端口是多少?

Redis 默认监听的端口号是 6379。

如何防止 Redis 内存溢出?

可以通过设置 maxmemory 参数限制最大内存,并配置 maxmemory-policy 策略(如 allkeys-lru)来自动淘汰旧数据。

Redis默认配置有哪些?怎么优化性能开启高效数据存储?

什么是 Redis Pipeline?

Pipeline 允许客户端一次发送多个命令,服务器端集中处理后一次性返回结果,减少了网络往返次数,显著提升性能。

如何优化大 Key 问题?

保持 key 简短,使用简洁的命名约定,例如将"user:1001:profile"简化为"u:1001:p",还可以考虑对 value 进行压缩。