【发布时间】: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 redis 和Lettuce 客户端添加到我的项目中。这个想法是使用@Cacheable、@CachePut和@CacheEvict注解作为DAO的方法,处理用户的列表,创建和更新约会,避免redis数据和数据库数据之间的冲突和其他并发问题。
我的问题是:
- 这是正确的策略吗?
- 我是否应该实施自定义密钥生成器以缓存基于设施 + 医生 ID 的约会?
【问题讨论】:
-
该模式适合 Spring Cache 编程模型。在开始缓存之前,您应该运行性能测试以确定缓存是一种解决方案还是一种症状。您应该确保您的对象是可序列化的——您不想缓存 JPA 代理,而是缓存数据模型中的数据。关于密钥生成器:这取决于。指定一个 SpEL 表达式来创建不冲突的键并查看是否合适。
标签: java mysql spring redis spring-data-redis