Java Spring Boot + Vue 实习项目17:Redis缓存

1. 知识点
1.1 缓存一般用于在较短的时间对相同数据频繁读取的场合,将这些输入放入内存,直接从缓存取数据,以提高效率。
1.2 Redis是一个支持网络、可基于内存也可持久化的日志型key-value数据库(通过键查找,NoSQL),在应用中可以充当缓存,提高系统数据查询功能。
1.3 缓存业务数据,第一次查询将结果放在内存中,之后相同的查询直接从内存中读取。
当执行增删改时,将缓存清空。
1.4 缓存数据时,以查询方法的参数为键,以查询结果为值。如果方法的参数是一个类似以JavaBean的对象,用应当重写toString方法将属性的值串接成一个字符串,以确保封装相同属性值的JavaBean对象生成的键是相同的。比较好的toString实现策略是将本JavaBean对象序列化为一个字符串。
1.5 由于Redis和业务应用之间需要通过网络传输查询结果数据,即需要实现查询结果数据对象的序列化,依照Java的规定查询结果碧玺实现java.io.serializable接口,才能执行序列化操作。
java.io.serializable是一个标志性的接口,没有任何方法,仅仅用于说明实现改接口的类是可序列化的,即可以通过流进行读写。
1.6 Java中所有的对象都有toString方法(在Object中定义)。当对象被串接为字符串时,Java会自动调用该方法。原生的toString方法是将对象的类名串接对象的地址形成字符串,因此需要重写toString方法。
2. Redis运行
cd redis解压目录
redis-server redis.windows.conf 启动redis服务
另打开一个cmd窗口,切换到redis目录下,运行redis-cli -h 127.0.0.1 -p 6379
3. 在项目中引用redis
3.1 引入依赖
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
3.2 添加配置
application.properties:
spring.profiles.active=myredis
application-myredis.properties:
#Redis
spring.redis.database=1
spring.redis.host=127.0.0.1
spring.redis.password=
spring.redis.jedis.pool.max-idle=100
spring.redis.jedis.pool.max-wait=-1
spring.redis.jedis.pool.min-idle=2
spring.redis.port=6379
spring.redis.timeout=15000
spring.cache.type=redis
spring.cache.redis.time-to-live=6000000
3.3 在启动类App.java上添加@EnableCashing开启缓存。
3.4 作为参数的DTO重写toString方法。
@Override
    public String toString() {
        //将对象变为JSON
        try {
            String jsonStr = new ObjectMapper().writeValueAsString(this);
            return jsonStr;
        } catch (Exception e) {
            return "EmpDto{" +
                    "e_id='" + e_id + '\'' +
                    ", e_name='" + e_name + '\'' +
                    ", e_sex='" + e_sex + '\'' +
                    ", e_birth=" + e_birth +
                    ", d_id=" + d_id +
                    ", d_name='" + d_name + '\'' +
                    ", e_salary=" + e_salary +
                    ", e_status=" + e_status +
                    ", e_remark='" + e_remark + '\'' +
                    ", e_birth_start=" + e_birth_start +
                    ", e_birth_end=" + e_birth_end +
                    ", e_sal_start=" + e_sal_start +
                    ", e_sal_end=" + e_sal_end +
                    '}';
        }
    }
3.5 封装结果的JavaBean实现序列化接口。
public class Emp implements Serializable
3.6 业务实现类(impl)使用以下直接实现缓存业务数据。
类级别的注解:
@CacheConfig(cacheNames = "info-emp")
方法级别的注解:
@Cacheable(key = "targetClass+'.'+methodName+'()'") //key值是一个Spring表达式(SpEL)
@Cacheable(key = "targetClass+'.'+methodName+'('+#empDto+')'")
@CacheEvict(allEntries = true) // 执行本方法后清空所有本类(CacheConfig)下的缓存中的数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hinomoto Oniko

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值