-
添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
该依赖里默认包含了 spring-data-redis 和 Jedis 依赖,见这里
-
添加配置文件
# REDIS (RedisProperties) # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=192.168.0.58 # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password= # 连接池最大连接数(使用负值表示没有限制) spring.redis.pool.max-active=8 # 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.pool.max-wait=-1 # 连接池中的最大空闲连接 spring.redis.pool.max-idle=8 # 连接池中的最小空闲连接 spring.redis.pool.min-idle=0 # 连接超时时间(毫秒) spring.redis.timeout=0
-
添加 cache 的配置类
spring boot 在 Spring Data Redis 提供了两个模板:- RedisTemplate
- StringRedisTemplate
RedisTemplate 会使用 JdkSerializationRedisSerializer 处理数据,这意味着 key 和 value 都会通过 Java 进行序列化。
StringRedisTemplate 默认会使用 StringRedisSerializer 处理数据。要是操作字符串的话,用 StringRedisTemplate 就可以满足。但要是想要存储一个对象 Object,我们就需要使用 RedisTemplate,并对 key 采用 String 序列化方式,对 value 采用 json 序列化方式,这时候就需要对 redisTemplate 自定义配置
/** * @author liyf * Created in 2018\11\8 **/ @Configuration @EnableCaching//启用缓存,这个注解很重要; public class RedisCacheConfig { /** * 功能描述: 缓存管理器 * * @param [redisTemplate] * @return org.springframework.cache.CacheManager * @author liyf **/ @Bean public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) { RedisCacheManager rcm = new RedisCacheManager(redisTemplate); // 设置缓存过期时间(单位:秒) rcm.setDefaultExpiration(60 * 24); return rcm; } @Bean public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, String> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(factory); //key序列化方式;(不然会出现乱码;),但是如果方法上有Long等非String类型的话,会报类型转换错误; //所以在没有自己定义key生成策略的时候,以下这个代码建议不要这么写,可以不配置或者自己实现ObjectRedisSerializer //或者JdkSerializationRedisSerializer序列化方式; RedisSerializer<String> redisSerializer = new StringRedisSerializer();//Long类型不可以会出现异常信息; redisTemplate.setKeySerializer(redisSerializer); redisTemplate.setHashKeySerializer(redisSerializer); return redisTemplate; } /** * 功能描述: 自定义key. * * @param [] * @return org.springframework.cache.interceptor.KeyGenerator * @author liyf */ @Override public KeyGenerator keyGenerator() { System.out.println("RedisCacheConfig.keyGenerator()"); return (o, method, objects) -> { // This will generate a unique key of the class name, the method name //and all method parameters appended. StringBuilder sb = new StringBuilder(); String[] value = new String[1]; // sb.append(target.getClass().getName()); // sb.append(":" + method.getName()); Cacheable cacheable = method.getAnnotation(Cacheable.class); if (cacheable != null) { value = cacheable.value(); } CachePut cachePut = method.getAnnotation(CachePut.class); if (cachePut != null) { value = cachePut.value(); } CacheEvict cacheEvict = method.getAnnotation(CacheEvict.class); if (cacheEvict != null) { value = cacheEvict.value(); } sb.append(value[0]); for (Object obj : objects) { sb.append(obj.toString()); } return sb.toString(); }; } }
- 注意:
要缓存的 Java 对象必须实现 Serializable 接口,因为 Spring 会将对象先序列化再存入 Redis,如果不实现 Serializable 的话将会遇到类似这种错误:nested exception is java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type xxx
-
通过注解对数据进行缓存处理
@Service public class UserServiceImpl implements UserService { private final UserRepository userRepository; @Autowired public UserServiceImpl(UserRepository userRepository) { this.userRepository = userRepository; } @CachePut(value = "userInfo", key = "#root.caches[0].name + #user.uid") @Override public User saveUser(User user) { return userRepository.save(user); } @Override @Cacheable(value = "userInfo") public User getUser(Long uid) { System.out.println("从数据库中进行获取的....uid=" + uid); return userRepository.findOne(uid); } }
-
测试
近期热议
推荐标签 标签
-
SVN
29 引用 • 98 回帖 • 692 关注
SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。
-
星云链
3 引用 • 16 回帖 • 1 关注
星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网
-
工具
273 引用 • 679 回帖
子曰:“工欲善其事,必先利其器。”
- Solo
-
人工智能
75 引用 • 145 回帖 • 1 关注
人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。
-
Scala
13 引用 • 11 回帖 • 107 关注
Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。
-
Laravel
19 引用 • 23 回帖 • 684 关注
Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。
- BND
-
Sandbox
370 引用 • 1215 回帖 • 582 关注
如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。
-
Log4j
20 引用 • 18 回帖 • 43 关注
Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。
-
gRpc
10 引用 • 8 回帖 • 54 关注
-
阿里云
89 引用 • 345 回帖
阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。
-
爬虫
106 引用 • 275 回帖
网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。
-
禅道
5 引用 • 15 回帖 • 222 关注
禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。
-
以太坊
34 引用 • 367 回帖 • 2 关注
以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。
-
OpenStack
10 引用 • 7 关注
OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。
-
flomo
3 引用 • 80 回帖 • 2 关注
flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。
-
OpenResty
17 引用 • 39 关注
OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
-
FreeMarker
23 引用 • 20 回帖 • 426 关注
FreeMarker 是一款好用且功能强大的 Java 模版引擎。
-
快应用
15 引用 • 127 回帖 • 2 关注
快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。
-
CentOS
238 引用 • 224 回帖 • 1 关注
CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。
-
周末
14 引用 • 297 回帖 • 1 关注
星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。
-
微软
8 引用 • 44 回帖
微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。
-
JRebel
26 引用 • 78 回帖 • 623 关注
JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。
-
职场
126 引用 • 1699 回帖 • 1 关注
找到自己的位置,萌新烦恼少。
-
服务器
124 引用 • 580 回帖
服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。
-
外包
26 引用 • 232 回帖 • 5 关注
有空闲时间是接外包好呢还是学习好呢?
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于