Redis(3) 整合
文章目录
前言
springboot+mybatis框架整合redis cluster
springboot加载自定义配置文件
mybatis一二级
一、缓存流程图

二、springboot+mybatis整合redis cluster
默认认为已经搭建好springboot+mybatis
下面只有redis整合部分
1.引入jar包
<!-- redis缓存 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- jedis包 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
2.redis集群连接配置
redis.maxIdle=2000
#?????
redis.maxTotal=20000
#???????
redis.maxWaitMillis=20000
#???borrow Object?????????????
redis.testOnBorrow=false
#??????
redis.nodes=192.168.106.130:6001,192.168.106.130:6002,192.168.106.131:6003,192.168.106.131:6004,192.168.106.132:6005,192.168.106.132:6006
3.使用springboot读取自定义配置
/**
* @author zhangyifan
* @version 8.0
* @description: 配置文件
* @date 2021/12/28 10:06
*/
@Component
@PropertySource("classpath:project.properties")//读取配置文件
// 也可以同时读取多个配置文件
@ConfigurationProperties(prefix = "redis") //只读以 redis 为开头的配置文件
@Data
public class RedisProperties {
//最大能够保持空闲状态的链接数
private int maxIdle;
//最大连接数
private int maxTotal;
//最大的等待时长
private int maxWaitMillis;
//当调用borrow Object方法时,是否进行有效性检查
private boolean testOnBorrow;
//集群节点配置
private String nodes;
}
4.编写配置类,使用自定义配置文件,创建rediscluster连接对象
/**
* @author zhangyifan
* @version 8.0
* @description:
* @date 2021/12/28 10:36
*/
@Configuration
public class RedisClusterConfig {
@Resource
private RedisProperties redisProperties;
/**
* 实例化 redis集群的连接工厂类
* @return
* <bean id='jedisConnectionFactory' class='org.springframework.data.redis.connection.jedis.JedisConnectionFactory'>
* * <constructor-args0 name=clusterConfig ref ='clusterConfig'></constructor-arg0>
* * <constructor-args1 name=poolConfig ref ='poolConfig'></constructor-arg1>
* * </bean>
*/
@Bean
public JedisConnectionFactory jedisConnectionFactory(){
//实例化并返回
JedisConnectionFactory jedisConnectionFactory=
new JedisConnectionFactory(configuration(),jedisPoolConfig());
return jedisConnectionFactory;
}
/**
* 实例化连接redis 集群 配置 并且依赖注入
* @return
*/
@Bean
public RedisClusterConfiguration configuration(){
//实例化对象
RedisClusterConfiguration redisClusterConfiguration=
new RedisClusterConfiguration();
//获取配置
String nodes = redisProperties.getNodes();
//分割配置得到的数组
String[] split = nodes.split(",");
for (String node:split
) {
String[] split1 = node.split(":");
RedisNode redisNode=new RedisNode(split1[0],Integer.valueOf(split1[1]));
redisClusterConfiguration.addClusterNode(redisNode);
}
return redisClusterConfiguration;
}
@Bean
public JedisPoolConfig jedisPoolConfig(){
JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(redisProperties.getMaxIdle());
jedisPoolConfig.setMaxTotal(redisProperties.getMaxTotal());
jedisPoolConfig.setMaxWaitMillis(redisProperties.getMaxWaitMillis());
jedisPoolConfig.setTestOnBorrow(redisProperties.isTestOnBorrow());
return jedisPoolConfig;
}
@Bean
public void setJedisConnectionFactory(){
//
MyCustomCache.setJedisConnectionFactory(jedisConnectionFactory());
}
}
5.编写mybatis二级缓存调用第3方redis cluster缓存
package com.aaa.sbm.util;
import com.mysql.jdbc.log.Log;
import io.swagger.models.auth.In;
import org.apache.ibatis.cache.Cache;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* @author zhangyifan
* @version 8.0
* @description:
* @date 2021/12/28 11:31
*/
public class MyCustomCache implements Cache {
//提供一个接受 String 参数作为 id 的构造器 缓存的唯一标识,不用自己赋值,每次缓存任何对象时,都会自动生成一个唯一的ID
private String id;
//依赖注入redis集群连接的数据源
private static JedisConnectionFactory jedisConnectionFactory;
// //实例化读写策略类 读读共享 读写互斥 写读互斥 写写互斥
private ReadWriteLock readWriteLock=new ReentrantReadWriteLock();
//使用静态方法给jedisConnectionFactory赋值
public static void setJedisConnectionFactory(JedisConnectionFactory jedisConnectionFactory){
MyCustomCache.jedisConnectionFactory = jedisConnectionFactory;
}
/**
* 空构造
*/
public MyCustomCache(){
}
/**
* id必须不能为空
* @param id
*/
public MyCustomCache(String id) {
if (null==id){
throw new IllegalArgumentException("id不能为空");
}
this.id = id;
}
@Override
public String getId() {
return this.id;
}
@Override
public void putObject(Object key, Object value) {
//获取连接对象 aaa 111
//需要序列化 实例化序列类 spring整合redis包提供的
//序列化key和value
RedisConnection connection =jedisConnectionFactory.getConnection();
JdkSerializationRedisSerializer jdkSerializationRedisSerializer=
new JdkSerializationRedisSerializer();
byte[] serialize = jdkSerializationRedisSerializer.serialize(key);
byte[] serialize1 = jdkSerializationRedisSerializer.serialize(value);
connection.set(serialize,serialize1);
}
@Override
public Object getObject(Object key) {
//获取连接对象
RedisConnection connection=jedisConnectionFactory.getConnection();
//需要序列化 实例化序列类 spring 整合redis包提供的
JdkSerializationRedisSerializer jdkSerializationRedisSerializer=new JdkSerializationRedisSerializer();
//序列化 key 和 value
byte[] serialize = jdkSerializationRedisSerializer.serialize(key);
byte[] bytes = connection.get(serialize);
return jdkSerializationRedisSerializer.deserialize(bytes);
}
@Override
public Object removeObject(Object key) {
RedisConnection connection=jedisConnectionFactory.getConnection();
//需要序列化 实例化序列类 spring 整合redis包提供的
JdkSerializationRedisSerializer jdkSerializationRedisSerializer=new JdkSerializationRedisSerializer();
byte[] serializeKey = jdkSerializationRedisSerializer.serialize(key);;
return connection.expire(serializeKey,0);
}
@Override
public void clear() {
//获取连接对象
RedisConnection connection = jedisConnectionFactory.getConnection();
//清空单前库
connection.flushDb();
//清空所有库
connection.flushAll();
}
@Override
public int getSize() {
RedisConnection connection = jedisConnectionFactory.getConnection();
Long aLong = connection.dbSize();
return Integer.valueOf(aLong.toString());
}
@Override
public ReadWriteLock getReadWriteLock() {
return readWriteLock;
}
}
在mapper中 调用第三方缓存配置
测试
http://localhost:18888/swagger-ui.html
查询

集群中放的缓存

新增 在查询


flushdb清空当前库
flushall 清空所有库

浙公网安备 33010602011771号