非银流水线上导入之缓存优化

#todo/note

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

图层 0

12306采取Redis实现搜素

因为12306铁路购票系统的线路和票基本上是固定的,因为铁路就只有那么多,而且线路基本上也是固定的,涉及的搜索场景也不需要分词所以不需要使用Elasticsearch这个内存资源大户来做所谓分布式搜索,Redis基于内存也足够搜索使用!

登录设备管理

设计合理的JSON结构存储登录设备信息,但每次只能有一个处于激活状态(被踢下线)

分布式锁与双重判定锁

缓存预热

启动的时候缓存(加分布式锁避免多次性能损耗)
如果项目中使用了 XXL-Job 等分布式定时任务框架,可以直接使用定时任务解决缓存预热。

提升Redis的批量访问性能

请求布隆过滤器和缓存空值判断会向 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的批量访问性能!