使用redis进行缓存
2017-07-27 11:16
357 查看
前台系统访问后台管理系统,如果要使用缓存,那么缓存逻辑一定放在后台系统。且要放在业务层。
当然如果你想在前台系统做缓存,也是可以通过redis,一样的,就是在前台系统service调用restapi前进行redis查询。后台做就是在service查询数据库之前进行redis查询。
当使用redis缓存时,要注意,在业务代码(service类)中,首先先从redis中去获取,然后return。但是这里要用try-catch。因为我们的业务不能因缓存服务器宕机而抛异常。
我们在使用redis作缓存时,如果使用以下方式
private JdkSerializationRedisSerializer jdkSerializer = new JdkSerializationRedisSerializer();
@Autowired
private RedisTemplate<Serializable, Serializable> redisTemplate;
public Object get(Serializable key) {
Object obj = redisTemplate.opsForValue().get(key);
return jdkSerializer.deserialize((byte[]) obj);//当某service调用该方法后返回Object后,要根据你当时是存的什么类型,然后强转成该类型
}
public void set(Serializable key, Object value, Long minutes) {
redisTemplate.opsForValue().set(key, jdkSerializer.serialize(value), minutes, TimeUnit.MINUTES);
}
public void set(Serializable key, Object value) {
redisTemplate.opsForValue().set(key, jdkSerializer.serialize(value));// 永久保存
}
public void del(Serializable key) {
redisTemplate.delete(key);
}
public void expire(Serializable key, Long minutes) {
redisTemplate.expire(key, minutes, TimeUnit.MINUTES);
}
那么,要传入的value要实现Serializable接口。因为jdkSerializer.serialize(value)方法在执行时会进入
if (!(object instanceof Serializable)) {
throw new IllegalArgumentException(getClass().getSimpleName() + " requires a Serializable payload " +
"but received an object of type [" + object.getClass().getName() + "]");
}
。
当然如果我们传入的对象没有实现Serializable,我们可以使用ObjectMapper的writeValueAsString方法转成字符串传入。到时再get后再用readValue转成对象。
当然如果你想在前台系统做缓存,也是可以通过redis,一样的,就是在前台系统service调用restapi前进行redis查询。后台做就是在service查询数据库之前进行redis查询。
当使用redis缓存时,要注意,在业务代码(service类)中,首先先从redis中去获取,然后return。但是这里要用try-catch。因为我们的业务不能因缓存服务器宕机而抛异常。
我们在使用redis作缓存时,如果使用以下方式
private JdkSerializationRedisSerializer jdkSerializer = new JdkSerializationRedisSerializer();
@Autowired
private RedisTemplate<Serializable, Serializable> redisTemplate;
public Object get(Serializable key) {
Object obj = redisTemplate.opsForValue().get(key);
return jdkSerializer.deserialize((byte[]) obj);//当某service调用该方法后返回Object后,要根据你当时是存的什么类型,然后强转成该类型
}
public void set(Serializable key, Object value, Long minutes) {
redisTemplate.opsForValue().set(key, jdkSerializer.serialize(value), minutes, TimeUnit.MINUTES);
}
public void set(Serializable key, Object value) {
redisTemplate.opsForValue().set(key, jdkSerializer.serialize(value));// 永久保存
}
public void del(Serializable key) {
redisTemplate.delete(key);
}
public void expire(Serializable key, Long minutes) {
redisTemplate.expire(key, minutes, TimeUnit.MINUTES);
}
那么,要传入的value要实现Serializable接口。因为jdkSerializer.serialize(value)方法在执行时会进入
if (!(object instanceof Serializable)) {
throw new IllegalArgumentException(getClass().getSimpleName() + " requires a Serializable payload " +
"but received an object of type [" + object.getClass().getName() + "]");
}
。
当然如果我们传入的对象没有实现Serializable,我们可以使用ObjectMapper的writeValueAsString方法转成字符串传入。到时再get后再用readValue转成对象。
相关文章推荐
- 使用python 结合mysql和redis进行缓存设计
- 详解JavaEE 使用 Redis 数据库进行内容缓存和高访问负载
- redis使用工具类进行保存数据和Ehcache注解缓存类实现缓存value
- Magento2使用Redis进行页面缓存或会话存储。
- Django使用Redis进行缓存详细最全流程
- redis 使用服务器登录redis控制台,进行操作缓存
- redis缓存工具Jedis进行跨jvm加锁(分布式应用)--不幸暂弃用--能够做第三方锁使用
- JavaEE 使用 Redis 数据库进行内容缓存和高访问负载
- asp.net core 使用 Redis 和 Protobuf 进行 Session 缓存
- ASP.NET Core 使用 Redis 和 Protobuf 进行 Session 缓存
- 使用spring-data-redis进行对redis的操作,封装的一些操作方法
- 使用Redis做MyBatis的二级缓存
- 缓存使用中Redis,Memcached的共性和差异分析
- Redis整合Spring结合使用缓存实例
- 使用Redis bitmaps进行快速、简单、实时统计
- 使用 squid 2.7 for windows 进行无缓存反向代理
- 使用Filter快速对网页资源进行缓存!
- JEESZ-Redis分布式缓存安装和使用
- C#使用Redis集群缓存
- 使用html5+nodejs+mongodb+redis进行web游戏开发(一)准备工作