RedisTemplate工具API说明

RedisTemplate说明

SpringBoot针对Redis开发了一套API,将redis常规操作进行了整合.Template底层实现时将Jedis对象再次进行了封装.

导入jar包

<!--SpringBoot整合redis  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

编辑YML配置文件

server:
  port: 8091
  servlet:
    context-path: /
spring:
  #数据源配置
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root
  
  
  #配置MVC的视图解析器的前缀和后缀
  mvc:
    view:
      prefix: /WEB-INF/views/
      suffix: .jsp
  
  #spring整合redis
  redis:
    cluster:
      nodes: 192.168.126.129:7000,192.168.126.129:7001,192.168.126.129:7002,192.168.126.129:7003,192.168.126.129:7004,192.168.126.129:7005
    jedis:
      pool:
        max-active: 1000  #最大链接数量
        max-idle: 10      #最大的空闲数量
        max-wait: 3       #最大的等待链接数量3
        min-idle: 3       #最小空闲数量
        
      
#mybatis-plush配置
mybatis-plus:
  type-aliases-package: com.jt.pojo
  mapper-locations: classpath:/mybatis/mappers/*.xml
  configuration:
    map-underscore-to-camel-case: true
​
logging:
  level: 
    com.jt.mapper: debug

关于配置类说明

SpringBoot自动的实例化了2个API对象.

1.RedisTemplate		可以存储任意数据类型包括对象类型

2.StringRedisTemplate  只能操作string数据类型.
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {@Bean
    @ConditionalOnMissingBean(name = "redisTemplate")
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
            throws UnknownHostException {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }@Bean
    @ConditionalOnMissingBean
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory)
            throws UnknownHostException {
        StringRedisTemplate template = new StringRedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }}

入门案例

@SpringBootTest
public class TestRedisTemplate {@Autowired
    private StringRedisTemplate redisTemplate;//操作数据类型String
    //可以操作任意类型
    @Autowired
    private RedisTemplate<Object,Object> template = new RedisTemplate<>();//具体操作的值是String类型
    @Test
    public void test01() {//template操作5种数据类型
        redisTemplate.opsForValue();    //操作String数据结构
        redisTemplate.opsForHash();     //操作hash数据结构
        redisTemplate.opsForSet();      //操作Set数据结构
        redisTemplate.opsForZSet();     //操作Set有序结构
        redisTemplate.opsForList();     //操作List集合结构
    }//具体操作的值是String类型
    @Test
    public void testString() {
        
        redisTemplate.opsForValue().set("1912", "今天结课,明天放假,好开心");
        String value = redisTemplate.opsForValue().get("1912");
        System.out.println("获取返回值结果:"+value);
        
        //jedis.setEx()
        redisTemplate.opsForValue().set("A", "斗地主", 10, TimeUnit.MINUTES);
        //获取超时时间默认单位秒
        
        //获取数据的超时时间  按照纳米的形式计算
        Long time = redisTemplate.getExpire("A",TimeUnit.NANOSECONDS);
        System.out.println(time);
        
        //jedis.setNX   如果key不存在时,redis才会赋值.
        redisTemplate.opsForValue().setIfAbsent("A", "打麻将!!!!");
        String value2 = redisTemplate.opsForValue().get("A");
        System.out.println("结果:"+value2);
        
        //jedis.setXX   如果key存才时,才会赋值
        redisTemplate.opsForValue().setIfPresent("A", "打扑克!!!!");
        String value3 = redisTemplate.opsForValue().get("A");
        System.out.println("结果:"+value3);
    }@Test
    public void testItemDesc() {
        ItemDesc itemDesc = new ItemDesc();
        itemDesc.setItemId(1001L).setItemDesc("对象类型测试");
        //知识回顾: 如何将对象保存到redis里  
        //该方法自动的将对象转化为json
        template.opsForValue().set("itemDesc1", itemDesc);
        ItemDesc itemDesc2 = (ItemDesc)template.opsForValue().get("itemDesc1");
        System.out.println(itemDesc2);
    }}

SpringBoot缓存注解介绍

开启redis缓存

@SpringBootApplication
@MapperScan("com.jt.mapper")
@EnableCaching  //让springBoot中的redis注解生效
public class SpringBootRun {
    
    public static void main(String[] args) {
        
        SpringApplication.run(SpringBootRun.class, args);
    }
}

缓存注解说明

@RestController  //要求返回JSON
public class RedisController {
    
    //简化操作   mapper???
    @Autowired
    private ItemDescMapper itemDescMapper;
    
    /**
     * 用户根据id查询商品详情信息
     * @param itemId
     * @return
     * 
     * 
     * 形成的key=  itemDesc::7
     * cacheNames:业务名称
     * key:     用户自己指定key,如果不写则默认使用第一个参数
     *          最好通过#spel表达式动态获取数据
     *          #itemId 动态指定key的值
     */
    @RequestMapping("/findItemDesc")
    @Cacheable(cacheNames="itemDesc",key="#itemId")
    public ItemDesc findItemDescById(Long itemId) {
        
        System.out.println("查询数据库:"+itemId);
        return itemDescMapper.selectById(itemId);
    }
    
    
    /**
     * 缓存更新
     * 执行业务进行更新操作,之后将返回值缓存到redis中.
     * 
     * spel表达式可以动态获取对象中的属性值!!!!!
     * 
     * key=itemDesc::itemDesc.getItemId()的值
     */
    @RequestMapping("/updateItemDesc")
    @CachePut(cacheNames="itemDesc",key="#itemDesc.getItemId()")
    public ItemDesc updateItemDesc(ItemDesc itemDesc) {
        
        //根据主键更新
        itemDescMapper.updateById(itemDesc);
        return itemDesc;
    }
    
    @RequestMapping("/deleteItemDesc")
    @CacheEvict(cacheNames="itemDesc",key="#itemId")
    public String deleteItemDesc(Long itemId) {
        
        
        itemDescMapper.deleteById(itemId);
        return "删除数据成功:"+itemId;
    }
    
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值