1. 使用Pipeline批量操作:Redis的Pipeline可以一次性发送多个命令,减少网络往返时间。例如:redis-cli --pipe 可以将大量命令打包发送,提高吞吐量。
2. 选择合适的数据结构:String适合简单键值,Hash用于对象存储,List用于队列,Set用于唯一集合,Sorted Set用于排行榜,避免过度使用复杂结构。
CSDN博客
Pipeline是Redis客户端提供的一种方式,让你能够一次性发送多个命令到服务器端,而不必等待每个命令返回后发送下一个命令,从而减少网络RTT时间。举个例子,假设你有1000个SET命令需要执行,如果逐个发送,每次都要经过三次握手(请求-响应),总共3000次RTT,而使用Pipeline可以将这1000个命令打包成一个请求,只需要3次RTT即可完成。
知乎专栏
高效使用Redis的关键是数据结构选择。对于用户信息的存储,使用Hash比多个String键更节省空间,因为Hash可以存储一个对象的所有字段。命令示例:HSET user:1000 name "cc" age 20 sex "male",这样只需一个键就能存多个字段。
掘金文章
快速操作技巧:使用SCAN代替KEYS,避免阻塞主线程。KEYS * 会扫描整个键空间,导致卡顿,而SCAN可以增量迭代:SCAN 0 MATCH user:* COUNT 100。
内存优化:设置maxmemory并配置eviction策略,如allkeys-lru,自动淘汰最近最少使用键。
腾讯云开发者社区
连接池管理:复用连接,避免频繁创建销毁。Java Jedis示例:GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig(); poolConfig.setMaxTotal(20); JedisPool pool = new JedisPool(poolConfig, host, port);
3. 管道(Pipeline)批量提交命令,大大提升性能,避免多次网络交互。
博客园
使用Lua脚本原子执行多命令:EVAL "redis.call('SET', KEYS[1], ARGV[1]); redis.call('EXPIRE', KEYS[1], ARGV[2]); return 1" 1 key value 3600。这样多操作原子化,高效安全。
阿里云文档
监控内存使用:INFO memory 命令查看used_memory和used_memory_rss,及时清理过期键。配置lazyfree-lazy-eviction yes,让删除懒惰执行不阻塞。
快速技巧:MSET key1 val1 key2 val2 原子设置多个键,节省RTT。
StackOverflow中文版
避免大Key:单个键值不要超过10MB,会影响复制和性能。拆分成多个小键,如用Hash代替大String。
FAQ:
Q: Redis内存满了怎么办?
A: 设置maxmemory-policy allkeys-lru,自动淘汰不活跃键。
Q: Pipeline和事务区别?
A: Pipeline只批量发送不保证原子性,事务用MULTI/EXEC保证原子。
Q: 如何监控Redis性能?
A: 用INFO commandstats和SLOWLOG查看慢查询。
Q: 集群模式下高效操作?
A: 用HASH TAG如{user}:1000确保键在同一槽。