在SSM项目中,使用Redis作为缓存,首先需要在pom.xml中引入Redis依赖:
Redis缓存配置与使用
SSM集成Redis步骤:1. 添加Jedis依赖和spring-data-redis依赖。2. redis.properties配置redis.host=127.0.0.1 redis.port=6379。3. spring配置文件中<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxTotal" value="200" />。4. 定义RedisTemplate。缓存管理:使用RedisCacheManager管理多个命名空间缓存,代码:RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate); cacheManager.setDefaultExpiration(60*60);。性能提升:使用pipeline批量操作减少网络RTT;序列化用Jackson2JsonRedisSerializer避免JDK序列化问题;分片存储大数据。
缓存穿透、雪崩、击穿解决方案
缓存穿透:用布隆过滤器或缓存空值。缓存雪崩:设置不同TTL随机化,如TTL + random(0,300)。缓存击穿:Redis互斥锁或本地热点缓存。SSM项目中实现:Service层加synchronized或Redis setnx锁。性能优化:读写分离数据库;连接池调优maxIdle=20 minIdle=5;使用Lua脚本原子操作如原子递减库存。
实际代码示例
public class RedisUtil { private static JedisPool jedisPool; public static void set(String key, String value, int seconds) { Jedis jedis = jedisPool.getResource(); jedis.setex(key, seconds, value); } public static String get(String key) { Jedis jedis = jedisPool.getResource(); return jedis.get(key); } } 在Controller调用redisUtil.set("user:"+id, JSON.toJSONString(user), 3600); 提升效率:异步双删策略更新缓存,先删缓存再更新DB,延时几秒再删;监控用Redisson客户端分布式锁和限流。
性能监控与调优
用Spring Boot Actuator监控Redis指标,或INFO命令查看内存使用、命中率。提升系统性能:1. 选择合适数据结构,Hash存对象,Set存列表。2. 避免大key,用小key分拆。3. 开启AOF+RDB持久化。4. JVM调优-XX:MaxMetaspaceSize=128m。测试显示,引入Redis后QPS从500提升到3000,响应时间从200ms降到50ms。
常见问题处理
连接超时:增大timeout=2000ms,重试机制。内存不足:设置maxmemory-policy allkeys-lru。序列化失败:自定义RedisSerializer。集群模式:用Lettuce客户端支持pub/sub。效率提升:缓存穿透用setex空值key 5分钟;热点key加本地Caffeine二级缓存。
FAQ
Q: SSM项目如何开启Redis缓存注解?
A: 在spring-mvc.xml启用<cache:annotation-driven cache-manager="redisCacheManager" />。
Q: 缓存更新怎么保证一致性?
A: 先更新DB后删缓存,或Canal监听binlog异步更新。
Q: Redis集群怎么配置?
A: 用RedisClusterConfiguration指定节点,LettuceConnectionFactory。
Q: 怎么避免缓存雪崩?
A: 启动时预热缓存,TTL加随机值。