-
引入maven依赖
org.springframework.boot spring-boot-starter-data-redis -
配置
spring: redis: host: 127.0.0.1 port: 6379 -
注入RedisTemplate
@Autowired private StringRedisTemplate redisTemplate;
-
redis的使用
public Map
> getCatalogJson() { // 给缓存中放入json字符串,拿出的json字符串,还能逆转为能用的对象类型【序列化与反序列化】 // 加入缓存逻辑 String catalogJson = redisTemplate.opsForValue().get("catalogJson"); if (StringUtils.isEmpty(catalogJson)) { // 查询数据库 Map > catalogJsonFromDb = getCatalogJsonFromDb(); // 将数据转换为Json加入到缓存中 String jsonString = JSON.toJSonString(catalogJsonFromDb); redisTemplate.opsForValue().set("catalogJson", jsonString); System.out.println("查询了数据库..."); return catalogJsonFromDb; } // 转换为指定的对象 Map > listMap = JSON.parseObject(catalogJson, new TypeReference -
注意:使用JMeter压测时产生堆外内存溢出问题:OutOfDirectMemoryError
-
产生问题的原因
- pringBoot2.0以后默认使用Lettuce作为操作redis的客户端,它使用netty进行网络通信。
- Lettuce的bug导致netty堆外内存溢出。netty如果没有指定堆外内存,默认使用-Xmx300m,可以通过-Dio.netty.maxDirectMemory去调大堆外内存。
-
解决方案:不能使用-Dio.netty.maxDirectMemory只去调大堆外内存
-
升级Lettuce客户端
-
切换使用jedis客户端
// 需要更改maven依赖
org.springframework.boot spring-boot-starter-data-redisio.lettuce lettuce-coreredis.clients jedis
-
-



