非银流水线上导入之缓存优化
混存的根本目的还是为了减少打到数据库的请求,至于起到多大的作用看场景,以及你的数据库的数据是不是海量,海量的数据库查询一次数据耗时是很长的,请求多了就更甚,所以建立缓存只要命中那么就是对数据库负担很好的一次减轻!

因为12306铁路购票系统的线路和票基本上是固定的,因为铁路就只有那么多,而且线路基本上也是固定的,涉及的搜索场景也不需要分词所以不需要使用Elasticsearch这个内存资源大户来做所谓分布式搜索,Redis基于内存也足够搜索使用!
设计合理的JSON结构存储登录设备信息,但每次只能有一个处于激活状态(被踢下线)
启动的时候缓存(加分布式锁避免多次性能损耗)
如果项目中使用了 XXL-Job 等分布式定时任务框架,可以直接使用定时任务解决缓存预热。
请求布隆过滤器和缓存空值判断会向 Redis 发起两次网络 IO,如果想优化的话,可以使用管道或者 Lua 命令来提高性能。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class RedisService {
@Autowired
private RedisTemplate<String, String> redisTemplate;
public void batchSetKeyValuePairs() {
redisTemplate.executePipelined((RedisCallback<Object>) connection -> {
for (int i = 0; i < 100; i++) {
String key = "key_" + i;
String value = "value_" + i;
connection.set(key.getBytes(), value.getBytes());
}
return null;
});
}
}
在这个示例中,我们创建了一个RedisService服务类,使用RedisTemplate来执行管道操作。batchSetKeyValuePairs方法使用executePipelined方法来执行Redis管道操作。在管道内部,我们循环设置100个键值对,然后一次性将它们发送到Redis服务器。
请确保在Spring Boot应用程序的配置文件中正确配置了Redis连接信息,以便RedisTemplate能够连接到Redis服务器。
希望这个示例能够帮助你在Spring Boot应用程序中优化Redis的批量访问性能!
【Redis实战】有MQ为啥不用?用Redis作消息队列!?Redis作消息队列使用方法及底层原理高级进阶-腾讯云开发者社区-腾讯云 (tencent.com)
利用监听器实现,但不具备MQ的失败重试等保证可靠性和幂等性的方案