美文网首页
数据库缓存策略

数据库缓存策略

作者: 石器时代小古董 | 来源:发表于2018-01-17 16:16 被阅读0次

阅读开源项目java-design的个人理解

相关对象:
DbManager:数据库操作  负责磁盘缓存
Cache:LruCache 负责内存缓存

一、write-through 同时写入

将数据同时写入磁盘和内存缓存起来
操作简单,写入速度慢

  public static void writeThrough(UserAccount userAccount) {
    if (cache.contains(userAccount.getUserId())) {
      DbManager.updateDb(userAccount);
    } else {
      DbManager.writeToDb(userAccount);
    }
    cache.set(userAccount.getUserId(), userAccount);
  }

二、内存优先的回写模式

优先使用内存缓存,内存缓存已满再使用磁盘缓存
写入速度快,但是一但设备发生问题数据没有及时更新到硬盘时,数据会丢失

  if (cache.isFull() && !cache.contains(userAccount.getUserId())) {
      LOGGER.info("# Cache is FULL! Writing LRU data to DB...");
    List<UserAccount> listOfUserAccounts = cache.getCacheDataInListForm();
    for (UserAccount userAccount : listOfUserAccounts) {
        DbManager.upsertDb(userAccount);
      }
     cache.clear();
    }
    cache.set(userAccount.getUserId(), userAccount);

三、磁盘优先写入模式

如果缓存中有改数据,更新磁盘中的数据,移除缓存中的数据,否则直接插入到数据库
直写数据库更加安全,效率低

   if (cache.contains(userAccount.getUserId())) {
      DbManager.updateDb(userAccount);
      cache.invalidate(userAccount.getUserId()); // Cache data has been updated -- remove older
                                                 // version from cache.
    } else {
      DbManager.writeToDb(userAccount);
    }

四、read-throught

先从内存中读取,内存没有再读取磁盘

    if (cache.contains(userId)) {
      LOGGER.info("# Cache Hit!");
      return cache.get(userId);
    }
    LOGGER.info("# Cache Miss!");
    UserAccount userAccount = DbManager.readFromDb(userId);
    cache.set(userId, userAccount);
    return userAccount;

相关文章

  • 缓存问题

    一、缓存更新策略 一般情况来说,缓存更新策略有三种: 先删除缓存,后更新数据库 先更新数据库,后更新缓存 先更新数...

  • SQLite数据库

    SQLite数据库 1.数据库简介 1.1数据库的作用:"离线缓存数据" 1.2数据缓存策略 plist 归档 偏...

  • 10.mybatis缓存

    mybatis缓存 像大多数的持久化框架一样,Mybatis 也提供了缓存策略,通过缓存策略来减少数据库的查询次数...

  • 08 Mybatis 缓存

    Mybatis 作为持久层框架也提供了缓存策略,提供缓存策略来减少数据库的查询,提高性能。 一、Mybati 一级...

  • 常用的缓存策略

    我们在做技术设计的时候,尝尝会面临缓存策略的选择,比如常见的 CPU 缓存,数据库缓存,浏览器缓存等等;缓存的大小...

  • 3种方案保证数据库与缓存的一致性

    3种方案保证数据库与缓存的一致性 延时双删策略删除缓存重试机制读取biglog异步删除缓存

  • mysql数据库和redis双写不一致方案讨论 ,如何保证数据库

    mysql数据库和redis双写不一致方案讨论 ,如何保证数据库和缓存双写一致性? 缓存和数据库之间所有的策略关系...

  • 13 | 缓存的使用姿势(一):如何选择缓存的读写策略?

    今天,我们先讲讲缓存的读写策略。你可能觉得缓存的读写很简单,只需要优先读缓存,缓存不命中就从数据库查询,查询到了就...

  • 9. Mybatis缓存

    像大多数的持久化框架一样,Mybatis 也提供了缓存策略,通过缓存策略来减少数据库的查询次数,从而提高性能。 缓...

  • 13 | 缓存的使用姿势(一):如何选择缓存的读写策略?

    这次我们先讲讲缓存的读写策略。你可能觉得缓存的读写很简单,只需要有限读缓存,缓存不命中就从数据库查询,查询到了就回...

网友评论

      本文标题:数据库缓存策略

      本文链接:https://www.haomeiwen.com/subject/jxduoxtx.html