2.1、介绍
Redis给Java提供了对应的方式操作Redis,代表性的有Jedis和RedisTemplate。我们上课使用Jedis,使用Jedis和Springboot整合。
2.2、使用
2.2.1、pom文件
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
2.2.2、数据库连接配置
我们新建一个redis.properties文件
#Matser的ip地址 redis.hostName=zhiyou101 #端口号 redis.port=6379 #如果有密码 redis.password=123456 #客户端超时时间单位是毫秒 默认是2000 redis.timeout=10000 #最大空闲数 redis.maxIdle=300 #连接池的最大数据库连接数。设为0表示无限制,如果是jedis 2.4以后用redis.maxTotal #redis.maxActive=600 #控制一个pool可分配多少个jedis实例,用来替换上面的redis.maxActive,如果是jedis 2.4以后用该属性 redis.maxTotal=1000 #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。 redis.maxWaitMillis=1000 #连接的最小空闲时间 默认1800000毫秒(30分钟) redis.minEvictableIdleTimeMillis=300000 #每次释放连接的最大数目,默认3 redis.numTestsPerEvictionRun=1024 #逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1 redis.timeBetweenEvictionRunsMillis=30000 #是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个 redis.testOnBorrow=true #在空闲时检查有效性, 默认false redis.testWhileIdle=true
#redis集群配置 #spring.redis.cluster.nodes=192.168.177.128:7001,192.168.177.128:7002,192.168.177.128:7003,192.168.177.128:7004,192.168.177.128:7005,192.168.177.128:7006 #spring.redis.cluster.max-redirects=3
#哨兵模式 #redis.sentinel.host1=192.168.177.128 #redis.sentinel.port1=26379 #redis.sentinel.host2=172.20.1.231 #redis.sentinel.port2=26379
2.2.3、创建数据库连接池
我们使用JavaConfig方式写数据库连接池
package com.zhiyou100.day6_26_redis.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 org.springframework.context.annotation.PropertySource; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig;
/**
* ClassName: RedisConfig
* Description:
* date: 2019/6/26 0026 上午 10:57
* @author stt
* @since JDK 1.8
*/
@Configuration
@PropertySource(value = {"classpath:redis.properties"})
public class RedisConfig {
//创建日志对象
Logger logger = LoggerFactory.getLogger(RedisConfig.class);
//获取主机名
@Value("${redis.hostName}")
private String hostname;
//端口号
@Value("${redis.port}")
private Integer port;
//超时时间
@Value("${redis.timeout}")
private Integer timeout;
//最大空闲数
@Value("${redis.maxIdle}")
private Integer maxIdle;
//最多等待时间
@Value("${redis.maxWaitMillis}")
private Long maxWaitMillis;
//最大连接数
@Value("${redis.maxTotal}")
private Integer maxTotal;
//获取密码
@Value("${redis.password}")
private String password;
//创建连接池对象
@Bean
public JedisPool jedisPool(){
//创建JedisPoolConfig对象,设置连接数等配置
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxWaitMillis(maxWaitMillis);
config.setMaxTotal(maxTotal);
config.setMaxIdle(maxIdle);
//创建JedisPool对象,将JedisPoolConfig对象传进去
JedisPool jedisPool = new JedisPool(config, hostname, port, timeout,password);
//输出该对象测试有没有创建成功。
//输出使用日志对象输出,不适用单纯的输出语句
logger.info("jedisPool===>"+jedisPool);
//连接的端口,主机名等信息
logger.info("主机名:"+hostname+"port:"+port);
return jedisPool;
}
}
JedisDemo
package com.zhiyou100.jedis.redis;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import javax.annotation.Resource;
import java.util.Iterator;
import java.util.Set;
@Component
public class JedisDemo {
//注入jedispool对象
@Resource
private JedisPool pool;
public Jedis getjedis(){
System.out.println("jjjjjjjj");
//获取jedis
Jedis jedis = pool.getResource();
return jedis;
}
public Set<String> getKeys(String keys){
//获取jedis
Jedis jedis = getjedis();
Set<String> set = null;
if (keys != null){
set = jedis.keys(keys);
}else {
set = jedis.keys("*");
}
return set;
}
}
RestController
package com.zhiyou100.jedis.controller;
import com.zhiyou100.jedis.redis.JedisDemo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.Jedis;
import javax.annotation.Resource;
import java.util.Set;
@RestController
public class RedisController {
@Resource
private JedisDemo jedisDemo;
@RequestMapping(value = "jedis",method = RequestMethod.GET)
public Jedis jedis(){
return jedisDemo.getjedis();
}
//获取所有的key
@RequestMapping("keys")
public Set<String> getKeys(String key){
return jedisDemo.getKeys(key);
}
}
2.2.4、使用jedis完成crud操作
我们上边已经创建了jedisPool对象,我们从jedispool对象中获取jedis对象使用jedis对象操作redis。
2.2.4.1、获取jedis
2.3、注意
1、将Linux的防火墙关闭
临时关闭:systemctl stop firewalld
开机禁用:systemctl disable firewalld
启动防火墙:systemctl start firewalld
开机启用:systemctl enable firewalld
2、查看防火墙状态
[root@zhiyou101 ~]# firewall-cmd --state
3、关闭redis的受保护模式
到redis.conf文件中将protected-mode改为no
4、bind注释掉
5、Jedispool
2.4、url
http://localhost:8080/keys
2.5、项目中使用
项目中我们直接使用redis的工具类,一般在service层中使用,
1)在调用mapper查询之前调用jedis的对应的查询,在mapper之后调用对应的添加。
2)调用修改添加删除时需要保证redis中的数据和数据库中的数据是同步的,需要将redis中的数据先删除,再修改mysql中的数据,然后再查询和添加到redis中。