Spring Cache 和Redis 小记

本文深入探讨了SpringCache与Redis的结合使用,讲解了@Cacheable与@CacheEvict注解的应用场景,以及如何在pom.xml中引入Redis依赖。同时,介绍了SpringCache的缓存策略,Redis的基本操作方法,并提供了Docker安装Redis的步骤。


springcache和redis通常结合使用,本次小项目的pom.xml中需加入redis的jar
redis 添加jar包

Spring Cache

查询建议:@Cacheable
增删改建议:@CacheEvict

@Transactional注解(声明式事务管理):
本质为对方法前后进行拦截,在目标方法开始之前创建或者加入一个事务,在执行完成后根据执行情况提交事务或者回滚事务。
优点:
不需要通过编程方式管理事务,只需在配置文件中做相关事务规则声明,或者采用
@Transactional注解的方式将事务规则应用到业务逻辑中。

  1. @Cacheable:
    @Cacheable
    红色部分(key):表示缓存key,用来指定Spring 缓存方法返回结果时所对应的key值(如果没有指定key,Spring会使用默认策略来生成key)。
    —相当于sql语句中的……where id = ?
    (默认为空)
    此时为查找和删除操作,即只需要根据id来操作。
    蓝色部分(cacheNames/value):即“缓存名称”(不能为空),表示该方法的缓存的返回结果是被缓存到哪一个缓存区域,即相对应的缓存区的名称。(可以为一个cache也可以是cache数组(多个cache))。
    黄色部分(相当于key/value中的后者):即要在缓存中缓存的返回值。
    1. @CacheEvict:
      @CacheEvict
      红色部分:同上
      蓝色部分:同上
      此时为增加/修改操作,即放进来的是一个对象,那么key值就是此对象中的id。
      注意:为了避免更新时缓存key重复而覆盖原值导致数据丢失,在定义key值时最好确保其唯一性。(建议”#active.id”+’andOrUpdate’(方法名))

Redis

redisTemplate声明

注意:如果用RedisTemplate<>,类型必须要比父类的类型小

Redis的opsForValue( )方法

set(K key,V value):新增一个字符串类型的值,key是键,value是值。
Redis的opsForValue( ).set
get(Object key):获取key键的相对应的值。
Redis的opsForValue( ).get
使用Spring Cache /redis 时 ,如果在缓存中存在相同的内容,且不是相同类,则在postman查询时会报错:
postman报错

docker 安装 redis

		方法一:docker serch redis(搜镜像然后下载)
		方法二(推荐):https://hub.docker.com/
					查找所需镜像用 docker pull xxx 下载
					docker pull redis(不加版本号默认为最新版)

第一次运行
docker run -di --name=myproject_myredis -p 6379:6379 redis
正常启动
docker start xxx

### Spring CacheRedis集成 Spring Cache抽象提供了一种统一的方式来管理应用程序中的缓存数据。当使用Redis作为底层存储时,可以实现高性能的数据访问模式。通过将Spring CacheRedis相结合,能够充分利用两者的优势。 #### 集成方式 为了使Spring应用能利用Redis进行缓存操作,需引入`spring-boot-starter-data-redis`依赖项[^1]: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 配置文件中定义连接参数以便于建立到Redis服务器的链接: ```properties spring.cache.type=redis spring.redis.host=localhost spring.redis.port=6379 ``` 接着,在业务逻辑层面上只需简单标注方法即可完成自动化的缓存读写功能: ```java @Cacheable(value="items", key="#id") public Item findById(Long id){ // ... fetch from database ... } ``` 上述代码片段展示了如何基于ID查找商品信息并将其结果保存至名为“items”的缓存区域里。 #### 性能对比分析 相较于其他内存数据库解决方案,如GemFire所提供的原生支持以及查询特性,Redis以其简洁性高效性著称。特别是在处理大规模并发请求场景下表现出色;而GemFire则更侧重于分布式计算环境下的复杂事务管理高可用架构设计。 对于简单的键值对存储需求来说,Redis无疑是更为轻量级的选择。它不仅提供了丰富的API接口用于执行各种命令[^2],而且其单线程模型也确保了较高的吞吐率服务稳定性。 然而值得注意的是,尽管二者都能很好地满足不同层次的应用开发要求,但在具体选型过程中还需综合考虑项目背景技术栈等因素做出合理决策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值