使用redis缓存数据的代码应用及使用场景
提需求:
- 用户登录 输入 电话号码和 验证码。验证码放到session 里面
页面输入验证码 和 session 里面的验证码进行比较
优化:
将上述的验证码 发送时 放到 redis 进行缓存
页面输入验证码 和 redis里面的验证码进行比较,同时设置验证码的失效时间 5分钟
原本使用mysql存取验证码的代码
使用redis缓存验证码并且进行比对
2.原来 页面的菜品分类查询菜品信息 是从 mysql 数据库查询的
优化:
将上述的菜品分类 的菜品信息 放入到redis 中进行缓存(缓存的数据类型自己决定)
String value = RedisTemplate.get(“key”)
If(value == null){
从mysql 中去查询数据
将mysql 中的数据 缓存到 redis 中
}
Return value;
3.修改商家后台数据,导致用户端数据不匹配
Redis 和 mysql 缓存数据一致性的问题?
优化:新增 和 修改的商家数据 的时候 将redis 缓存数据清理掉
保持代码一致性的逻辑
需要配置注入的序列化
redisTemplate ---à 可以存对象 key--à对象 (加上配置文件可以序列化)
StringRedisTemplate--à可以存字符串 key--à字符串
springCache注解使用方式 -----整合redis ------- 简化它得业务
不使用第三方 redis 数据库产品
默认 使用的是 本地对象进行缓存 ConcurrentHashMap 数据
/**
* CachePut:将方法返回值放入缓存
* value:缓存的名称,每个缓存名称下面可以有多个key
* key:缓存的key
*/
@CachePut(value = "userCache",key = "#user.id")
/**
* CacheEvict:清理指定缓存
* value:缓存的名称,每个缓存名称下面可以有多个key
* key:缓存的key
*/
@CacheEvict(value = "userCache",key = "#id")
@CacheEvict(value = "userCache",key = "#user.id")
/**
* Cacheable:在方法执行前spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中
* value:缓存的名称,每个缓存名称下面可以有多个key
* key:缓存的key
* condition:条件,满足条件时才缓存数据
* unless:满足条件则不缓存
*/
@Cacheable(value = "userCache",key = "#id",condition = "#result != null")
@Cacheable(value = "userCache",key = "#id",unless = "#result == null")
@Cacheable(value = "userCache",key = "#user.id + '_' + #user.name")
导入pom文件 这个是四个注解的jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
Redis依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Yml文件的配置
spring:
redis:
host: 127.0.0.1
port: 6379
password: root@123456 #密码看有没有设置
database: 0 #代表0号库
cache:
redis:
time-to-live: 1800000 #设置缓存过期时间,可选