SpringBoot项目中使用redis缓存的方法步骤
本文介绍了SpringBoot项目中使用redis缓存的方法步骤,分享给大家,具体如下: Spring Data Redis为我们封装了Redis客户端的各种操作,简化使用。 - 当Redis当做数据库或者消息队列来操作时,我们一般使用RedisTemplate来操作 - 当Redis作为缓存使用时,我们可以将它作为Spring Cache的实现,直接通过注解使用 1.概述 在应用中有效的利用redis缓存可以很好的提升系统性能,特别是对于查询操作,可以有效的减少数据库压力。 具体的代码参照该 示例项目 2.添加引用 在build.gradle加入 compile('org.springframework.boot:spring-boot-starter-data-redis') SpringBoot会自动引入redis相关的jar包。加入该引用后,需要在本地安装redis并启动,否则程序启动时会报错。 3.通过注解启用缓存 在SpringBoot中启用redis非常简单,只需要在Application主类上添加@EnableCaching注解,之后在需要启用缓存的查询方法上添加@Cacheable注解。 @SpringBootApplication @EnableCaching public class DemoApplication implements CommandLineRunner{ ... 查询接口: public interface TestRepository extends JpaRepository<Test,Integer> { @Cacheable(value = "testCache") public Test findOne(Integer id); } 实体类需要实现Serializable接口,否则程序会报错,因为无法把java对象序列化到redis中。SpringBoot中redis默认使用DefaultSerializer,这个用的是jdk自身的序列化方法。 总共有以下几种序列化方法,具体的使用场景可以参考官方文档 1. GenericJackson2JsonRedisSerializer 至此我们的程序就具有了从redis缓存中查询数据的能力,如果对redis中存储的KEY的美观程度不介意的话,工作到此就结束了。 4.美观的KEY 执行我们的程序以后,在redis-cli中执行KEY *命令,会发现key的值是一堆类似于乱码的东西: "testCache:xacxedx00x05srx00x11java.lang.Integerx12xe2xa0xa4xf7x81x878x02x00x01Ix00x05valuexrx00x10java.lang.Numberx86xacx95x1dx0bx94xe0x8bx02x00x00xpx00x00x00x01" 出现上面的key值的原因就是spring中默认采用了SimpleKey这个类来生成redis的key。 解决方法也很简单,增加缓存配置,指定redis生成key的方式: @Configuration public class CacheConfig extends CachingConfigurerSupport { @Autowired private RedisTemplate redisTemplate; @Bean public CacheManager cacheManager() { redisTemplate.setKeySerializer(new GenericToStringSerializer<Object>(Object.class)); RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate); cacheManager.setDefaultExpiration(3600); cacheManager.setUsePrefix(true); cacheManager.setCachePrefix(new RedisCachePrefix() { private final RedisSerializer<String> serializer = new StringRedisSerializer(); private final String delimiter = ":"; public byte[] prefix(String cacheName) { return this.serializer .serialize(cacheName.concat(this.delimiter)); } }); return cacheManager; } } 其中 复制代码 代码如下: redisTemplate.setKeySerializer(new GenericToStringSerializer<Object>(Object.class)); 这行代码指定了redis中key值的生成方式,GenericToStringSerializer这个序列化方法会把java对象转换为字符串存储到redis中。 5.总结 在SpringBoot中启用redis缓存非常简单,只需要加几个注解即可。同时我们可以通过增加缓存配置的方式,让存储到redis中的key值具有良好的可读性,而不是一堆类似于乱码的数据。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |