我有一个基于SQL的应用程序,想使用Redis缓存结果。你可以把这个应用看作是一个带有多个SQL表格的通讯录。该应用执行以下任务:
40%的时间:
创建新记录/更新现有记录
批量更新多个记录
查看现有记录
60%的时间:
根据用户的条件搜索记录
这是我目前的方法:
当创建或更新记录时,系统会缓存记录。
当用户执行搜索时,系统将缓存查询结果。
此外,我还有一个Redis查找表(Redis Set),其中存储了MySQL记录ID和Redis缓存键。这样,如果MySQL记录已更改(例如,批量更新),我就可以删除Redis缓存。
如果系统在缓存搜索结果后创建了新记录怎么办?如果新记录符合搜索条件,系统将始终返回旧缓存(不包括新记录),直到缓存被删除(这将不会发生,直到缓存中的现有记录被更新)。
搜索由用户驱动,搜索条件的组合数是无数的。在创建新记录时,无法评估应删除哪个缓存。
到目前为止,唯一的解决方案是在创建记录时删除MySQL表格的所有缓存。然而,这不是一个好的选择,因为每天创建了很多记录。
在这种情况下,实现Redis在MySQL之上的最佳方法是什么?
40%的时间:
创建新记录/更新现有记录
批量更新多个记录
查看现有记录
60%的时间:
根据用户的条件搜索记录
这是我目前的方法:
当创建或更新记录时,系统会缓存记录。
当用户执行搜索时,系统将缓存查询结果。
此外,我还有一个Redis查找表(Redis Set),其中存储了MySQL记录ID和Redis缓存键。这样,如果MySQL记录已更改(例如,批量更新),我就可以删除Redis缓存。
如果系统在缓存搜索结果后创建了新记录怎么办?如果新记录符合搜索条件,系统将始终返回旧缓存(不包括新记录),直到缓存被删除(这将不会发生,直到缓存中的现有记录被更新)。
搜索由用户驱动,搜索条件的组合数是无数的。在创建新记录时,无法评估应删除哪个缓存。
到目前为止,唯一的解决方案是在创建记录时删除MySQL表格的所有缓存。然而,这不是一个好的选择,因为每天创建了很多记录。
在这种情况下,实现Redis在MySQL之上的最佳方法是什么?