- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在做一项作业。 REST API(在 Spring 中开发)有一个 m() 方法,它模拟一个人清洁 window 。最后,清洁工必须在 window 上写下一个独特的短语(一个字符串)。所有清洁工写的短语最终都保存在 MySQL DB 中。因此,每次执行 m() 时,都会对数据库进行查询以获取迄今为止写入数据库的所有短语。 cleaner 方法 m() 然后生成一个随机字符串作为短语,在查询的短语中检查它以确保它的唯一性并将其写入数据库。因此,每个 m() 有一个查询来获取所有短语,一个查询来写入短语。两者都发生在同一张 table 上。
这是一个可以利用缓存的场景,我就上了Redis。我还认为写回缓存是最好的解决方案。因此,每次写入都会发生,它发生在缓存而不是数据库中,并且每次读取也都发生在缓存中。可以每小时在一个新线程中(或可配置的东西)将缓存复制到数据库。我在读Can Redis write out to a database like PostgreSQL?几年前,您似乎必须手动执行此操作。
我的问题:
手动执行此操作仍然可行吗?如果没有,有人可以指向我可以使用的 Redis 资源?
如果需要手动操作,这就是我计划实现的方式。是否理想?
每小时写入的短语将附加到 Redis 中的对象列表(用户标识、短语)中,午夜至凌晨 1 点的列表将称为 phrases_1,凌晨 1 点至凌晨 2 点的列表将称为 phrases_2,依此类推。每小时一个后台线程会将整个小时的列表写入数据库。每次需要提取所有短语进行检查时,我都会从缓存中加载当天的所有列表,例如phrases_1, phrases_2 循环并合并它们。 (稍后当用户数量增长时——我将不得不进行分片,但这不是我的当务之急)。
谢谢。
最佳答案
检查 https://github.com/RedisGears/rgsync (和 https://redislabs.com/solutions/use-cases/caching/ )试图解决回写和直写的情况。我尚未进行功能测试。
同样有趣的是,2020 年 CMU 论文 (https://www.pdl.cmu.edu/PDL-FTP/Storage/2020.apocs.writeback.pdf) 声称“writeback-aware 缓存是 NPcomplete 和 Max-SNP hard”
关于Redis 回写缓存仍然是一项手动任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56106965/
我试图遍历两个列表,过滤嵌套列表并将结果写回具有 java8 功能的主对象。 locations.forEach(location -> location.getSubList().stream()
我是一名优秀的程序员,十分优秀!