上一篇文章介绍了springboot整合 ehcache,很好用,但是有个弊端 ehcache 只支持本java程序访问,也就是说 java 程序跑完了,就无法使用缓存了,别的系统想要访问你得系统的缓存也不行,所以这篇文章介绍一下 springboot 整合 redis
redis 需要 gcc 编译,没有的自行百度
1.获取redis资源
wget http://download.redis.io/releases/redis-4.0.8.tar.gz
2.解压
tar xzvf redis-4.0.8.tar.gz
3.安装
cd redis-4.0.8
make
cd src
make install PREFIX=/usr/local/redis
4.设置密码
vim redis.config
5.设置远程访问
vim redis.config
protected-mode no
6.启动 redis
/usr/local/redis/bin/redis-server /usr/local/redis-4.0.8/redis.conf
org.springframework.boot
spring-boot-starter-data-redis
spring:
redis:
host: 192.168.43.176
port: 6379
password: zhangzq
springboot的自动装配相当厉害,其实这个都不怎么需要我们配置,如何你redis装再本地,那么yml 都不需要配置就能跑起来,因为 springboot 有默认的。
/**
* redis 连接配置
*/
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory factory){
RedisTemplate redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory( factory );
// 设置键和值得序列化策略
redisTemplate.setKeySerializer( new StringRedisSerializer());
return redisTemplate;
}
}
/**
* redis 工具,存取
*/
@Configuration
public class RedisUtil {
@Autowired
private RedisTemplate redisTemplate;
/**
* 存数据
* @param key
* @param value
*/
public void set(String key , Object value){
redisTemplate.opsForValue().set(key,value);
}
/**
* 存数据
* @param key 键
* @param value 值
* @param exp 过期时间 默认秒
* @param s 使用 时还是分还是秒,默认秒
*/
public void set(String key , Object value , int exp,TimeUnit s){
if( s==null ){
s = TimeUnit.SECONDS;
}
redisTemplate.opsForValue().set(key,value,exp, s);
}
/**
* 获取数据
* @param key
* @return
*/
public T get(String key){
return (T)redisTemplate.opsForValue().get(key);
}
}
@Test
public void getAll(){
redisUtil.set("love","zhangzq",60*60*30, TimeUnit.SECONDS);
redisUtil.set("licm","zhangzq",60*60*30, TimeUnit.SECONDS);
UserInfo userInfo = new UserInfo();
userInfo.setUsername("zhangzq");
userInfo.setPassword("pkusoft");
redisUtil.set("user-1",userInfo,60*60*30,TimeUnit.SECONDS);
UserInfo user = redisUtil.get("user-1");
System.out.println( user );
Object zhanzgq = redisUtil.get("licm");
System.out.println( zhanzgq );
}
ok,至此,redis 已经整合进入springboot里面了,可以享受缓存带来的快感了哦
Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 Redis),而是一个对缓存使用的抽象,通过在既有代码中添加少量它定义的各种 annotation,即能够达到缓存方法的返回对象的效果。
特点
具备相当的好的灵活性,不仅能够使用 SpEL(Spring Expression Language)来定义缓存的 key 和各种 condition,还提供开箱即用的缓存临时存储方案,也支持和主流的专业缓存例如 EHCache、Redis、Guava 的集成。
可以像上一篇文章那样使用 @Ehcache 的时候 方法上的 @Cacheable 注解了,不知道的可以参考我的上一篇文章 https://blog.csdn.net/yali_aini/article/details/84984254
就像这样:
@Cacheable(value = "user" , key = "#id")
@Override
public UserInfo getById(String id) {
System.out.println( "执行了======================>" );
return new UserInfo(id,"<>","<>");
//return this.userInfoMapper.getOne(id);
}
然后再次测试:
发现我调用了三次这个方法,但是只有一次输出了 里面的语句,证明该方法只被执行了一次。
相应的,redis 里面也多了一个key,user 这一个
更多信息可以参考:https://blog.battcn.com/2018/05/13/springboot/v2-cache-redis/ 这篇文章