REDIS学习(3.2)spring boot 使用redis作为缓存
来源:互联网 发布:量化分析师python日记 编辑:程序博客网 时间:2024/06/05 01:13
一,指定主键的生成规则
在3.1的基础上修改RedisConfig
@Configuration@EnableCachingpublic class RedisConfig extends CachingConfigurerSupport {@Beanpublic KeyGenerator smpkeyGenerator() {return new KeyGenerator() {@Overridepublic Object generate(Object target, Method method, Object... params) {StringBuilder sb = new StringBuilder();sb.append(target.getClass().getSimpleName());sb.append(method.getName());for (Object o : params) {sb.append("_").append(o.toString());}return sb.toString();}};<span style="white-space:pre"></span>} }
相关的方法要加上keyGenerator="smpkeyGenerator"
@Cacheable(value = "usercache", keyGenerator="smpkeyGenerator")public User getUser(String no,String name){LogCore.BASE.debug("invoke persistent:{},{}", no, name);return new User(no, name);}
如果不用keyGenerator的话可以直接使用SpEL表达式来描述key的生成规则
例如
@CacheEvict(value = "usercache", key="#no+'_'+#name")public boolean clearUser(String no,String name){LogCore.BASE.debug("invoke clear:{},{}", no, name);return true;}
http://localhost:8084/redis/test?name=lee&no=001
在redis存的键值为
usercache~keys
\xAC\xED\x00\x05t\x00\x1BRedisServicegetUser_001_lee
二,指定序列化方式
user去掉序列化标记接口serializable
public class User{public String no;public String name;
<span style="white-space:pre"></span>public User(){}public User(String no, String name) {this.no = no;this.name = name;}}修改RedisConfig,增加CacheManager和RedisTemplate的bean注入
@Configuration@EnableCachingpublic class RedisConfig extends CachingConfigurerSupport {@Beanpublic CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {RedisCacheManager manager = new RedisCacheManager(redisTemplate);manager.setDefaultExpiration(20);//设置默认过期时间return manager;}@Beanpublic RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {StringRedisTemplate template = new StringRedisTemplate(factory);Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);template.setValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();return template;}@Beanpublic KeyGenerator smpkeyGenerator() {return new KeyGenerator() {@Overridepublic Object generate(Object target, Method method, Object... params) {StringBuilder sb = new StringBuilder();//sb.append(target.getClass().getSimpleName());//sb.append(method.getName());for (Object o : params) {sb.append("_").append(o.toString());}return sb.toString();}};}}
三,用SPEL表达式控制添加缓存的条件
如下:只有name不为null, 且返回结果不为null的时候才加入缓存
@Cacheable(value = "usercache", keyGenerator = "smpkeyGenerator",condition="#name!=null", unless = "#result==null")public User getUser(String no, String name) {LogCore.BASE.debug("invoke getUser:{},{}", no, name);if (Util.anyNonEmpty(no, name)) {return new User(no, name);}return null;}
0 0
- REDIS学习(3.2)spring boot 使用redis作为缓存
- Spring Boot学习(缓存-Redis)
- spring-boot整合redis作为缓存(4)——spring-boot引入Redis
- Spring boot 使用 Redis 缓存
- spring-boot整合redis作为缓存(2)——spring-boot的缓存
- spring-boot整合redis作为缓存(1)——redis的设置
- spring boot 使用redis做缓存学习记录
- 使用redis作为缓存
- 使用redis作为缓存
- spring boot redis cache 缓存学习
- Spring Boot使用redis做数据缓存
- Spring Boot使用redis做数据缓存
- Spring Boot使用redis做数据缓存
- Spring Boot使用redis实现数据缓存
- Spring Boot使用redis做数据缓存
- Spring Boot使用redis做数据缓存
- Spring Boot使用redis做数据缓存
- spring boot使用redis做数据缓存
- stringbuffer与stringbuilder的区别
- Android基类Activity的设计
- Java Web 中使用ffmpeg实现视频转码、视频截图,javaffmpeg
- oracle表分区详解
- android studio关闭启动时indexing
- REDIS学习(3.2)spring boot 使用redis作为缓存
- iOS 微信登录,分享等不执行代理方法 - 遇到的坑
- leetcode题集——spiral-matrix-ii
- Lua和C++交互详解
- Netty高性能并发
- hdu 1003 Max Sum
- 编程学习网站 挺好的给他家推荐一下
- 优品股票通电脑客户端 v1.0官网最新版
- [c#笔记]Dictionary模糊查找