SpringBoot整合Redis(单机)

上一篇文章介绍了springboot整合 ehcache,很好用,但是有个弊端 ehcache 只支持本java程序访问,也就是说 java 程序跑完了,就无法使用缓存了,别的系统想要访问你得系统的缓存也不行,所以这篇文章介绍一下 springboot 整合 redis

1.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 

SpringBoot整合Redis(单机)_第1张图片

5.设置远程访问

vim redis.config 

SpringBoot整合Redis(单机)_第2张图片

protected-mode no

6.启动  redis

/usr/local/redis/bin/redis-server /usr/local/redis-4.0.8/redis.conf 

2.pom 配置

        
        
            org.springframework.boot
            spring-boot-starter-data-redis
        


3.yml 配置

spring:
  redis:
    host: 192.168.43.176
    port: 6379
    password: zhangzq

4. RedisTemplate 配置

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;
    }

}

5. RedisUtil

/**
 * 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);
    }

}

6.测试

    @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 );

    }

SpringBoot整合Redis(单机)_第3张图片

ok,至此,redis 已经整合进入springboot里面了,可以享受缓存带来的快感了哦

 

7.多说一句

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);
    }

然后再次测试:

发现我调用了三次这个方法,但是只有一次输出了 里面的语句,证明该方法只被执行了一次。

SpringBoot整合Redis(单机)_第4张图片

相应的,redis 里面也多了一个key,user 这一个

SpringBoot整合Redis(单机)_第5张图片

 

更多信息可以参考:https://blog.battcn.com/2018/05/13/springboot/v2-cache-redis/  这篇文章

 

你可能感兴趣的:(springboot,SpringBoot菜鸟教程)