记录springboot2.0整合Redis做缓存

这篇文章是在学习恒宇少年的第十六章:使用Redis作为SpringBoot项目数据缓存基础上,使用springboot2.0为基础写的。
这里就不介绍Redis的安装和启动了,大家可以参考恒宇少年的文章。

添加Redis依赖

首先在pom.xml加入我们需要的依赖(由于这里我更换了公司的setting.xml,所以显示找不到包)

<!-- springboot内部缓存支持 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <!-- 添加Redis缓存支持 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-redis</artifactId>
            <version>1.4.3.RELEASE</version>
        </dependency>
        <!--spring2.0集成redis所需common-pool2-->
        <!-- 必须加上,jedis依赖此  -->
        <!-- spring boot 2.0 的操作手册有标注 大家可以去看看 地址是:https://docs.spring.io/spring-boot/docs/2.0.3.RELEASE/reference/htmlsingle/-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.5.0</version>
        </dependency>

配置Redis数据库

然后去application.yml中配置redis,添加到我们本地项目中

 #配置redis数据库连接
spring:
  redis:
    host: 127.0.0.1
    port: 6379
    password:
    jedis:
      pool:
        max-active: 8
        max-wait: -1
        max-idle: 5
        min-idle: 0
      timeout: 2000
    database: 0

配置CacheManager

要让springboot内置缓存框架使用redis作缓存,还需要添加一个配置类RedisConfiguration,@EnableCaching注解来开启我们的项目支持缓存,然后在配置类内添加方法cacheManager(),返回值使用redis缓存管理器.由于redis自动生成的key太复杂,这里重新定义下生成规则

@Configuration
@EnableCaching
public class RedisConfiguration extends CachingConfigurerSupport {
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory){
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofHours(1));//失效时间
        return RedisCacheManager
                .builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
                .cacheDefaults(redisCacheConfiguration).build();
    }
    @Override
    public KeyGenerator keyGenerator() {
        //  设置自动key的生成规则,配置spring boot的注解,进行方法级别的缓存,使用:进行分割,可以很多显示出层级关系
        // 这里其实就是new了一个KeyGenerator对象,只是这是lambda表达式的写法,我感觉很好用,大家感兴趣可以去了解下
        return (target, method, params) -> {
            StringBuilder sb = new StringBuilder();
            sb.append(target.getClass().getName());
            sb.append(":");
            sb.append(method.getName());
            for (Object obj : params) {
                sb.append(":" + String.valueOf(obj));
            }
            String rsToUse = String.valueOf(sb);
            System.out.println("调用Redis缓存Key : " + rsToUse);
            return rsToUse;
        };
    }

}

建表测试

CREATE TABLE good_infos  ( 
    tg_id       int(11) NOT NULL,
    tg_title    varchar(50) NULL,
    tg_price    decimal(8,2) NULL,
    tg_unit     varchar(20) NULL,
    tg_order    varchar(255) NULL,
    tg_type_id  int(11) NULL,
    PRIMARY KEY(tg_id)
)
GO

实体类

@Entity
@Table(name = "good_infos")
public class GoodEntity implements Serializable {
    @Id
    @GeneratedValue
    @Column(name = "tg_id")
    private Long id;

    @Column(name = "tg_title")
    private String title;

    @Column(name = "tg_price")
    private double price;

    @Column(name = "tg_unit")
    private String unit;

    @Column(name = "tg_order")
    private int order;

然后创建对应的JPA

public interface GoodJPA extends JpaRepository<GoodEntity,Long>{

}

创建对应的service

@Service
@CacheConfig(cacheNames = "good")
public class GoodService {
    @Autowired
    private GoodJPA goodJPA;

    @Cacheable
    public List<GoodEntity> list(){
        return goodJPA.findAll();
    }
}

创建一个controller控制器来调用

@RestController
@RequestMapping("/query")
public class QueryController {

    @Autowired
    private GoodService goodService;

    /**
     * 查询商品列表
     * @return
     */
    @RequestMapping("/list")
    public List<GoodEntity> list(){
        return goodService.list();
    }
}

测试一下

图10.png

查看控制台
图10.png

此时打印了查询语句,然后再次访问这个网址,会发现不会打印查询语句了。说明redis启用成功。
我们再往表中添加一条数据后保存
图11.png

然后再访问http://localhost:8080/query/list,发现依然只有3条数据
图12.png

把reids里的缓存清空一下
图13.png

再次访问,刚刚添加的数据就出来了
图14.png

结语

这篇文章是记录自己在学习springboot2.0整合redis的过程,肯定有很多不足,欢迎大佬们留言。再次感谢恒宇少年
项目地址:https://github.com/simperLv/springboot2.0,因为我学习都用的这个工程,所以很乱(扎心....)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容