Spring中使用Redis缓存
Redis安装
安装步骤一般都是下载源码、编译、执行脚本。我为了图方便,在Ubuntu上用apt-get一建安装sudo apt-get install redis-server
可以通过查看Redis是否监听了它的默认端口,来检查Redis服务是否正常启动
Redis配置
不同的框架的Redis配置不同,网上有很多详细的配置过程,这里就不再复述了。我用的是SpringBoot框架。
Redis使用
SpringBoot是通过注解的方式使用Redis的。在SpringBoot Doc里有详细的描述。
我做了一个实验,通过用户Id(String 类型)来查找mysql中的记录,第一次查询时,会将该记录存入Redis中,第二次及之后的查询,则是从Redis中取缓存。
@Controller
@RequestMapping("/api/user")
public class UserController {
@Autowired
UserRepository userRepository;
@RequestMapping(value = "/{userId}", method=RequestMethod.GET)
@ResponseBody
@Cacheable(value="user-key", key="#userId")
public User getUser(
@PathVariable String userId
) {
User user = userRepository.findOne(userId);
System.out.println("当前执行了");
return user;
}
}
在这里我们使用参数userId,作为Redis缓存的key,因为userId是主键,具有唯一性。
我调用了http://localhost:8080/api/user/1
,并且返回了
{"id":"1","name":"1"}
在Redis服务器中,我们可以找到对应的key-value值,如下
除了指定key以外,我们可以在配置中配置keygenerate的规则,如下
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
@Bean
@Override
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}
return sb.toString();
}
};
}
}
如果需要使用默认的规则只要去掉key就好了。如@Cacheable(value="user-key")
在这里,我们用类名方法名参数
作为其默认的key值。
再次执行之后,我们可以看到Redis服务器的数据,如下
备注
Redis还有许多其他的应用,如分布式服务器中用于session共享的存储空间等等。