小弟也是初学者,若有问题,各位大佬指点指点
本系列目录
本章为springboot+redis系列第二节,主要jedis操作String类型数据
1.application.yml配置
server:
port: 8081
spring:
redis:
port: 6379
# password:
#没有设置密码,必须要去掉配置,否则连接不上redis
host: 127.0.0.1
jedis:
pool:
max-active: 10 #最大连接数
max-idle: 6 #最大空闲数
min-idle: 2 #最小空闲数
timeout: 2000 #连接超时
2.JedisPool配置
package cn.hui.redis2.config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* @Author Administrator
* @create 2020/7/10 19:49
*/
@Configuration
public class JedisConfig {
//创建日志
private Logger logger = LoggerFactory.getLogger(JedisConfig.class);
//@Value相当于,从application.yml文件的配置获取配置信息,给定义的变量赋值
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
//没有设置密码
// @Value("${spring.redis.password}")
// private String password;
@Value("${spring.redis.timeout}")
private int timeout;
@Value("${spring.redis.jedis.pool.max-active}")
private int maxActive;
@Value("${spring.redis.jedis.pool.min-idle}")
private int minIdle;
@Value("${spring.redis.jedis.pool.max-idle}")
private int maxIdle;
@Bean
public JedisPool jedisPool(){
//创建jedis连接池,配置
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMinIdle(minIdle);
jedisPoolConfig.setMaxTotal(maxActive);
//创建新jedisPool对象,未设置密码
JedisPool jedisPool = new JedisPool(jedisPoolConfig,host,port,timeout);
//项目启动的时候,会在控制台显示(第三行)
logger.info("jedis连接池连接成功"+host+"\t"+port);
return jedisPool;
}
}
3.业务接口,接口实现类
package cn.hui.redis2.service;
/**
* @Author Administrator
* @create 2020/7/11 10:51
*/
public interface UserService {
//根据输入的key查询对应的 String类型的vlaue
public String getString(String key);
}
package cn.hui.redis2.service.imp;
import cn.hui.redis2.service.UserService;
import lombok.extern.java.Log;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
/**
* @Author Administrator
* @create 2020/7/11 10:52
*/
@Service
@Log //private Logger logger = LoggerFactory.getLogger(JedisConfig.class);
public class UserServiceImp implements UserService {
@Autowired
private JedisPool jedisPool;
@Override
public String getString(String key) {
//创建key对应的变量
String val = null;
//1.得到jedis对象
Jedis jedis = jedisPool.getResource();
//2.判断此key是否在Redis中
if (jedis.exists(key)){
log.info("查询redis中数据");
val = jedis.get(key);
}else {
val = "数据库"+key;
log.info("模拟数据库查的"+val);
jedis.set(key,val);
}
//3.关闭连接
jedis.close();
return val;
}
}
4.测试类测试
不同之处:看控制台输出的日志
package cn.hui.redis2;
import cn.hui.redis2.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class Redis2ApplicationTests {
@Autowired
private UserService userService;
@Test
void contextLoads() {
}
//操作String类型的数据
/**
* 根据redis里是否存在key为"n2"的数据
* 若有返回redis查询的值
* 若无,查询数据库的值,并向Redis添加值
* */
@Test
void t1(){
String result = userService.getString("n2");
System.out.println(result);
}
}
运行第一次:
2020-07-11 12:25:30.456 INFO 5444 --- [ main] c.hui.redis2.service.imp.UserServiceImp : 模拟数据库查的数据库n2
数据库n2
运行第二次:
2020-07-11 12:42:00.482 INFO 11828 --- [ main] c.hui.redis2.service.imp.UserServiceImp : 查询redis中数据
数据库n2