LJF-Framework 第4章LjfCacheService适配redis
一、新建模块ljf-cache-spring-redis
项目结构如下:
我整了个聚合模块ljf-plugin,用来整理所有的插件,并方便使所有插件使用同一版本的依赖。
二、添加依赖
父项目依赖
com.ljf
ljf-dependencies
1.0-SNAPSHOT
pom
import
本项目依赖
org.springframework.boot
spring-boot-starter-data-redis
com.ljf.framework
ljf-framework
三、实现LjfCacheService
package com.ljf.plugin.spring.redis;
import com.ljf.framework.cache.LjfCacheService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;
/**
* 说明:使用redis缓存
*
* @Auther: lijinfeng
* @Date: 2023/9/20
*/
@Service
public class LjfCacheServiceForRedis implements LjfCacheService {
/**
* String专用
*/
public StringRedisTemplate stringRedisTemplate;
/**
* Object专用
*/
public RedisTemplate objectRedisTemplate;
/**
* 标记:是否已初始化成功
*/
public boolean isInit;
@Autowired
public void init(RedisConnectionFactory connectionFactory) {
// 不重复初始化
if(this.isInit) {
return;
}
// 指定相应的序列化方案
StringRedisSerializer keySerializer = new StringRedisSerializer();
JdkSerializationRedisSerializer valueSerializer = new JdkSerializationRedisSerializer();
// 构建StringRedisTemplate
StringRedisTemplate stringTemplate = new StringRedisTemplate();
stringTemplate.setConnectionFactory(connectionFactory);
stringTemplate.afterPropertiesSet();
// 构建RedisTemplate
RedisTemplate template = new RedisTemplate();
template.setConnectionFactory(connectionFactory);
template.setKeySerializer(keySerializer);
template.setHashKeySerializer(keySerializer);
template.setValueSerializer(valueSerializer);
template.setHashValueSerializer(valueSerializer);
template.afterPropertiesSet();
// 开始初始化相关组件
this.stringRedisTemplate = stringTemplate;
this.objectRedisTemplate = template;
this.isInit = true;
}
@Override
public String get(String key) {
return stringRedisTemplate.opsForValue().get(key);
}
@Override
public void set(String key, String value, long timeout) {
stringRedisTemplate.opsForValue().set(key,value,timeout,TimeUnit.SECONDS);
}
@Override
public void update(String key, String value) {
Long expire = stringRedisTemplate.getExpire(key);
stringRedisTemplate.opsForValue().set(key,value,expire,TimeUnit.SECONDS);
}
@Override
public void delete(String key) {
stringRedisTemplate.delete(key);
}
@Override
public long getTimeout(String key) {
return stringRedisTemplate.getExpire(key);
}
@Override
public void updateTimeout(String key, long timeout) {
stringRedisTemplate.expire(key,timeout, TimeUnit.SECONDS);
}
@Override
public Object getObject(String key) {
return objectRedisTemplate.opsForValue().get(key);
}
@Override
public void setObject(String key, Object object, long timeout) {
objectRedisTemplate.opsForValue().set(key,object,timeout,TimeUnit.SECONDS);
}
@Override
public void updateObject(String k, Object v) {
Long expire = objectRedisTemplate.getExpire(k);
objectRedisTemplate.opsForValue().set(k,v,expire,TimeUnit.SECONDS);
}
@Override
public void deleteObject(String key) {
objectRedisTemplate.delete(key);
}
@Override
public long getObjectTimeout(String key) {
return objectRedisTemplate.getExpire(key);
}
@Override
public void updateObjectTimeout(String key, long timeout) {
objectRedisTemplate.expire(key,timeout, TimeUnit.SECONDS);
}
}
四、新建LjfCacheRegister注入bean
package com.ljf.plugin.spring.redis;
import com.ljf.framework.LjfManager;
import com.ljf.framework.cache.LjfCacheService;
import org.springframework.beans.factory.annotation.Autowired;
/**
* 说明:
*
* @Auther: lijinfeng
* @Date: 2023/9/20
*/
public class LjfCacheRegister {
/**
* 注入spring上下文bean
*/
@Autowired(required = false)
public void getLjfCacheForRedis(LjfCacheService ljfCacheService) {
LjfManager.setLjfCacheService(ljfCacheService);
}
}
五、EnableAutoConfiguration注册
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.ljf.start.spring.LjfBeanInject