springboot配置redis、Spring cache

news/2024/7/24 2:19:33 标签: spring boot, redis, 后端

1.Jedis库

依赖库

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>5.0.2</version>
</dependency>

使用案例:

 @Test
    public void jedis(){
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        jedis.set("name","yi");
        jedis.close();
    }

2.springboot官方编写的整合库

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

使用案例:

 	@Autowired
    private RedisTemplate redisTemplate;//通过自动注入
    @Test
    public void t(){
		//使用opsFor系列方法获取xxxOperations对象
         ValueOperations valueOperations = redisTemplate.opsForValue();
        valueOperations.set("name3","yi");

        HashOperations hashOperations = redisTemplate.opsForHash();
        hashOperations.put("student","name","yi");
        hashOperations.put("student","age","18");
        String age = (String) hashOperations.get("student", "age");

    }

RedisTemplate默认使用 JdkSerializationRedisSerializer 进行序列化。
序列化的key结果为:
在这里插入图片描述

为什么是这样一串奇怪的 16 进制? ObjectOutputStream#writeString(String str, boolean unshared) 实际就是标志位 + 字符串长度 + 字符串内容

如果需要redis中设定的key值与我们在程序中设定的值相同,则需要改变序列化的方式,即自定义RedisTemplate。
创建一个配置类来定义RedisTemplate Bean,设置序列化方式 StringRedisSerializer。

@Configuration
public class RedisConfiguration extends CachingConfigurerSupport {
    @Bean
    RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
        RedisTemplate<Object,Object> redisTemplate = new RedisTemplate();
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        return redisTemplate;
    }
}

3.Spring cache

通过注解来新增/删除缓存。

配置信息:

引入redis架包:

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

指定缓存的类型为redis,并配置redis IP端口号

#application.yml:
spring:
  redis:
    host: 127.0.0.1
    port: 6379
    database: 0
   
  cache:
    type: redis

操作步骤

  1. 在启动类上加入@EnableCaching,开启缓存功能
  2. 注入CacheManager,选择缓存实现方法
    @Autowired
    private CacheManager cacheManager;
  3. 在需要cache操作的方法上加上相关注解

注解

@CachePut

使用 @CachePut 注解就能够将方法的返回值放到缓存中,使用该注解时可以指定以下几个参数:

参数解释example
value缓存的名称,每个缓存名称下可以有多个 key,必须指定至少一个@CachePut(value=“my cache”)
key缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不指定,默认按照方法的所有参数进行组合@CachePut(value=“testcache”, key=“#user.id”)
condition缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false,只有为 true 才进行缓存@CachePut(value=“testcache”, condition=“#userName.length()>2”)
@CacheEvict

使用 @CacheEvict 注解就能够将一条或多条数据从缓存中删除,使用该注解时可以指定以下几个参数:

参数解释example
value缓存的名称,每个缓存名称下可以有多个 key,必须指定至少一个@CacheEvict(value=“my cache”)
key缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不指定,默认按照方法的所有参数进行组合@CacheEvict(value=“testcache”, key=“#id”)
condition缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false,只有为 true 才进行清空缓存@CacheEvict(value=“testcache”, condition=“#userName.length()>2”)
allEntries是否清空所有缓存内容,默认为 false,如果指定为 true,则方法调用后将立即清空所有缓存@CachEvict(value=“testcache”, allEntries=true)
beforeInvocation是否在方法执行前就清空,默认为 false,如果指定为 true,则在方法还没有执行的时候就清空缓存,缺省情况下,如果方法执行抛出异常,则不会清空缓存@CachEvict(value=“testcache”,beforeInvocation=true)
@Cacheable

使用 @Cacheable 注解,在方法执行前 Spring 会先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中。使用该注解时可以指定以下几个参数:

参数解释example
value缓存的名称,每个缓存名称下可以有多个 key,必须指定至少一个例如: @Cacheable(value=“mycache”) @Cacheable(value={“cache1”, “cache2”}
key缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不指定,默认按照方法的所有参数进行组合@Cacheable(value=“testcache”, key=“#userName”)
condition缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false,只有为 true 才进行缓存@Cacheable(value=“testcache”, condition=“#userName.length()>2”)
unless与 condition 相反,满足条件的时候则不缓存数据@Cacheable(value=“testcache”, unless=“#result == null”)

http://www.niftyadmin.cn/n/5124225.html

相关文章

buuctf_练[CSAWQual 2019]Web_Unagi

[CSAWQual 2019]Web_Unagi 文章目录 [CSAWQual 2019]Web_Unagi掌握知识解题思路关键payload 掌握知识 ​ XXE漏洞利用&#xff0c;xml文件转换编码绕过WAF(UTF-8 --> UTF-16)&#xff0c;xml文件格式的书写 ​ 再遇到上传xml文件被拦截&#xff0c;就尝试修改编码再上传&a…

二叉搜索树的实现(递归方式)

目录 实现思路 插入操作 删除操作 完整代码 测试案例 总结 二叉搜索树&#xff08;Binary Search Tree&#xff0c;BST&#xff09;是一种常用的数据结构&#xff0c;它具有以下特点&#xff1a; 左子树上所有节点的值均小于它的根节点的值右子树上所有节点的值均大于它的…

Python学习笔记合集(Matplotlib总结)

Python学习笔记合集 Python学习笔记合集(Matplotlib总结)Python学习笔记第五十九天&#xff08;Matplotlib 安装&#xff09;Python学习笔记第六十天&#xff08;Matplotlib Pyplot&#xff09;Python学习笔记第六十一天&#xff08;Matplotlib 绘图标记&#xff09;Python学习…

跨境电商外贸出口电动自行车、脚踏车、单车美国站需要什么认证?UL2849和GCC认证解析

自行车又称脚踏车或单车&#xff0c;是一种以人力作机械传动的代步和运载工具。自行车、脚踏车、单车出口美国站需办理UL2849认证和GCC认证。 美国自行车类产品安全要求&#xff1a; 2011年5月13日&#xff0c;美国消费品安全委员会&#xff08;CPSC)在对来自行车业及消费者的…

Go 语言操作 MongoDb

文章目录 连接数据库插入数据库插入一条数据批量插入数据 查询数据用 BSON 进行复合查询聚合查询 更新数据删除数据 连接数据库 package mainimport ("context""go.mongodb.org/mongo-driver/mongo""go.mongodb.org/mongo-driver/mongo/options"…

果脯干货经营小程序商城的效果如何

果脯干货产品作为食品的一种&#xff0c;同样是受到不少超市老板和零售客户的喜爱&#xff0c;对果脯干货经营商家来说&#xff0c;除了线下门店经营外&#xff0c;线上也同样是卖货的优质渠道。 但入驻第三方平台受到限制、抽成分佣等&#xff0c;通过朋友圈、社群分享又只能…

HCIA数据通信——交换机(Vlan间的通信与安全)

前言 之前的提到了交换机的概念和实验。不过交换机的一些功能还没有说完&#xff0c;我们的实验也仅仅是阻止相同地址段的IP地址互通&#xff0c;也没有用到子接口和路由器。显然&#xff0c;那样的配置过于简单。 端口安全 Port Security&#xff08;端口安全&#xff09;的功…

Python武器库开发-高级特性篇(七)

高级特性篇(七) 装饰器 装饰器是给现有的模块增添新的小功能&#xff0c;可以对原函数进行功能扩展&#xff0c;而且还不需要修改原函数的内容&#xff0c;也不需要修改原函数的调用。这也称为元编程&#xff0c;因为程序的一部分试图在编译时修改程序的另一部分。Python中的…