用快速存取设备,用内存。
将缓存推到离用户最近的地方。
脏缓存清理
redis缓存
热点内存本地缓存
nginx proxy cache缓存
nginx lua缓存
redis缓存
单机版和哨兵模式和集群的cluster模式
redis集中式缓存
//根据商品的id到redis内获取
ItemModel itemModel = (ItemModel)redisTemplate.opsForValue().get("item_" + id);
//若redis内不存在对应的itemModel,则访问下游service
if(itemModel == null) {
itemModel = itemService.getItemById(id);
redisTemplate.opsForValue().set("item_"+id, itemModel);
redisTemplate.expire("item_"+id, 10, TimeUnit.MINUTES);
}
127.0.0.1:6379> keys *
1) "\xac\xed\x00\x05t\x00\x06item_6"
因为redis默认使用的是java的序列化方式
使用自定义方式序列化
/**
* @author Ni Qingzhan
* @create 2020-07-24-16:46
*/
@Component
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600)
public class RedisConfig {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(redisConnectionFactory);
//解决redis key的序列化方式
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringRedisSerializer);
//解决value的序列化方式
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(DateTime.class, new JodaDateTimeJsonSerializer());
simpleModule.addDeserializer(DateTime.class, new JodaDateTimeJsonDeserializer());
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
objectMapper.registerModule(simpleModule);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
return redisTemplate;
}
}
public class JodaDateTimeJsonSerializer extends JsonSerializer<DateTime> {
@Override
public void serialize(DateTime dateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeString(dateTime.toString("yyyy-MM-dd HH:mm:ss"));
}
}
public class JodaDateTimeJsonDeserializer extends JsonDeserializer<DateTime> {
@Override
public DateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
String dateString = jsonParser.readValueAs(String.class);
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
return DateTime.parse(dateString, formatter);
}
}