记录:407
场景:在Spring Boot微服务使用Jedis操作Redis String字符串。
版本:JDK 1.8,Spring Boot 2.6.3,redis-6.2.5,jedis-3.7.1。
1.微服务中配置Redis信息
1.1在application.yml中Jedis配置信息
hub:
example:
redis:
jedis:
host: 192.168.19.203
port: 28001
password: 12345678
timeout: 60000
1.2使用ConfigurationProperties加载Jedis配置
Spring Boot微服务在启动时,自动注解机制会读取application.yml的Jedis相关注入到JedisConnectProperties 对象。
在Spring环境中,注入JedisConnectProperties对象,就能获取到Redis相关配置信息。也就是Jedis客户端必须的参数。
定义JedisConnectProperties 类,扫描yml中的hub.example.redis.jedis配置。
@Component
@ConfigurationProperties(prefix="hub.example.redis.jedis")
public class JedisConnectProperties {
private String host;
private int port;
private int timeout;
private String password;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public int getTimeout() {
return timeout;
}
public void setTimeout(int timeout) {
this.timeout = timeout;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
1.3在pom.xml添加依赖
在Spring Boot中默认集成jedis,使用时无需加版本号,本例版本3.7.1是Spring Boot 2.6.3对应的版本。
redis.clients
jedis
3.7.1
2.微服务中配置Jedis
2.1配置Jedis
@Configuration
public class JedisConfig {
@Autowired
private JedisConnectProperties jedisProperties;
@Bean("jedisPoolConfig")
public JedisPoolConfig jedisPoolConfig() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(30);
jedisPoolConfig.setMaxIdle(30);
jedisPoolConfig.setMinIdle(1);
jedisPoolConfig.setNumTestsPerEvictionRun(-1);
jedisPoolConfig.setTestOnBorrow(true);
jedisPoolConfig.setTestOnReturn(false);
jedisPoolConfig.setBlockWhenExhausted(false);
return jedisPoolConfig;
}
@Bean("jedisPool")
public JedisPool jedisPool(JedisPoolConfig jedisPoolConfig) {
JedisPool jedisPool = new JedisPool(jedisPoolConfig,
jedisProperties.getHost(),
jedisProperties.getPort(),
jedisProperties.getTimeout(),
jedisProperties.getPassword());
return jedisPool;
}
}
2.2解析
在配置Jedis后,在Spring环境中可以使用@Autowired自动注入jedisPool,从Jedis资源池中获取Jedis就可以操作Redis了。
3.使用Jedis操作Redis String字符串
3.1简要说明
使用Jedis操作字符串,常用操作:增、查、改、删、设置超时等。
3.2 SET命令的后缀解析
EX:设置键的过期时间为秒(second)。
PX:设置键的过期时间为毫秒(millisecond)。
NX:只在键不存在时,才对键进行设置操作。
XX:只在键已经存在时,才对键进行设置操作。
3.3操作示例
@RestController
@RequestMapping("/hub/example/loadJedis")
@Slf4j
public class LoadJedisController {
// 注入JedisPool资源池
@Autowired
private JedisPool jedisPool;
/**
* 在Spring Boot微服务使用Jedis操作Redis String字符串
*/
@GetMapping("/jedis02-01")
public Object loadData02_01() {
log.info("Jedis操作开始...");
// 1.获取Jedis对象
Jedis jedis = jedisPool.getResource();
// 2.增
// 2.1写一条数据
jedis.set("CityInfo:suzhou02:01", "苏州");
// 2.2写一条数据,键不存在时,才对键进行设置操作
jedis.setnx("CityInfo:suzhou02:02", "苏州-工业园区");
// 2.3写一条数据,并设置超时,600秒
jedis.setex("CityInfo:suzhou02:03", 600L, "苏州-相城");
// 2.4写批量数据,奇数位置是键,偶数位置是值
jedis.mset("CityInfo:suzhou02:04", "苏州-昆山",
"CityInfo:suzhou02:05", "苏州-吴江");
// 3.查
// 3.1查询一个键
String city = jedis.get("CityInfo:suzhou02:01");
// 3.1查询批量键
List cityList = jedis.mget("CityInfo:suzhou02:01",
"CityInfo:suzhou02:02",
"CityInfo:suzhou02:03");
// 4.改
// 4.1修改一条数据
jedis.set("CityInfo:suzhou02:01", "苏州-姑苏");
// 4.1修改一条数据,只有键存在才修改
SetParams setParams01 = new SetParams();
setParams01.ex(5 * 60L);
setParams01.xx();
jedis.set("CityInfo:suzhou02:02", "苏州-工业园区-苏州", setParams01);
// 5.删
// 5.1删除一条数据
jedis.del("CityInfo:suzhou02:01");
// 5.1删除批量数据
jedis.del("CityInfo:suzhou02:01", "CityInfo:suzhou02:02");
// 6.判断键是否存在
Boolean exists01 = jedis.exists("CityInfo:suzhou02:01");
Long exists02 = jedis.exists("CityInfo:suzhou02:01", "CityInfo:suzhou02:02");
// 7.设置超时
// 7.1设置5分钟超时
SetParams setParams02 = new SetParams();
setParams02.ex(5 * 60L);
jedis.set("CityInfo:suzhou02:04", "苏州-昆山", setParams02);
// 7.2设置10分钟超时
jedis.expire("CityInfo:suzhou02:04", 10 * 60L);
// 8.查存活时间
Long ttl = jedis.ttl("CityInfo:suzhou02:04");
// 9.ping判断服务是否存在
String pingResult = jedis.ping();
// 10.释放Jedis对象
jedis.close();
log.info("Jedis操作结束...");
return "执行成功";
}
}
3.4测试验证
使用Postman测试。
请求RUL:http://127.0.0.1:18205/hub-205-redis/hub/example/loadJedis/jedis02-01
以上,感谢。
2023年4月15日