代码拉取完成,页面将自动刷新
StringRedisTemplate
提供API简单的RedisClient
操作工具类直接注入RedisClient
对象后就可以进行使用
@Component
@RequiredArgsConstructor
public class InventoryTask {
private final RedisClient redisClient;
}
::: warning
使用普通redisTemplate
,需要注意key加上TOPIC_PREFIX
前缀
:::
使用RedisClient
的 convertAndSend
方法就可以发送消息,使用的序列化方式与缓存的一致,记录了被序列化的类型信息,可以直接反序列回原始对象,
/** 发布订阅消息 */
public void convertAndSend(String topic, Object message){
// 发布订阅主题前缀为 bootx:redis:topic:
redisTemplate.convertAndSend(RedisCode.TOPIC_PREFIX+topic,message);
}
实现RedisTopicListener
接口,然后实现对应的方法,onMessage
方法参数可以直接写对象类型,不再需要进行手动的反序列化
/**
* 测试消息队列
* @author xxm
* @date 2022/5/7
*/
@Component
public class T2TopicListener implements RedisTopicListener<KeyValue> {
// 要订阅的主题名
@Override
public String getTopic() {
return "test2";
}
// 接收消息并处理
@Override
public void onMessage(KeyValue obj) {
System.out.println(obj);
}
}
::: warning
基本满足在不严谨场合下的延时队列需求,不保证一定会生效。
:::
通过注册有存活时间的key,通过key过期的回调事件,可以变相实现了出一个简单的延时队列功能,通常用于sku预占、订单定时关闭等场合,实现 KeyExpiredListener
接口即可。
/**
* 库存解锁事件
* 样例key: inventory:lock:11251 inventory:lock: 为key前缀, 11251为key值
* @author xxm
* @date 2022/5/9
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class InventoryExpiredListener implements KeyExpiredListener {
// 要监听的key前缀
@Override
public String getPrefixKey() {
return "inventory:lock:";
}
// 具体的数据, 通常为数据id, 通过id查询到关联数据进行下一步的修改
@Override
public void onMessage(String key) {
log.info("过期key: "+key);
}
}
RedisClient
redis便捷封装请求类RedisClientAutoConfiguration
Redis自动配置类KeyExpiredListener
Key过期事件接口RedisTopicListener
redis消息订阅接口此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。