java:Springboot集成redis
2023-12-13 14:48:11
导读
做一个入门的Springboot集成redis案例,当在 redis 查到键名 redis_name 有数据的话,就返回缓存的数据,如果没有数据,就从数据库里查询出 redis_name 对应的数据返回。
1、引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
application.properties 可配也可以用默认的
spring.data.redis.host=localhost
spring.data.redis.port=6379
2、创建utils
package com.zhangyu.utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
@Component
public class RedisUtil {
@Autowired
private RedisTemplate redisTemplate;
// 默认过期时间,单位秒
private static final long DEFAULT_EXPIRATION = 3600;
public void set(String key, String value) {
redisTemplate.opsForValue().set(key, value, DEFAULT_EXPIRATION, TimeUnit.SECONDS);
}
public void set(String key, String value, long expirationInSeconds) {
redisTemplate.opsForValue().set(key, value, expirationInSeconds, TimeUnit.SECONDS);
}
public Object get(String key) {
return redisTemplate.opsForValue().get(key);
}
public boolean exists(String key) {
return redisTemplate.hasKey(key);
}
public void delete(String key) {
redisTemplate.delete(key);
}
}
3、编写service层
package com.zhangyu.service;
import com.zhangyu.utils.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class MyCacheService {
@Autowired
private RedisUtil redisUtil;
public String getCachedValue(String key) {
// 先从缓存中获取数据
Object cachedValue = redisUtil.get(key);
Boolean hasKey = redisUtil.exists(key);
// 如果缓存中不存在,则模拟从数据库或其他数据源中获取数据,并存入缓存
if (!hasKey) {
System.out.println("正在从数据库取数据并存储进redis");
// 模拟从数据源获取数据
String dataFromDataSource = "mysql data";
// 存入缓存
redisUtil.set(key, dataFromDataSource);
return dataFromDataSource;
} else {
System.out.println("这是获取到redis中的数据: " + cachedValue);
return cachedValue.toString();
}
}
}
4、编写controller层触发service层业务
package com.zhangyu.controller;
import com.zhangyu.service.MyCacheService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CacheController {
@Autowired
private MyCacheService myCacheService;
@RequestMapping("/cache")
public String getCache () {
return myCacheService.getCachedValue("redis_name");
}
}
StringRedisTemplate和RedisTemplate的区别
上面 utils 中我们使用 RedisTemplate 存储字符串会包含一些二进制的内容,其实就是看起来难受,对存取没有影响,如果介意可以使用StringRedisTemplate
- StringRedisTemplate继承RedisTemplate。
- 两者的数据是不共通的
- 序列化策略不同
文章来源:https://blog.csdn.net/weixin_43972437/article/details/134859883
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!