springboot 集成redis ,使用原生的jedis ,有点繁琐,本身springboot 已经集成了 redis并有 redisTemplate 可以使用,不过还是多少有点坑,需要提前说明的
首先要引入jar包依赖
然后在 application 配置文件中 配置redis 的连接项
接着最简单的使用就是
或者
如果你配置环境对的话,redis 就可以使用了
springboot 在启动会自己初始化 RedisConnectionFactory redisConnectionFactory
这个对象,然后注入 ,并初始化化一个 RedisTemplate 对象,这样感觉无缝连接到redis了,但是吧,平时没问题,一旦时间久了就会出问题,就是redis 的序列化和反序列化问题,之前没有在log 里捕捉 这个反序列化的异常,后来捕捉到这个异常,
springboot在反序列话 redis,有点bug
如何破解 ,就是在初始化 RedisTemplate 这个bean 的时候就配置一下序列化和反序列化的属性,
声明一个 RedisService 公共类,并加 @Component 注解, 在这个里面初始化化 RedisTemplate,需要注意的是 就是你的key 对应的value存的是什么类型,如果是String
,就用new StringRedisSerializer(),如果是对象类 json ,就使用
new Jackson2JsonRedisSerializer(Objectclass);或者
new GenericJackson2JsonRedisSerializer()),不然这个还会报错,
然后我们在这个里面 声明 get set exist remove redis key 的 *** 作
最后使用 redis 的时候 ,直接注入 RedisService 就可以了
RedisService
另外 springboot 请求外部>
/
Redis 相关的配置,包含推送,以及对象编码的定义
/
@Configuration
public class RedisConfig {
public @Bean
RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate template = new RedisTemplate>();
templatesetConnectionFactory(connectionFactory);
templatesetDefaultSerializer(new GenericJackson2JsonRedisSerializer());
templatesetKeySerializer(new StringRedisSerializer());
templatesetHashKeySerializer(new GenericJackson2JsonRedisSerializer());
templatesetValueSerializer(new GenericJackson2JsonRedisSerializer());
return template;
}
@Bean
ChannelTopic topic() {
return new ChannelTopic("messageQueue");
}
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
containersetConnectionFactory(connectionFactory);
containeraddMessageListener(listenerAdapter, new PatternTopic("messageQueue"));
return container;
}
@Bean
MessageListenerAdapter listenerAdapter(Receiver receiver) {
return new MessageListenerAdapter(receiver, "receiveMessage");
}
}
public enum BusinessTypeEnum {
//修改SystemConfig缓存
UPDATE_SYSTEM_CONFIG;
}
//发布者接口
public interface MessagePublisher {
void publish(String message);
}
@Component
public class RedisMessagePublisher implements MessagePublisher{
private final static Logger logger = LoggerFactorygetLogger(RedisMessagePublisherclass);
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private ChannelTopic topic;
@Override
public void publish(String message) {
loggerinfo("推送信息:"+message);
redisTemplateconvertAndSend(topicgetTopic(), message);
}
}
public interface Receiver { void receiveMessage(String message); }
@Component
public class MessageReceiver implements Receiver {
private final static Logger logger = LoggerFactorygetLogger(MessageReceiverclass);
@Autowired
private ISystemConfigService systemConfigService;
@Override
public void receiveMessage(String message) {
loggerinfo("消息接收:"+message);
JSONObject object = JSONObjectparseObject(message);
String businessType = objectgetString("businessType");
loggerinfo("处理业务类型:businessType="+businessType);
if(BusinessTypeEnumUPDATE_SYSTEM_CONFIGtoString()equals(businessType)){//处理SystemConfig缓存
String jsonStr = objectgetString("jsonStr");
if(jsonStr!=null&&!""equals(jsonStr)){
JSONObject json = JSONObjectparseObject(objectgetString("jsonStr"));
for(String key:jsonkeySet()){
String value = jsongetString(key);
SystemConfig systemConfig = SystemConfigContainerinstance()getSystemConfig(key);
if(systemConfig!=null){
systemConfigsetKeyValue(value);
SystemConfigContainerinstance()uptSystemConfig(systemConfig);
}else{
systemConfig = systemConfigServiceselectByPrimaryJianMing(key);
systemConfigsetKeyValue(value);
SystemConfigContainerinstance()uptSystemConfig(systemConfig);
}
}
}
}
}
}
在我们业务开发过程中,经常会有需求做一些定时任务,但是由于定时任务的特殊性,以及一些方法的 幂等性 要求,在分布式多节点部署的情况下,某个定时任务只需要执行一次。
1 背景介绍
ShedLock(>
数据完全使用JSON式毕竟redis直接set、get使用起
门槛低redis没提供专用设置象需要自进行改写担JSON转象消耗资源情况问题需要考量几第
点:使用JSON转换lib否存性能问题第二点:数据数据量级别存储百万级数据象建议采用存储序列化象式
少量数据级象或者数据象字段建议采用JSON转换String式毕竟redis存储字符类型部优化非具体采
用式与要看所使用场景
在 Spring Boot 中使用 Redis,需要添加以下依赖启动器:
<dependency>
<groupId>orgspringframeworkboot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
这个依赖启动器包含了 Spring Data Redis 客户端库,可以方便地使用 Redis。
在添加了这个依赖启动器之后,需要在 `applicationproperties` 或 `applicationyml` 配置文件中添加 Redis 的配置信息,例如:
springredishost=localhost
springredisport=6379
springredispassword=yourpassword
这个配置文件中指定了 Redis 服务器的地址、端口和密码。如果 Redis 服务器没有设置密码,可以省略 `springredispassword` 配置项。
在配置文件中添加了 Redis 的配置信息之后,就可以在 Spring Boot 应用程序中使用 Redis 了。可以使用 `@Autowired` 注解注入 `RedisTemplate` 或 `StringRedisTemplate` 对象,然后使用这些对象 *** 作 Redis 数据库。
例如,以下代码演示了如何使用 `StringRedisTemplate` 对象向 Redis 中写入和读取数据:
@RestController
public class RedisController {
@Autowired
private StringRedisTemplate redisTemplate;
@GetMapping("/redis/set")
public String setRedisValue() {
redisTemplateopsForValue()set("name", "Tom");
return "Set Redis Value Success";
}
@GetMapping("/redis/get")
public String getRedisValue() {
String name = redisTemplateopsForValue()get("name");
return "Get Redis Value: " + name;
}
}
这个控制器中使用 `StringRedisTemplate` 对象向 Redis 中写入和读取数据。可以通过访问 `/redis/set` 和 `/redis/get` 接口测试 Redis 的读写 *** 作。
以上就是关于java选的jdk11为什么变成了17全部的内容,包括:java选的jdk11为什么变成了17、spring+jedis保存数据到redis的key乱码问题、SpringBoot进阶之缓存中间件Redis等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)