下午犯困,话不多说,直接上代码来品! 代码已详细注释
java代码实现
引入pom.xml
<!--redis缓存-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<!-- 格式化对象 转换 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.41</version>
</dependency>
创建Redis连接池
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* @author wzq
* @description
* @date 2021/4/14 10:10
*/
public class RedisPool {
private RedisPool(){
}
private static JedisPool jedisPool;
private static void initPool(){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
//连接池中最大的数量
jedisPoolConfig.setMaxTotal(1000);
//空闲时连接池的连接数量
jedisPoolConfig.setMaxIdle(100);
jedisPoolConfig.setMinIdle(100);
//
jedisPoolConfig.setTestOnReturn(true);
jedisPoolConfig.setTestOnBorrow(true);
jedisPool = new JedisPool(jedisPoolConfig, "192.168.42.166", 6379);
}
/**
* 静态块,里面中的方法只会被执行一次
*/
static {
initPool();
}
public static Jedis getConnection(){
return jedisPool.getResource();
}
}
创建Redis工具类
import redis.clients.jedis.Jedis;
/**
*@description
*@author wzq
*@date 2021/4/14 12:37
*
*/
public class RedisUtil {
/**
* 放数据
* @param key
* @param value
*/
public static void set(String key,String value){
Jedis connection = null;
try {
connection = RedisPool.getConnection();
connection.set(key, value);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}finally {
if(connection != null){
connection.close();
}
}
}
/**
* 取数据
* @param key
* @return
*/
public static String get(String key){
Jedis connection = null;
try {
connection = RedisPool.getConnection();
return connection.get(key);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}finally {
if(connection != null){
connection.close();
}
}
}
/**
* 删数据
* @param key
*/
public static void delete(String key){
Jedis connection = null;
try {
connection = RedisPool.getConnection();
connection.del(key);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}finally {
if(connection != null){
connection.close();
}
}
}
}
验证是否可以连接(单元测试)
import org.junit.Test;
/**
* @author wzq
* @description
* @date 2021/4/14 12:44
*/
public class TestRedis {
@Test
public void test1(){
RedisUtil.set("userName", "wang");
String userName = RedisUtil.get("userName");
System.out.println(userName);
}
}
结合项目在缓存取数据
//获取数据时
@Override
public ServerResponse query() {
//先在缓存中查找 cateList是往redis中的key
String cateListRedis= RedisUtil.get("cateList");
//当缓存不为空时
if(StringUtils.isNoneEmpty(cateListRedis)){
//将JSON格式的字符串转化为java对象
List<Cate> cateList = JSON.parseArray(cateListRedis, Cate.class);
//返回前台
return ServerResponse.success(cateList);
}
//缓存为空才会查询数据库并且往缓存放一份
List<Cate> cateList=cateMapper.query();
//将java对象转换为String[JSON格式的字符串]添加到缓存中
String toJSONString = JSON.toJSONString(cateList);
RedisUtil.set("cateList",toJSONString);
//返回前台
return ServerResponse.success(cateList);
}
脏数据处理
什么是脏数据 当缓存中的数据与数据库的数据不一致时就被称为脏数据
//在新增、修改、删除后删除缓存脏数据
RedisUtil.delete("cateList");