正常我们用redis缓存的时候,一般会这样用: 客户端/接口 查询数据到服务器,服务器首先从缓存redis中读取,当读取到数据,立即返回;当读取不到去数据库读取,读取到之后放入redis中(防止缓存穿透的通用做法),然后返回数据;

那么在平时的项目中,我们要每一个接口都这样写嘛?
答案是不需要的,第一种,可以通过aop 拦截到请求,然后将需要的请求做如上的缓存处理; 第二种就是spring中的redis默认支持,主要用注解开启就好(其实也是aop的一种实现);

开启需要两步: 首先是已经集成好了spring-redis哈;

第一步,在启动类开启缓存机制 @EnableCaching

@SpringBootApplication
@MapperScan("com.example.test.mapper")
@EnableCaching
public class TestApplication {
    public static void main(String[] args) {
            SpringApplication.run(TestApplication.class, args);
    }
}

第二步,在响应的接口上加入缓存标志,以及放入redis中的必须参数

@RequestMapping("/login")
    @Cacheable(cacheNames = "user",key = "'login'")
    public String login(Long userId) {
       // 去数据库查询
    }

这样,当访问login这个接口的时候,会首先去redis中找,找不到去数据库找,找到了放入redis中,然后返回;

其中 @Cacheable(cacheNames = "user",key = "'login'")

@Cacheable 为该接口开启缓存机制
cacheNames = "user" 在redis中缓存的key值
key ,该方法的的方法名

====================================================================================

redis中的配置文件
save 900 1 当至少有一个key值发生改变,则900s后保存
save 300 10 当至少有十个key值方式改变,则300s后保存
save 60 1000 ..............................................

redis中默认为rdb持久策略,这个就是rdb(全量同步)持久策略的配置,会有个临时dump.rdb文件,通过此文件作为数据的恢复

redis中的 aof 与 rdb
aof 为增量更新 所谓增量更新,既是dml操作,例如mysql数据库中的binlog日志一样,只保留dml操作,然后同步到数据库中;
rdb 为全量更新(上面即为全量更新);

现在说下aof同步 首先开启aof同步,找到redis-config的配置文件 然后将 appendonly no 改为 appendonly yes
appendfsync always 每次数据修改发生都保存到aof文件,效率非常低
appendfsync everysec 每秒同步一次dml操作(每秒内的所有操作都发送到缓冲区中,然后相当于一个定时任务,每s去缓存区读取,同步一次)
appendfsync no 从不同步

推荐用 appendfsync everysyn;

redis采用的是nio 多路复用,以及在linux中的epool 事件主动回调机制,每次只轮询活跃的线程(select选择器开启一个线程维护多个tcp链接,通过不断轮询,当有tcp链接有数据过来,采用轮询方式读出数据);
而在linux中是有个epool的,但是windows中没有,所以redis官网只提供了linux版本,而无windows

redis中的五种数据类型:string map list set sort-set 其中string类型的value 的最大值为512MB

redis的缓存淘汰策略共五个: 一般采用allkeys-lru,当到达设定阈值的时候移除最近未使用的key
maxmemory-policy 淘汰策略配置
即 maxmemory-policy allkeys-lru 在redis的conf中修改即可