【问题标题】:Spring + Redis + Mysql: cache strategySpring + Redis + Mysql:缓存策略
【发布时间】:2017-01-16 04:44:16
【问题描述】:

我正在开发一个用于医疗目的的网络应用程序,用户可以在其中为特定的患者、医生和设施创建预约。每个设施可能有 N 位医生,日历将填充每位医生的 N 次预约,还将显示每位医生的可用性(例如:Doctor Who 工作时间为周三 9:00 至 12:00 和 15:00 至18:00)。

对于前端部分,我使用fullcalendar,后端使用 Struts2(控制器)+ Spring(依赖注入)+ Hibernate(DAO)。

由于用户(通常)必须加载从本周到未来一两个月的约会,并且每个设施可能有一到 N 个用户将长期使用此视图,所以我'我想使用Redis 缓存约会+ 可用性,我已经将Spring data redisLettuce 客户端添加到我的项目中。这个想法是使用@Cacheable@CachePut@CacheEvict注解作为DAO的方法,处理用户的列表,创建和更新约会,避免redis数据和数据库数据之间的冲突和其他并发问题。

我的问题是:

  1. 这是正确的策略吗?
  2. 我是否应该实施自定义密钥生成器以缓存基于设施 + 医生 ID 的约会?

【问题讨论】:

  • 该模式适合 Spring Cache 编程模型。在开始缓存之前,您应该运行性能测试以确定缓存是一种解决方案还是一种症状。您应该确保您的对象是可序列化的——您不想缓存 JPA 代理,而是缓存数据模型中的数据。关于密钥生成器:这取决于。指定一个 SpEL 表达式来创建不冲突的键并查看是否合适。

标签: java mysql spring redis spring-data-redis


【解决方案1】:

我从这里了解到,您将数据与约会和可用性分开,您希望将这些数据缓存在 redis 中,以避免不必要的数据库调用并提高性能。

我这里有几点:

  1. 如果您的数据较少,那么它不会提高性能,因为我假设 redis 服务器将被远程放置并且它也有网络开销。所以你可以选择任何 InMemory Cache 作为 Guava 缓存。

  2. 如果有大量数据使用,那么 redis 是有益的。 现在我来到第一点,如果这是正确的策略?我会说是的。 第二点,是否需要实现自定义密钥生成器取决于您将数据唯一地存储在 redis 中的方式。 Redis 是(键,值)存储。所以我认为约会将被唯一标识(设施+医生ID) 您需要实现 CustomKeyGenerator。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-08
    • 2021-05-05
    • 2013-10-13
    • 2015-09-04
    • 2010-10-06
    • 2012-09-05
    • 2020-08-03
    • 2011-11-12
    相关资源
    最近更新 更多