Java操作Redis是通过RedisTemplate实现的,RedisTemplate是Spring Framework框架中用于操作Redis数据库的模板类,封装了Redis的数据访问层,简化了Redis数据操作的过程;
RedisTemplate提供了很多的API,可以执行Redis的各种命令,包括字符串、列表、哈希散列、集合、有序集合的操作;
Java操作Redis流程
- 第1步:添加依赖,刷新Maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- 第2步:配置文件中配置数据库连接信息
spring.redis.host=localhost
spring.redis.port=6379
#如果Redis没有密码此项可以不设置
#spring.redis.password=123456
spring.redis.database=0
- 第3步:创建Redis配置类
config.RedisConfig.java
//填写包名
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import java.io.Serializable;
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Serializable> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String,Serializable> redisTemplate = new RedisTemplate<>();
// 设置连接工厂
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置字符串序列化器
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setValueSerializer(RedisSerializer.json());
//设置hash的序列化器
redisTemplate.setHashKeySerializer(RedisSerializer.json());
redisTemplate.setHashValueSerializer(RedisSerializer.json());
return redisTemplate;
}
}
- 第4步:自动装配直接使用即可
//类中自动装配
@Autowired
private RedisTemplate<String, Serializable> redisTemplate;
//方法中直接使用
redisTemplate.opsForValue().set(key, value);
示例
工具类utils.CacheUtils.java
package xxx.base.utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.io.Serializable;
import java.util.concurrent.TimeUnit;
/**
* Redis的缓存工具类
*/
@Component
public class CacheUtil {
@Autowired
private RedisTemplate<String, Serializable> redisTemplate;
public void set(String key, Serializable value){
/*
* 1.opsForValue():操作字符串类型;
*2.opsForList():操作列表类型;
*3.opsForHash():操作哈希类型;
*4.opsForSet():操作集合类型;
*5.opsForZSet():操作有序集合;
*/
redisTemplate.opsForValue().set(key, value);
}
public Serializable get(String key){
return redisTemplate.opsForValue().get(key);
}
public void delete(String key){
redisTemplate.delete(key);
}
public void setExpire(String key, Serializable value, long timeout){
redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
}
public void lPush(String key, String... values){
redisTemplate.opsForList().leftPushAll(key, values);
}
public String lPop(String key){
return redisTemplate.opsForList().leftPop(key).toString();
}
}
操作缓存
//自动装配缓存工具类[自己创建的工具类,调用方法更方便]
@Autowired
private CacheUtil cacheUtil;
@GetMapping("selectIndex")
public JsonResult selectIndex(){
//利用缓存工具类中的工具方法;
Serializable weiboIndex = cacheUtil.get("weibo_index");
if (weiboIndex == null){
// mysql中查询
List<WeiboIndexVO> weiboIndexVOS = weiboMapper.selectIndex();
System.out.println("首页数据来自MySQL数据库");
// 缓存到redis中
//ops.set("weibo_index", (Serializable) weiboIndexVOS, 30, TimeUnit.SECONDS);
// 利用缓存工具类中的方法将首页数据缓存到Redis中
cacheUtil.setExpire("weibo_index", (Serializable) weiboIndexVOS, 30);
// 返回
return JsonResult.ok(weiboIndexVOS);
}
System.out.println("首页数据来自Redis数据库");
return JsonResult.ok(weiboIndex);
}