String value = redisService.get(key); if(StringUtil.isEmpty(value)) { //封装的tryDistributedLock包括setnx和expire两个功能,在低版本的redis中不支持 try{ booleanlocked = redisService.tryDistributedLock(jedis, lockKey, uniqueId, expireTime); if(locked) { value = userService.getById(key); redis...
1、先更新缓存,再更新数据库 2、先更新数据库,再更新缓存 3、先删除缓存,后更新数据库 4、先更新数据库,后删除缓存 以下是对于以上四种场景在使用 Redis 和 MySQL 时可能遇到的问题的说明: 先更新缓存,再更新数据库: 问题:在更新缓存之后,如果更新数据库发生错误或失败,将导致缓存与数据库不同步,数据的一致性...
第一种,先删除缓存在操作数据库: 线程1准备更新数据库的值v=20,先删除缓存, 此时线程2进来, 缓存未命中,查询数据库v=10, 写入缓存v=10, cpu回到线程1继续更新数据库操作,v=20, 导致数据库和缓存不一致. 第二种,先操作数据库在删除缓存: 线程1查询缓存未命中,查询数据库v=10,准备写入缓存,此时线程2进来,...