zoukankan      html  css  js  c++  java
  • Spring Boot 之 Redis

    一、pom.xml引入依赖

    <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

    二、修改application.yml ,在spring节点下添加配置

      redis:
        host: 127.0.0.1

    三、修改Service 引入RedisTemplate

      1、在 findById 方法中 添加Redis缓存

    @Autowired
    private RedisTemplate redisTemplate;
    int i=1;
      
    /** * 根据ID查询实体 * @param id * @return */ public Article findById(String id) { System.out.println("查询次数:"+i++); //先从缓存中查询当前对象 Article article=(Article)redisTemplate.opsForValue().get("article_"+id); //如果没有取到 if(article==null){ //从数据库中查询 article=articleDao.findById(id).get(); //存入到缓存中 redisTemplate.opsForValue().set("article_"+id,article); } return article; }

      执行结果

    查询次数:1
    Hibernate: select article0_.id as id1_0_0_, article0_.channelid as channeli2_0_0_ from tb_article article0_ where article0_.id=?
    查询次数:2
    查询次数:3
    查询次数:4

      2、在 update 和 deleteById 方法中 删除Redis缓存

        /**
         * 修改
         * @param article
         */
        public void update(Article article) {
            redisTemplate.delete("article_"+article.getId());
            articleDao.save(article);
        }
    
        /**
         * 删除
         * @param id
         */
        public void deleteById(String id) {
            redisTemplate.delete("article_"+id);
            articleDao.deleteById(id);
        }

       操作流程:先修改 update 再查询 findById ,

           再修改 deleteById ,在查询 findById ,

      执行结果:

    查询次数:5
    Hibernate: update tb_article set channelid=?, columnid=?, comment=?, content=?, createtime=?, image=?, ispublic=?, istop=?, state=?, thumbup=?, title=?, type=?, updatetime=?, url=?, userid=?, visits=? where id=?
    查询次数:6
    Hibernate: select article0_.id as id1_0_0_, article0_.channelid as channeli2_0_0_ from tb_article article0_ where article0_.id=?
    查询次数:6
    查询次数:7
    查询次数:8
    查询次数:9
    查询次数:10
    Hibernate: delete from tb_article where id=?
    查询次数:11
    Hibernate: select article0_.id as id1_0_0_, article0_.channelid as channeli2_0_0_ from tb_article article0_ where article0_.id=?

       3、设置 Redis 过期时间 10秒

      /**
         * 根据ID查询实体
         * @param id
         * @return
         */
        public Article findById(String id) {
            System.out.println("查询次数:"+i++);
            //先从缓存中查询当前对象
            Article article=(Article)redisTemplate.opsForValue().get("article_"+id);
            //如果没有取到
            if(article==null){
                //从数据库中查询
                article=articleDao.findById(id).get();
                //存入到缓存中
                redisTemplate.opsForValue().set("article_"+id,article,10, TimeUnit.SECONDS);
            }
            return article;
        }

      执行结果:

    查询次数:1
    Hibernate: select article0_.id as id1_0_0_, article0_.channelid as channeli2_0_0_ from tb_article article0_ where article0_.id=?
    查询次数:2
    查询次数:3
    查询次数:4
    查询次数:5
    查询次数:6
    Hibernate: select article0_.id as id1_0_0_, article0_.channelid as channeli2_0_0_ from tb_article article0_ where article0_.id=?
    查询次数:7
    查询次数:8
    查询次数:9

    前5次查询只有第一次访问了数据库,想个10秒后,

    再次查询4次,只有第6次访问了数据库,后3次也没有访问数据库。

    四、SpringDataRedis常用方法

    redisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS);//向redis里存入数据和设置缓存时间
    redisTemplate.opsForValue().get("test")//根据key获取缓存中的val
    redisTemplate.boundValueOps("test").increment(-1);//val做-1操作
    redisTemplate.boundValueOps("test").increment(1);//val +1
    redisTemplate.getExpire("test")//根据key获取过期时间
    redisTemplate.getExpire("test",TimeUnit.SECONDS)//根据key获取过期时间并换算成指定单位
    redisTemplate.delete("test");//根据key删除缓存
    redisTemplate.hasKey("546545");//检查key是否存在,返回boolean值
    redisTemplate.expire("red_123",1000 , TimeUnit.MILLISECONDS);//设置过期时间
    redisTemplate.opsForSet().add("red_123", "1","2","3");//向指定key中存放set集合
    redisTemplate.opsForSet().isMember("red_123", "1")//根据key查看集合中是否存在指定数据
    redisTemplate.opsForSet().members("red_123");//根据key获取set集合

     

  • 相关阅读:
    Android之判断某个服务是否正在运行的方法
    Service完全解析(转)
    详解Android动画之Frame Animation(转)
    android SDK 快速更新配置(转)
    浅析Android中的消息机制(转)
    android中handler用法总结
    InputStream重用技巧(利用ByteArrayOutputStream)
    IntelliJ IDEA使用总结篇
    JDK,JRE,JVM区别与联系-理解与概括
    Egret IDE中搜索,过滤文件,只搜索.ts
  • 原文地址:https://www.cnblogs.com/mww-NOTCOPY/p/11281187.html
Copyright © 2011-2022 走看看