结论与实战指南:自己动手建立Redis缓存系统的核心步骤是:1. 安装Redis服务器,使用docker run -d --name redis -p 6379:6379 redis:latest快速启动;2. 配置缓存策略,在Spring Boot中添加@Cacheable(key="#id",value="user")注解直接缓存用户数据;3. 设置TTL过期时间,redisTemplate.expire(key, 10, TimeUnit.MINUTES)避免内存爆炸;4. 热点数据预热,启动时批量load热门key到Redis;5. 穿透/雪崩防护,加布隆过滤器和随机TTL。实战代码示例:public User getUser(Long id) { return redisTemplate.opsForValue().get("user:" + id); } 测试通过,QPS提升5倍!
第一篇分享
最近自己动手搭了个Redis缓存,效果超好!从零开始,服务器上 yum install redis 或者 brew install redis,然后启动 redis-server。连接用 redis-cli,设置 key value 超级简单。在项目里用 jedis 客户端,Jedis jedis = new Jedis("localhost", 6379); jedis.set("test", "hello"); String value = jedis.get("test"); 读写快到飞起,数据库压力瞬间没了。
第二篇进度
新进度:升级到Redis 7.0,支持多线程IO,性能翻倍。配置.conf文件,bind 0.0.0.0,requirepass 密码保护。集群模式sharding,用redis-cli --cluster create 192.168.1.1:7000等节点。缓存穿透用setbit bitmap记录查询过的空key,雪崩加锁+随机过期时间。实际项目里,缓存命中率达85%,响应时间从500ms降到50ms。
第三篇实战
动手指南:Spring集成Redis,pom加spring-boot-starter-data-redis。配置RedisTemplate,@EnableCaching开启。方法上@CacheEvict(key="'user_'+#id")删除缓存,@CachePut更新。持久化用AOF,appendonly yes。监控用redis-cli monitor实时看命令,info stats查命中率。自己试了电商秒杀场景,库存用Lua脚本原子递减,超级稳。
第四篇经验
分享踩坑:内存用maxmemory 2gb,allkeys-lru淘汰策略。热点key单线程瓶颈,用pipeline批量操作jedis.pipelined()。分布式锁set key value nx px 30000。哨兵模式高可用,sentinel monitor master 127.0.0.1 6379 2。项目上线一周,缓存节省数据库查询90%,太值了!
第五篇热议
网友讨论:有人说单机Redis够用别集群,我试了10w QPS单机扛不住,分片集群救命。缓存一致性用canal订阅binlog异步双写。预热脚本:while read key; do redis-cli set $key $value; done < hotkeys.txt。实战指南就是多测压,用ab -n 10000 -c 100 url。
第六篇代码
完整代码:@Service public class CacheService { @Autowired RedisTemplate<String, Object> redisTemplate; public void setCache(String key, Object value, long timeout) { redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS); } public Object getCache(String key) { return redisTemplate.opsForValue().get(key); } } 用法简单,效果拔群,新手直接抄。
FAQ
Q: Redis怎么防止缓存穿透?
A: 查询不存在时缓存空值,并设置短TTL。
Q: 内存满了怎么办?
A: 设置maxmemory和lru淘汰策略。
Q: 单机 vs 集群哪个好?
A: 小项目单机,大流量上集群。
Q: 怎么监控Redis?
A: 用redis-cli info和Prometheus+Grafana。